之前公司没有涉及多渠道,所以现家用的时候现学的,整理下自己的使用心得;
1:清单中定义meta-data标签 属性name和value
<meta-data
android:name="CHANNEL"
android:value="${CHANNEL_VALUE}">
</meta-data>
如果使用umeng多渠道,可以将名称修改下
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2:build.gradle中添加渠道
owner是自己定义的,用于区分其他渠道,自己的下载链接.
productFlavors{
xiaomi{}
wandoujia{}
huawei{}
oppo{}
yingyongbao{}
vivo{}
_360{}
baidu{}
owner{}
}
productFlavors.all{
flavor->flavor.manifestPlaceholders=[CHANNEL_VALUE:name]
}
3:获取渠道号
public static String getsDeviceName(Context context,String key){
String channelName="";
PackageManager packageManager = context.getPackageManager();
try {
if (packageManager != null) {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
channelName = applicationInfo.metaData.getString(key);
}
}
}
}catch (Exception e){
}
return channelName;
}
4:渠道号可添加到请求的header中传给后端.
第三步和第四步如果是友盟是不需要的.
另外多说一句,友盟初始化的方法中init()
UMConfigure.init(this,Config.UMENG_APP_KEY,"",UMConfigure.DEVICE_TYPE_PHONE,"");
第三个参数指的就是渠道,如果清单中设置过,这里传空,否则会覆盖清单的渠道!!!!!
另外打包时修改输出文件名
gradle3.0以上
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "coinplus_${variant.getFlavorName()}_v${variant.versionName}.apk"
}
}
variant.getFlavorName()获取的是渠道名如果希望带着release或者debug可以调用
variant.name
3.0以下
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//输出apk名称为:渠道名_版本名_时间.apk
def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${releaseTime()}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
网友评论