示例代码
kotlin
flavorDimensions += listOf("platformOS")
productFlavors {
create("A1") {
dimension = "platformOS"
}
create("A2") {
dimension = "platformOS"
}
create("A3") {
dimension = "platformOS"
}
}
说明
理解
维度(dimension)= 分类标准,渠道(flavor)= 这个分类下的具体选项。
翻译:
维度 = platformOS("操作系统平台"这个分类)
├─ 渠道 A1
├─ 渠道 A2
└─ 渠道 A3
A1、A2、A3 是同一维度下的三个不同渠道。
一、为什么要分"维度"
因为项目可能要按多个标准分类。
比如一个项目可能同时有:
| 维度 | 可选值 |
|---|---|
| platformOS(平台) | A1 / A2 / A3 |
| env(环境) | dev / prod |
| region(地区) | cn / eu |
每个维度代表一个"分类标准",渠道是这个标准下的具体选项。
二、如果只有一个维度
kotlin
flavorDimensions += listOf("platformOS")
productFlavors {
create("A1") { dimension = "platformOS" }
create("A2") { dimension = "platformOS" }
create("A3") { dimension = "platformOS" }
}
含义:
- 只按
platformOS一个标准分类 - 三个渠道互斥,一次只能选一个
最终会生成 3 个变体:
AAOSRelease
FlymeAutoRelease
V451Release
三、如果有两个维度
kotlin
flavorDimensions += listOf("platformOS", "env")
productFlavors {
create("A1") { dimension = "platformOS" }
create("A2") { dimension = "platformOS" }
create("A3") { dimension = "platformOS" }
create("dev") { dimension = "env" }
create("prod") { dimension = "env" }
}
含义:
- 按两个标准分类
- 每个渠道组合出一个变体
最终会生成 6 个变体(3 × 2):
A1Dev / A1Prod
A2Dev / A2Prod
A3Dev / A3Prod
这就是"维度"的意义:允许按多个标准组合出变体。
四、为什么用 flavorDimensions += 而不是 =?
kotlin
flavorDimensions += listOf("platformOS")
+=:追加一个维度=:覆盖所有维度
用 += 是更安全的写法,避免覆盖之前可能已经定义的维度。
如果只有一个维度,+= 和 = 效果一样,但 += 更保险。
五、create(...) 的写法
kotlin
create("A1") {
dimension = "platformOS"
}
等价于老写法:
kotlin
A1 {
dimension = "platformOS"
}
create("名字") { ... } 是 Gradle Kotlin DSL 推荐的写法,避免了旧写法可能带来的命名冲突。
六、完整对照表
| 概念 | 含义 | 例子 |
|---|---|---|
| Dimension(维度) | 分类标准 | platformOS、env、region |
| Flavor(渠道) | 维度下的具体选项 | A1、A2、A3 |
| Variant(变体) | 所有维度的组合 | A1Dev、A3Prod |
关系:
Variants = Dimension1 × Dimension2 × ...
七、项目实际含义
kotlin
flavorDimensions += listOf("platformOS")
productFlavors {
create("A1") { dimension = "platformOS" }
create("A2") { dimension = "platformOS" }
create("A3") { dimension = "platformOS" }
}
翻译成中文:
本项目只按"操作系统平台"一个维度分类,有三个渠道:
- A1:Android Automotive OS(XML UI)
- A2:魅族车机(XML UI)
- A3:沃尔沃 A3 项目(Compose UI)
最终生成 3 个变体:
A1Release
A2Release
A3Release
八、一句话总结
理解:
- 维度 = 分类标准 (如
platformOS) - 渠道 = 这个标准下的具体选项 (如
A1、A2、A3) - 变体 = 所有维度的组合结果 (如
A1Release)
维度是"框",渠道是"框里的选项",变体是"最终组合出来的产品"。