多渠道打包。为了方便统计不同市场的用户情况等信息。 需要实现每个市场一个唯一标识来统计信息 。比如友盟统计
友盟统计具体实现步骤我就不详述了。 可以去看友盟的文档。
我们多渠道打包一般是 Android Stuido 环境下。
1 在application 下配置meta data
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:name="CHANNEL_NAME" //获取渠道的标识key
android:value="${UMENG_CHANNEL_VALUE}" /> //不同的value区分不同的渠道
2 在gradle 下配置 UMENG_CHANNEL_VALUE 多个渠道 多个名字
productFlavors {
xiaomi {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] //这个标识将productFlavors 中的名字 赋值给 UMENG_CHANNEL_VALUE 也就是 xiaomi{} 会赋值 xiaomi 给UMENG_CHANNEL_VALUE;
}
3 打包
可以看到 已经配置的 三个渠道名字 这样答出来的包 直接是有名字区分的。 每个名字对应一个UMENG_CHANNEL_VALUE 这样就 xiaomi baidu 就根据UMENG_CHANNEL_VALUE 的值不同就可以区分开来 不同的渠道
二 多渠道的打包我们知道 改怎么实现了。 那么如果需求定的是根据不同的渠道来展示不同的启动页 图片 比如我想要在小米应用商店下载的app 打开的时候展示 小xx首发 logo 图。 百xx下载的app 打开的是百xx首发的logo图 怎么办 ?
1 根据不同渠道的UMENG_CHANNEL_VALUE 值 我可以变换 logo 图 。那么如何拿到UMENG_CHANNEL_VALUE 的值。
2
android:name="CHANNEL_NAME" //友盟的标识
android:value="${UMENG_CHANNEL_VALUE}" /> //不同的value区分不同的值
这里我们可以 根据CHANNEL_NAME 作为key 来取UMENG_CHANNEL_VALUE 这样判断一下 就可以实现需求
3 那么如何取到 UMENG_CHANNEL_VALUE 呢
ApplicationInfo info= null;
try {
info=getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
String msg =info.metaData.getString("ab");
if("xiaomi".equals(msg)){
}else if(){
}...
} catch (Exception e) {
e.printStackTrace();
}
注意我这里用的是getApplicationInfo 网上搜到的获取meta data 数据的,很多都是 ActivityInfo 这是获取在Activty节点中配置的metadata 的 我们这是在Application 节点下配置的
你要是用getActivityInfo 是拿不到东西的。
至此大功告成。