安卓多渠道打包(一)原生多渠道打包
2021-07-28 本文已影响0人
motosheep
本文,将会讲解安卓以配置gradle的方式实现多渠道打包。
开发环境:androidstudio版本为3.0以上
马上发车:
(一)生成一个签名文件
通过AndroidStudio中的build-->generate signed bundle or apk生成一个软件签名文件。


至此,app的签名文件已经生成,可以在生成的目录里面查看。本项目,签名文件存放在项目的根目录。
目录截图如下:

项目的build.gradle配置打包时签名代码如下:

至此,项目打包时,签名配置完成。
(二)配置生成的渠道(渠道名字)
首先,配置的是主app项目的AndroidManifest文件,增加一个meta标签,代码如下:

再而,在build.gradle文件中定义相关渠道信息,截图如下:

至此,可以试着rebuild一下project,发现报错了,提示信息如下:

出现该错误原因,是因为:
Android项目打包时使用了productFlavors分包,需要所有的flavors都必须属于同一个favorDimensions属性。
代码修改如下:

至此,关于多渠道打包配置已经完成,下面可以进行打包操作了,打包出来的目录结构如下:


(三)获取当前渠道的代码:
public static String getChannel(Context context) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
//key为<meta-data>标签中的name
String channel = appInfo.metaData.getString("UMENG_CHANNEL");
if (!TextUtils.isEmpty(channel)) {
return channel;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
最后,附上demo连接:码云
that's all--------------------------------------------------------------------
备注:经过测试,该方式打出的渠道包,通过三方加固后,依然稳定存在,所以建议使用该方式打包,缺点是耗时。