文章摘要
Gradle的flavor机制就像开奶茶店一样,通过定义不同"配方"自动生成定制化应用。一套主代码(主料)配合不同flavor配置(配料)可以生成多种渠道包,实现资源、代码和依赖隔离。通过在build.gradle中定义flavor维度,指定专属资源目录和差异化依赖,最终通过gradle命令一键打包所有定制版本。这种机制支持多维组合,大大提高批量生产不同版本应用的效率。简言之,flavor让开发者像操作奶茶机一样,灵活定制并自动化生成各种应用版本。
一、比喻:开“奶茶店”做定制奶茶
想象你开了一家奶茶店,顾客有各种口味需求:
- 有人要“珍珠奶茶”
- 有人要“椰果奶茶”
- 有人要“无糖奶茶”
- 有人要“加冰奶茶”
你不可能每种都手工配一次,太慢了。于是你设计了一套自动化奶茶机(Gradle),只要设置好“配方”(flavor),机器就能自动做出各种定制奶茶。
二、flavor机制是什么?
flavor就是“配方”,让你用一套代码,自动生成多种“定制奶茶”(App包)。
- 主料(主代码、主资源)大家都一样
- 配料(渠道号、包名、LOGO、依赖等)每种奶茶不同
- 自动化:一键出多种奶茶,省时省力
三、flavor机制的实现细节
1. 定义配方(flavor)
在build.gradle
里写:
android {
flavorDimensions "type"
productFlavors {
pearl {
dimension "type"
applicationIdSuffix ".pearl"
manifestPlaceholders = [FLAVOR_NAME: "珍珠奶茶"]
}
coconut {
dimension "type"
applicationIdSuffix ".coconut"
manifestPlaceholders = [FLAVOR_NAME: "椰果奶茶"]
}
sugarfree {
dimension "type"
applicationIdSuffix ".sugarfree"
manifestPlaceholders = [FLAVOR_NAME: "无糖奶茶"]
}
}
}
形象理解:
每个flavor就是一种奶茶配方,告诉奶茶机怎么做。
2. 资源/代码隔离:每种奶茶有专属配料
在src
目录下:
src/
main/ // 公共原料
pearl/ // 珍珠奶茶专属配料
coconut/ // 椰果奶茶专属配料
sugarfree/ // 无糖奶茶专属配料
形象理解:
每种奶茶有自己的珍珠、椰果、糖包,互不影响。
3. 依赖隔离:有的奶茶要加特殊原料
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
pearlImplementation 'com.example:pearl-sdk:1.0.0'
coconutImplementation 'com.example:coconut-sdk:1.0.0'
}
形象理解:
珍珠奶茶加珍珠粉,椰果奶茶加椰果粒,其他奶茶不加。
4. 一键出多种奶茶
命令行:
./gradlew assembleRelease
奶茶机自动做出所有口味的奶茶,分别装杯、贴标签。
5. 多维度flavor:奶茶还能选大小杯、冷热
你可以加多个维度,比如:
flavorDimensions "type", "size"
productFlavors {
pearl { dimension "type" }
coconut { dimension "type" }
small { dimension "size" }
large { dimension "size" }
}
自动组合出:珍珠小杯、珍珠大杯、椰果小杯、椰果大杯……
四、flavor机制的本质
- 一套代码,多种定制包
- 资源、代码、依赖、包名、渠道号都能按flavor定制
- 自动化批量生产,省时省力
五、口诀总结
- flavor如配方,定制多口味
- 资源依赖可隔离,自动批量省力气
- 多维组合更灵活,奶茶工厂效率奇