在工作中,偶尔需要面对不同客户进行需求上的细微调整,变体可以方便地完成这种调整。
本文以实践为主,部分理论知识已略过,参考理论知识补在了下面参考文档中。
其中单变体适合 单产品对应不同客户,多变体适合 单产品对应不同客户且单个客户地某个需求存在不同版本
如:音乐app 单变体 适合需要对皮肤进行不同调整的多客户
多变体 适合需要对皮肤进行不同调整的多客户,且其中A客户需要网络播放流媒体歌曲/完全本地播放歌曲 两种不同app模式
注意:
main和变体的java文件不能存在同名,个人使用习惯是main下存放base文件,在不同变体下调整对应的需求。
1 单变体
在app下build.gradle添加变体相关配置代码,变体以channel为例
// 产品变体名称,这里可以自行填写,channel为示例
flavorDimensions "channel"
// 创建产品变体
productFlavors {
common {
manifestPlaceholders = [CHANNEL: "common "]
dimension = "channel"
buildConfigField("String","CHANNEL","\"common \"")
}
meizu {
manifestPlaceholders = [CHANNEL: "meizu "]
dimension = "channel"
buildConfigField("String","CHANNEL","\"meizu \"")
}
}
在Build Variants调整到不同变体,并src下新建-文件夹-新建对应渠道地java/resources等资源


2 多变体
在app下build.gradle添加变体相关配置代码,变体以channel和wifi为例
c
// 产品变体名称
flavorDimensions "channel","wifi"
// 创建产品变体
productFlavors {
common {
manifestPlaceholders = [CHANNEL: "common "]
dimension = "channel"
buildConfigField("String","CHANNEL","\"common \"")
}
meizu {
manifestPlaceholders = [CHANNEL: "meizu "]
dimension = "channel"
buildConfigField("String","CHANNEL","\"meizu \"")
}
haswifi {
dimension = "wifi"
}
wificlose {
dimension = "wifi"
}
}
此时在Build Variants切换时会出现channel和wifi组合的variant,对应选择需要的即可。
参考
1理论知识 flavorDimensions和productFlavors------安卓gradle
https://juejin.cn/post/6844903968204652551#heading-4
2 实践 通过productFlavors实现多渠道打包
https://juejin.cn/post/7198806651562229816
3 实践 Android Gradle中的productFlavors