一.場(chǎng)景
應(yīng)用需要接入統(tǒng)計(jì)服務(wù),了解應(yīng)用在不同應(yīng)用市場(chǎng)的表現(xiàn)時(shí),分發(fā)到不同應(yīng)用市場(chǎng)的apk需要一個(gè)渠道名區(qū)分不同應(yīng)用市場(chǎng)。這時(shí)就需要打多個(gè)不同的包,每個(gè)包對(duì)應(yīng)一個(gè)渠道名, 即對(duì)應(yīng)一個(gè)應(yīng)用市場(chǎng)。
二.多渠道打包實(shí)踐(以友盟統(tǒng)計(jì)為例)
1.Gradle方式
(1)在AndroidManifest.xml清單文件中設(shè)置友盟統(tǒng)計(jì)的APPKEY和應(yīng)用推廣的渠道名稱。
<!--友盟統(tǒng)計(jì)APPKEY-->
<meta-data android:name="UMENG_APPKEY" android:value="58cba6" />
<!--應(yīng)用推廣的渠道名稱-->
<!--${UMENG_CHANNEL_VALUE}的值就是gradle中自定義配置的UMENG_CHANNEL_VALUE的值-->
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/>
(2)在項(xiàng)目Module的build.gradle文件的android標(biāo)簽下添加代碼,配置多個(gè)渠道。
//多渠道配
productFlavors {
//設(shè)置百度應(yīng)用市場(chǎng)渠道名為baidu
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu "]
}
//設(shè)置360應(yīng)用市場(chǎng)渠道名為360
360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
}
//設(shè)置wandoujia 應(yīng)用市場(chǎng)渠道名為wandoujia
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia "]
}
}
(3)簽名打包,這時(shí)就會(huì)生成對(duì)應(yīng)(2)中配置的三個(gè)渠道的三個(gè)apk文件。
(4)特殊需求:每個(gè)渠道包的圖標(biāo)和應(yīng)用名都不一樣。
a.在AndroidManifest.xml清單文件中設(shè)置包名和圖標(biāo)時(shí)如下
<application
android:icon="${app_icon}"
android:label="${app_name}">
b.步驟(2)中修改以下
productFlavors {
baidu {
//設(shè)置百度應(yīng)用市場(chǎng)渠道下渠道名為baidu
//應(yīng)用名@string/app_name_baidu
//應(yīng)用名@string/app_name_baidu
manifestPlaceholders = [app_name: "@string/app_name_baidu",
app_icon: "@string/app_name_baidu",
UMENG_CHANNEL_VALUE: "baidu"]
}
360{
manifestPlaceholders = [app_name: "@string/app_name_360",
app_icon: "@mipmap/no2",
UMENG_CHANNEL_VALUE: "360"]
}
wandoujia{
manifestPlaceholders = [app_name: "@string/app_name_wandoujia",
app_icon: "@mipmap/no3",
UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
2.使用360加固寶
(1)在AndroidManifest.xml清單文件中設(shè)置友盟統(tǒng)計(jì)的APPKEY和應(yīng)用推廣的渠道名稱。
<!--友盟統(tǒng)計(jì)APPKEY-->
<meta-data android:name="UMENG_APPKEY" android:value="58cba6c6e88bad3c540008d3" />
<!--設(shè)置一個(gè)默認(rèn)的渠道名:service-->
<meta-data android:name="UMENG_CHANNEL" android:value="service"/>
(2)360加固寶的配置信息中進(jìn)行多渠道配置

如上圖添加了三個(gè)渠道
選擇友盟統(tǒng)計(jì)平臺(tái)對(duì)應(yīng)步驟(1)中設(shè)置渠道名中的name:UMENG_CHANNEL
填寫(xiě)渠道編號(hào)對(duì)應(yīng)步驟(1)中設(shè)置渠道名中的value:wandoujia
(3)使用AndroidStudio打包一個(gè)apk,再用360加固寶對(duì)apk加固,這時(shí)就會(huì)產(chǎn)生3個(gè)加固后的apk。(都這里別和我說(shuō)加固寶不會(huì)用)
三.獲取渠道信息
想要驗(yàn)證渠道包的渠道名是不是相對(duì)應(yīng),這就需要獲取渠道信息進(jìn)行驗(yàn)證,代碼如下。
//key為渠道名的key,對(duì)應(yīng)友盟的 UMENG_CHANNEL
private String getChannel(Context context,String key) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString(key);
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}