前言
渠道可理解成安卓apk應用市場平臺,所以多渠道打包可以理解成在打包多個應用市場的apk,要在每個應用市場上打包一個安卓Apk,這樣好處是可以在查看apk在每個安卓市場的下載量,活躍度,便於公司進行重點運營和推廣,因爲友盟多渠道統計比較成熟,所以公司採用的是友盟的多渠道打包統計;
首先要在友盟的官網上註冊一個賬號 , 並且創建一個應用 , 從而獲得 一個 唯一的 appkey ,安卓 和iOS 的不能共用,命名規則是 app名 + android 或 app 名 + ios 等等。
第一步. 在app.gradle 中添加依賴。
//友盟
compile 'com.umeng.sdk:common:1.5.0'
compile 'com.umeng.sdk:analytics:7.5.0'
第二步:就是在 manifest 中添加渠道號
<meta-data android:value="5bc7001cb465f53e6d000266" android:name="UMENG_APPKEY"/>
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/>
解釋: 第一個value 是你在友盟上申請的appid 第二個value 僅僅是一個佔位符。
第三部: 在app. gradle 中配置渠道號
productFlavors{
wandoujia{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
}
// productFlavors.all { flavor->
// flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
// }
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant -> //批量修改Apk名字
variant.outputs.all { output ->
if (!variant.buildType.isDebuggable()) {
//獲取簽名的名字 variant.signingConfig.name
//要被替換的源字符串
// def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"
def sourceFile = ".apk"
//替換的字符串 //輸出apk名稱爲:渠道名_版本名_時間.apk
// def replaceFile = "${variant.productFlavors[0].name}_V${variant.versionName}_${variant.flavorName}_${variant.buildType.name}"
def replaceFile = "-${variant.versionName}_${buildTime()}.apk"
outputFileName = output.outputFile.name.replace(sourceFile, replaceFile)
}
}
}
}
}
在 android studio 3.0以上的版本 可能會報錯 ,
All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
只需要在 版本號下面添加此句就 ok 了 , 元嬰是維度不統一。
//版本名後面添加一句話,意思就是flavor dimension 它的維度就是該版本號,這樣維度就是都是統一的了
flavorDimensions "versionCode"
最後在application 中的oncreate 方法中 初始化方法就 行了
try {
ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
value = appInfo.metaData.getString("UMENG_CHANNEL");
Log.d("Tag", " app key : " + value); // Tag﹕ app key : AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (value != null)
{
UMConfigure.init(this, ConstantUtils.YM_APPKEY, value, UMConfigure.DEVICE_TYPE_PHONE, ConstantUtils.YM_SECRET);
UMConfigure.setLogEnabled(true);
MobclickAgent.setScenarioType(mContext, MobclickAgent.EScenarioType.E_UM_NORMAL);
ToastUtils.showTextToast(value);
}
其中 ConstantUtils.YM_APPKEY 和ConstantUtils.YM_SECRET 就是appkey 值是一樣的
打包後會生成
因爲我只配置了兩個渠道 ,想要更多 自己配置就ok 了