productFlavors
的作用是在一套代码上编译不同的APK版本。
例如发布不同的渠道,使用不同的服务器地址,不同的图标,不同的包名等等。这些差异可大可小,如果差异很多那么就相当于两个完全不同的APK了,那么就就近似于两个Module,这时也就失去了它的意义了。
productFlavors
在编译时的作用其实很简单,就是根据gradle配置,编译对应产品的源码文件,资源文件等。
实例讲解
先上build.gradle的代码:
android{ productFlavors{ productA{ applicationId "com.flyscale.gradleflavor.a" versionName "version-a-1.0" buildConfigField("String", "PRODUCT_NAME", "\"a\""); buildConfigField("boolean", "LOG_DEBUG", "true"); resValue("") } productB{ applicationId "com.flyscale.gradleflavor.b" versionName "version-b-1.0" buildConfigField("String", "PRODUCT_NAME", "\"b\""); buildConfigField("boolean", "LOG_DEBUG", "false"); } } }
我定义了两个产品productA和productB,配置不两个产品不同的包名,定义了两个变量PRODUCT_NAME和LOG_DEBUG。到这时sync一下就可以看到build的时候的不同了:
image.png
这里可以选择你要debug的不同产品。
为不同产品区分代码,新建产品的目录,结构跟main其实是一样的,甚至可以理解不同目录为不 同的分支:
image.png
可以看到,产品A和产品B定制了不同的java源文件,res资源和AndroidManifest.xml。
其实也没啥好讲的,用法很简单,只是一个小工具而已,而且如果不需要多渠道打包或者类似情况,其实没啥用。