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

如上圖添加了三個渠道
選擇友盟統(tǒng)計平臺對應(yīng)步驟(1)中設(shè)置渠道名中的name:UMENG_CHANNEL
填寫渠道編號對應(yīng)步驟(1)中設(shè)置渠道名中的value:wandoujia
(3)使用AndroidStudio打包一個apk,再用360加固寶對apk加固,這時就會產(chǎn)生3個加固后的apk。(都這里別和我說加固寶不會用)
三.獲取渠道信息
想要驗證渠道包的渠道名是不是相對應(yīng),這就需要獲取渠道信息進(jìn)行驗證,代碼如下。
//key為渠道名的key,對應(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 "";
}