产品分区-ProductFlavors(一)

1,074 阅读2分钟

ProductFlavors介绍

我们在开发过程中,肯定会遇到这样的问题:咱们从原来的app上重新拉出来一个新的项目,简单调下接口,一个月之后上产品。开始还好,简单改动没什么;但是当我们不断的优化项目的时候,我们就会发现,做的很多事情,都需要重新复制过去。如果是多人开发的项目就更加麻烦,总会有人忽略掉一些关键问题,造成bug。其实gradle早就已经提供了方便解决方案:ProductFlavors

android {

    defaultConfig {
        flavorDimensions "default"
    }
    
    productFlavors{
        A{
        manifestPlaceholders = [APP_NAME: "A"]
        }
        B{
        manifestPlaceholders = [APP_NAME: "B"]
        }
    }
}
 <application
        android:name=".application.Applocation"
        android:allowBackup="false"
        android:icon="@drawable/a"
        android:label="${APP_NAME}"
        android:persistent="true"
        android:roundIcon="@drawable/a_bg"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
   tools:replace="android:icon,android:theme,android:allowBackup,android:label,android:roundIcon">

只需要这样,我们就能够再不同大产品打包时,产生不同的名称。其中 flavorDimensions 在新版本中必须要加。 [APP_NAME: "B"] 也可以是 [APP_NAME: "@string/a"] 的形式。

除此之外,我们还可以进行多种资源的定义:资源对象,自定义变量等。

productFlavors{
    A{
        manifestPlaceholders = [APP_NAME: "A"]
        resValue "string", "name", '"A"'
        buildConfigField "String" , "channel" , '"1"'
        applicationIdSuffix ".a"//applicationId后生成后缀
        dimension 'app'
     }
    B{
        manifestPlaceholders = [APP_NAME: "B"]
        resValue "string", "name", '"B"'
        buildConfigField "String" , "channel" , '"2"'
        applicationIdSuffix ".b"
        dimension 'app'
     }

进行这些简单的配置之后,我们打包的时候,就可以出现不同产品的打包选项了。但这只是一些最基本的配置,我们在产品线明确之后,逻辑处理不同UI的情况。我们还需要进行一些其他的配置。

我们可以在src文件夹下,创建不同的产品文件夹:A、B:

文件1

我们就可以在A/B文件夹内创建不同的页面或者逻辑代码,AS在打包的过程中,会自动引用不同的文件。

文件2

产品分区-ProductFlavors(二)

Android中文官网

Github

红粉易妆娇态女,无钱难作好儿郎