版权声明:转载请申明出处,谢谢 https://blog.csdn.net/qq_35495763/article/details/86322197
问题一:为什么会有多渠道打包的情况发生?
背景:发布或者推广 的渠道不同,造成了app会有很到个。为了对不同的渠道做不同的处理。
问题二:解释基本原理
Android gradle 中,定义了有一个Build Variant的概念。(构建变体)
build Variant= buildType+Product Flavor.(确定生成一个包)
buildType:构建类型(举例:release 、debug)
product Flavor :就是构建渠道
实现方式
使用prodductFlavors 方法来添加不同的渠道。(也是一个域对象类型)
android {
prouductFlavors {
google{} //这是一个productFlavor
baidu{}
}
}//配置之后,会生成许多Task
productFlavor 的属性
- applicationId(包id)
- consumerProguardFiles(只应用于库项目中)
情形说明:
作用一:发布一个aar 时,consumerProguardFiles 会将配置的文件列表打包到aar中。
作用二:引用库项目是,启用构建时的混淆会自动启用aar里混淆文件进行混淆。不再需要对aar包进行混淆了。
android {
productFlavors {
google {
consumerProguardFiles 'proguard-rules.pro','proguard-android.txt'
}
}
}
dimension 属性
可以简单的理解为是对ProductFlavor 进行分组。
build Variant 中的ProductFlavor拆分成两个维度(x,y)来共同决定一个ProductFlavor;
举例:
生成的结果就是:
总结:
操作步骤
- 指定拆分维度(注意维度顺序)
- 指定具体每个productFlavor(拆分出来的维度依旧是一个小ProductFlavor) 所属维度
3.维度的顺序 :高的取代低纬度,低纬度取代默认配置
如图:第一维替换到第二维的配置
实质:多个维度指定了同一个值,获取哪个的标准。