公司的软件不同的应用市场的应用名都大不一样,有时候这个应用市场需要加广告,那个需要加首发,一个个打包的话会浪费很多时间,还很大几率会出错
下面就是通过配置gradle,实现一键打包,达到各个包不同的效果。
第一步:在 gradle -> android -> productFlavors 里添加代码,也就是你的不同渠道名
productFlavors {
aa_main {}
huawei {}
yyb {}
q_360 {}
oppo {}
sogou {}
vivo {}
meizu {}
anzhi {}
baidu {}
lenovo {}
xiaomi {}
pp {}
}
第二步 渠道添加了之后,就开始配置各个渠道的一些不同的资源或者字段
在 gradle -> android -> sourceSets 中添加如下代码
sourceSets {
//夜间模式资源设置
main { res.srcDirs = ['src/main/res', 'src/main/res-night'] }
//渠道资源路径配置
huawei.res.srcDirs = ['src/main/res-huawei']
yyb.res.srcDirs = ['src/main/res-yyb']
q_360.res.srcDirs = ['src/main/res-360']
oppo.res.srcDirs = ['src/main/res-oppo']
sogou.res.srcDirs = ['src/main/res-sogou']
vivo.res.srcDirs = ['src/main/res-vivo']
meizu.res.srcDirs = ['src/main/res-meizu']
anzhi.res.srcDirs = ['src/main/res-anzhi']
baidu.res.srcDirs = ['src/main/res-baidu']
lenovo.res.srcDirs = ['src/main/res-lenovo']
xiaomi.res.srcDirs = ['src/main/res-xiaomi']
pp.res.srcDirs = ['src/main/res-pp']
}
res.srcDirs 是设置该渠道下的资源文件路径,还可以设置java,jniLibs 等各种文件资源路径
我这里的360渠道下只是图片和字段有些不同
注意点:你需要先把基础的资源文件都设置好,比如本来你的应用名称存储在app->src->main->res->value->strings 文件下的app_name,但360包的应用名不一样,这样你在上图的res-360 的 strings 文件中在添加一个app_name 就好了
第三步就是打包了
为了让打出来的apk通过文件名字就可以对apk信息一目了然,做了以下处理
在productFlavors 再添加如下代码
android.applicationVariants.all {
variant ->
variant.outputs.all {
output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
if (variant.buildType.name == 'release') {
def fileName = "zdread_v${defaultConfig.versionCode}_${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
outputFileName = fileName
} else {
def fileName = "${releaseTime()}_${variant.productFlavors[0].name}_debug.apk"
outputFileName = fileName
}
}
}
}
最后打出来的apk文件名的格式就固定成了
zdread_v应用版本号_应用版本名_打包时间_渠道名.apk
简单的三步,就完成了对多渠道打包的配置
其实如果只是简单的应用名不一样,还可以直接在第一步中完成,不需要后面两步
q_360{ buildConfigField “String”, “app_name”, “应用名”}
然后在AndroidManifest.xml 文件中修改
android:label="${app_name}"