flavorDimensions 从单词字面理解知道是 “风味维度”
是需要结合 “产品风味(即productFlavors)” 来一起使用的。
android {
// 省略其他参数
flavorDimensions 'ENV', "DEVICE_TYPE"
}
定义出两个维度:env和 device_type。一个参数一个维度,
productFlavors 从字面了解是“产品风味”。他需要和一个风味维度对接,否则会报错。
接着我们上面的例子,使用 productFlavors 定义维度上的风味,使用 dimension
关联。
// 创建产品风味
productFlavors {
horizon {
dimension "DEVICE_TYPE" // 关联纬度
}
vertical {
dimension "DEVICE_TYPE"
}
beta {
dimension 'ENV'
buildConfigField("String","LOGIN_URL","\"https://www.beta.login.com/\"")
buildConfigField("String","OSS_URL","\"https://www.beta.oss.com\"")
}
prod {
dimension 'ENV'
buildConfigField("String","LOGIN_URL","\"https:///www.prod.login.com/\"")
buildConfigField("String","OSS_URL","\"https://www.prod.oss.com\"")
}
}
在 device_type维度上关联了两个产品,即 “horizon” 和 “vertical”
在 env 的维度上关联了两个产品,即 “beta”、“prod”
这些维度的交织就会形成最终的风味,
horizon_beta vertical_beta
horizon_prod vertical_prod
不同维度定义参数,如url,用buildConfigField
可以根据不同的风味,打出不同的apk包,便可以实现一套核心代码打出多个有些差异的包。
android {
productFlavors{
zincPower{
// applicationId 应用的包名,会覆盖 defaultConfig 中的 applicationId
// applicationId 会替换 AndroidManifest.xml 中的 manifest 标签下 package 的 value
applicationId "com.zinc.power"
// 会追加在 applicationId 字符串的后面,形成最终的包名。
applicationIdSuffix '.debug'
// 风味的维度,指定我们当前风味所所属的维度
dimension 'version'
配置差异化的 logo 和 app名字
manifestPlaceholders = [
logo : "@drawable/logo_bear",
appName : "bear",
]
// 配置签名
signingConfig signingConfigs.xiaopenyou
}
}
}
然后在 AndroidManifest.xml
中使用,使用 ${你配置的变量名}
buildConfigField('String', 'name', '"XiaoPenYou"')
buildConfigField('int', 'age', '26')
会生成
String name = BuildConfig.name;
int age = BuildConfig.age;