Android多渠道打包(Gradle和360加固宝)

一.场景

应用需要接入统计服务,了解应用在不同应用市场的表现时,分发到不同应用市场的apk需要一个渠道名区分不同应用市场。这时就需要打多个不同的包,每个包对应一个渠道名, 即对应一个应用市场。

二.多渠道打包实践(以友盟统计为例)

1.Gradle方式
(1)在AndroidManifest.xml清单文件中设置友盟统计的APPKEY和应用推广的渠道名称。


 
 

(2)在项目Module的build.gradle文件的android标签下添加代码,配置多个渠道。
//多渠道配
productFlavors {
   //设置百度应用市场渠道名为baidu
    baidu {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu "]
    }
   //设置360应用市场渠道名为360
    360 {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
    }
    //设置wandoujia 应用市场渠道名为wandoujia 
    wandoujia {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia "]
    }
}
(3)签名打包,这时就会生成对应(2)中配置的三个渠道的三个apk文件。
(4)特殊需求:每个渠道包的图标和应用名都不一样。
a.在AndroidManifest.xml清单文件中设置包名和图标时如下

b.步骤(2)中修改以下
productFlavors {
    baidu {
        //设置百度应用市场渠道下渠道名为baidu   
        //应用名@string/app_name_baidu
        //应用名@string/app_name_baidu
        manifestPlaceholders = [app_name: "@string/app_name_baidu",
                                app_icon: "@string/app_name_baidu",
                                UMENG_CHANNEL_VALUE: "baidu"]
    }
    360{
        manifestPlaceholders = [app_name: "@string/app_name_360",
                                app_icon: "@mipmap/no2",
                                UMENG_CHANNEL_VALUE: "360"]
    }
    wandoujia{
        manifestPlaceholders = [app_name: "@string/app_name_wandoujia",
                                app_icon: "@mipmap/no3",
                                UMENG_CHANNEL_VALUE: "wandoujia"]
    }
}
2.使用360加固宝
(1)在AndroidManifest.xml清单文件中设置友盟统计的APPKEY和应用推广的渠道名称。


 

(2)360加固宝的配置信息中进行多渠道配置
Android多渠道打包(Gradle和360加固宝)_第1张图片

如上图添加了三个渠道
选择友盟统计平台对应步骤(1)中设置渠道名中的name:UMENG_CHANNEL
填写渠道编号对应步骤(1)中设置渠道名中的value:wandoujia

(3)使用AndroidStudio打包一个apk,再用360加固宝对apk加固,这时就会产生3个加固后的apk。(都这里别和我说加固宝不会用)

三.获取渠道信息

想要验证渠道包的渠道名是不是相对应,这就需要获取渠道信息进行验证,代码如下。

//key为渠道名的key,对应友盟的 UMENG_CHANNEL
private String getChannel(Context context,String key) {
    try {
        PackageManager pm = context.getPackageManager();
        ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
        return appInfo.metaData.getString(key);
    } catch (PackageManager.NameNotFoundException ignored) {
    }
    return "";
}

你可能感兴趣的:(Android多渠道打包(Gradle和360加固宝))