因爲國內Android應用分發市場的現狀,我們在發佈APP時,一般需要生成多個渠道包,上傳到不同的應用市場。這些渠道包需要包含不同的渠道信息,在APP和後臺交互或者數據上報時,會帶上各自的渠道信息。這樣,我們就能統計到每個分發市場的下載數、用戶數等關鍵數據
普通做法
通常情況下的做法是在AndroidManifest
中增加渠道號
<meta-data
android:name="channel"
android:value="baidu"/>
然後在代碼中獲取該渠道號
private String getChannel(Context context) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("channel");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return "";
}
如需要切換小米渠道,則再次更改爲
<meta-data
android:name="channel"
android:value="xiaomi"/>
然後再次打包。如此一來,重複的工作量大大增加。於是就有了AndroidStudio上的多渠道打包
Android Studio上的多渠道打包
- 在
AndroidManifest.xml
文件中,還是依舊的meta-data
標籤,只是屬性改爲動態的屬性
<meta-data
android:name="channel"
android:value="${APP_CHANNEL_VALUE}"/>
- 在
build.gradle
中的android
標籤內增加如下代碼,其中APP_CHANNEL_VALUE
後面的值就是渠道號的值
productFlavors{
xiaomi{
manifestPlaceholders = [APP_CHANNEL_VALUE:"xiaomi"]
}
baidu{
manifestPlaceholders = [APP_CHANNEL_VALUE:"baidu"]
}
}
如果提示All flavors must now belong to a named flavor dimension
,點此查看解決辦法
- 在我們使用Build-Generate Signed Bundle or APK時,點擊Next,就會出現以下界面,全選即可,打包就在默默的進行了