1.让buildType支持继承
如果想新增一个buildType,又想继承之前配置的一些参数,则用**init.with()**很适合。
buildTypes {
release {
//true:开启混淆/压缩
minifyEnabled true
//proguard-android-optimize.txt是Android SDK默认混淆配置文件,
//proguard-rules.pro是我们自定义混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug.initWith(buildTypes.release)//继承release配置
debug {
minifyEnabled false //覆盖release中的一些配置
}
}
让Flavor支持继承
在开发的过程中,有开发版本、提交测试版本、内部测试版本、预发版本、正式版本等多个版本。为了识别这些版本,需要用到Flavor的高级用法。
使用flavorDimensions风味维度的配置
Flavor其实是一个多维度的定义,下面举个实际的四维例子。
【是否免费】+【渠道】+【针对用户】+【Debug/Release】
示例:
新建项目,然后在app/build.gradle文件里配置两个风味维度(“company”,“channel”),如下:
defaultConfig {
applicationId "com.voctex.flavorsapp"
minSdkVersion 18
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
flavorDimensions "company","channel"
}
然后进行产品的多维度配置:
productFlavors{
//随便命名,建议根据该维度的具体信息进行命名
companyA{
dimension "company"
}
companyB{
dimension "company"
}
channelA{
dimension "channel"
}
channelB{
dimension "channel"
}
}
这么配置之后,一共就有了4种风味的包了。
可以在AS 最右边的Gradle-Tasks-build查看
打包构建之后就会出现多个维度的产品,对应如下,如图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210310140207913.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6al93aGF0X3doeV9ob3c=,size_16,color_FFFFFF,t_7
可以理解为总共有两个维度,公司(company)和渠道(channel),这里公司的维度排前面(排序先后有要求,下面会讲到),所以所有的产品就是,A公司的A渠道产品,A公司的B渠道产品,B公司的A渠道产品,B公司的B渠道产品。
每增加一个维度,Flavor的个数会呈指数级增加。可见,增加维度之后,版本差异化的内容就更为丰富了。
在java代码中,开发者可以很容易地进行二维判断,代码也比较直观
if(BuildConfig.IS_FOR_TEST){
Switch(BuildConfig>FLAVOR_channel){
case "A":
//....
break;
case "B":
//...
break;
}
}
当然,很多时候,只是用到了一个维度而已version。
ref:
[1] 金凯 Android 工程化最佳实践[M].北京:电子工业出版社, 2019:228-236.
[2]Android Studio3.0 flavorDimensions多维度理解(版本差异化打包)