前言
渠道可理解成安卓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 了