代码获取渠道名

来源:互联网 发布:出名的网络暴力事件 编辑:程序博客网 时间:2024/05/14 02:32
 /**     * 获取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中修改以下值:

<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" />

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

<meta-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就可以一次性生成所有的渠道包了
原创粉丝点击