代码获取渠道名

 /**
     * 获取application中指定的meta-data 调用方法时key就是UMENG_CHANNEL
     * @return 如果没有获取成功(没有对应值,或者异常),则返回值为空
     */
    public static String getAppMetaData(Context ctx, String key) {
        if (ctx == null || TextUtils.isEmpty(key)) {
            return null;
        }
        String resultData = null;
        try {
            PackageManager packageManager = ctx.getPackageManager();
            if (packageManager != null) {
                ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
                if (applicationInfo != null) {
                    if (applicationInfo.metaData != null) {
                        resultData = applicationInfo.metaData.getString(key);
                    }
                }

            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        return resultData;
    }

渠道信息一般在 AndroidManifest.xml中修改以下值:


"UMENG_CHANNEL" android:value="wandoujia" />

首先你必须在AndroidManifest.xml中的meta-data修改以下的样子:

data
   android:name="UMENG_CHANNEL"
   android:value="${UMENG_CHANNEL_VALUE}" />

其中 UMENGCHANNELVALUEgradlebuild.gradleproductFlavorsproductFlavorswandoujiamanifestPlaceholders=[UMENGCHANNELVALUE:wandoujia]baidumanifestPlaceholders=[UMENGCHANNELVALUE:baidu]c360manifestPlaceholders=[UMENGCHANNELVALUE:c360]ucmanifestPlaceholders=[UMENGCHANNELVALUE:uc][UMENGCHANNELVALUE:wandoujia] {UMENG_CHANNEL_VALUE}的值。

可以简化

后来发现上面的重复代码太多,就在网上又发现了一个更简洁的写法
productFlavors {
wandoujia {}
baidu {}
c360 {}
uc {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
其中name的值对相对应各个productFlavors的选项值,这样就达到自动替换渠道值的目的了。
这样生成apk时,选择相应的Flavors来生成指定渠道的包就可以了,而且生成的apk会自动帮你加上相应渠道的后缀,非常方便和直观。大家可以自己反编译验证。
一次生成所有渠道包
在android studio底栏中有个命令行工具Terminal,打开后就CMD可以自动切换到当前项目的目录下。
有的项目下会有graldew.bat这个文件,你就可以输入这个命令:
gradlew assembleRelease
就可以一次性生成所有的渠道包了

你可能感兴趣的:(android开发技巧总结)