What:
我们知道Flavor的作用是将debug和releas维度扩大,而它是基于flavor的一个扩展,另维度再次扩大,它是一个属性,全名叫做:flavorDimensions,看名字可知,要用它,必须先要有会用Flavor。可能现在你还有点迷糊,下面看个例子。
Think:
在理解了flavor的前提下(Flavor基本使用),我们需要明白一个概念—————维度!
维度在gradle中的体现是:flavorDimensions,譬如:
flavorDimensions(“money”, “channel”)
这是一个正确的维度扩展思路
money
场景,一个APP,我们推出收费和免费的版本。channel
场景,不同的市场渠道。
根据这个思路来改代码:
原有:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
productFlavors {
baidu {
manifestPlaceholders = [CHANNEL: "baidu"]
}
xiaomi {
manifestPlaceholders = [CHANNEL: "xiaomi"]
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
目前是四个渠道:
添加flavorDimensions后:
android{
...
flavorDimensions("money", "channel")
productFlavors {
vip {
dimension "money"
}
free{
dimension "money"
}
baidu {
manifestPlaceholders = [CHANNEL: "baidu"]
dimension "channel"
}
xiaomi {
manifestPlaceholders = [CHANNEL: "xiaomi"]
dimension "channel"
}
}
...
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
目前是几个渠道?8个。
逻辑上就是:
由:
debug/releas(2) * 渠道(2) = 4个
变成了:
debug/releas(2) * 渠道(2) * 新增维度vip/free(2) = 4 * 2 = 8个
如下图所示:
然后我们再从代码理解上来:
- 只要你定义了flavorDimensions,那么你后面的每个flavor就必须要写”dimension”这个属性。
- baidu和xiaomi是属于渠道这个维度,所以它的dimension是channel。
- vip和free这俩个flavor是属于money这个维度(收费与免费),所以它的dimension是money。
Error:
一个常规性的思维误区,类似这么定义一个flavorDimensions:
flavorDimensions("vip", "free")
- 1
vip和free实际上是属于同一个维度,即“money”,所以这么定义是不对的。
这也是我最开始犯的思维误区。