以前使用eclipse 多渠道打包使用python,命令方式进行打包。
android studio 多渠道打包更方便 ,相关的文档位于:https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration#test_modules
1.在app 的build.gradle中定义渠道名称 productFlavors
productFlavors {
xiaomi {
manifestPlaceholders = [CHANNEL_VALUE: "xiaomi"]
}
huawei {
manifestPlaceholders = [CHANNEL_VALUE: "huawei"]
}
vivo {
manifestPlaceholders = [CHANNEL_VALUE: "vivo"]
}
oppo {
manifestPlaceholders = [CHANNEL_VALUE: "oppo"]
}
yyb {
manifestPlaceholders = [CHANNEL_VALUE: "yyb"]
}
}
注:如果报错,忘记把问题截取下来了 报:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com,无法bulid成功 ,在
defaultConfig {
.......
flavorDimensions "versionCode"
}
摘自:https://blog.youkuaiyun.com/syif88/article/details/75009663,多谢。
接着bulid,既可以了。
2.接着是打包添加渠道的名称,outputFileName gradle 3.0后使用它。
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = '' + variant.productFlavors[0].name + "-" + defaultConfig.versionName + '.apk' }
}
至此在build.gradle 中的代码完成
3.在AndroidManifest.xml中添加你的渠道meta-data
<meta-data android:name="CHANNEL" android:value="${CHANNEL_VALUE}"/>
注意:name别写错了
4.在你代码中获取渠道
/**
* 获取channel值
*/
private void getAppChannel(){
PackageManager packageManager=this.getPackageManager();
try {
ApplicationInfo applicationInfo=packageManager.getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo.metaData!=null){
app_channel = String.valueOf(applicationInfo.metaData.get("CHANNEL"));
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
获取的渠道名称你可以传递给服务器,或者其他使用的第三方平台。
接着就是打包了,

你可以复选你想打包的渠道了,点击finish,打包完成后,找到包的位置。
注意:
mac打包完成后,在message里面点击打包完成的locate ,结果没有看到自己打的包。找了一会儿,发现不对,我直接进入到我打包位置的文件夹,一层一层的找,结果在这个locate进去的上层文件夹中找到了,到此就完成了。更过的打包的内容可以查看官方文档:
https://developer.android.com/studio/build/build-variants
其他打包方式有:
比较快的还有美团的:https://tech.meituan.com/android_apk_v2-signature_scheme.html 文档写的详细,同时其他的文档都值得学习。
3198

被折叠的 条评论
为什么被折叠?



