提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
多渠道或者多地区需要分不同的应用版本,出不同的apk,通过android studio 的flavor变体可以简单实现,也方便管理.
一、如何增加变体
android studio创建项目时默认就有两个变体:debug release,一般都是在这个基础上增加变体
android studio 的变体划分是需要一个维度的的,具体的变体都需要指导一个维度归属,比如划分两个变体:英国版本:en 日本版本:jp,那么这两个变体都需要一个维度归属,我选择地区作为维度:region.
代码实现:
build.gradle文件中
defaultConfig {
flavorDimensions += "region" //分包维度
//增加更多维度可以直接同样格式写下面 如下
// flavorDimensions += "region" //分包维度
// flavorDimensions += "qq" //分包维度
// flavorDimensions += "aa" //分包维度
// flavorDimensions += "dd" //分包维度
//或者 flavorDimensions += listOf("region", "qq", "aa", "dd")
}
productFlavors {
en {
dimension "region" //指定所属维度
// 设置特定属性
}
jp{
dimension "region" //指定所属维度
// 设置特定属性
}
}
sync一下,此时项目中已经多了变体,可以在编译选项中看到
二、不同变体差异化代码实现
1.创建分包目录,文件差分
这里演示的是代码文件,资源文件以及AndroidManifest.xml也可以同样差分
如下:
右键src-new-Directory
选择对应变体和使用的语言就行,我用的时候ide只有一种变体可以选,但是手动创建同名的目录也可以识别
同名文件会导致冲突,方案是删掉原来的文件,只留下分包目录下的文件,不同分包可以有同名文件
2.代码中判断编译的变体做差分
上面代码文件分包会有多份同名文件,有时候改动可能只有一行代码,可以直接在代码中判断编译的变体
代码如下(示例):
build.gradle文件中
buildFeatures {
buildConfig true
}
代码文件中
if ("jp".equals(BuildConfig.FLAVOR)) {
} else if ("en".equals(BuildConfig.FLAVOR)) {
}
3.修改编译默认变体
这里可以修改run app的默认变体
总结
地区渠道免费付费,同一个应用的不同差分版本通过flavor来做可以很方便的修改和管理,但是不同维度的变体之间不同的排列组合,导致维度多的话编译数量会激增