Android----多渠道打包

什么是多渠道打包?

同一个项目针对不同应用平台的app包。

为什么要多渠道打包?

公司想统计下哪些应用平台下载app的数量,这时,我们就需要这鬼东西了。
怎么多渠道打包?

1.在build.gradle中配置

说明:这里试着配置了三个渠道信息,wandoujia、baidu、c360。当然这三个的名字是随便由你自己去取的。

applicationId:表示该渠道的包名

UMENG_CHANNEL_VALUE:渠道代表的名称,如果我们想在代码里面获取这个app是哪个应用市场下载的,就可以通过获取这个值来判断,值由你自己随便填

appname :app的名称
app_icon:app的图标
resValue :定义字符串,意思是在 string.xml 中添加一个字符串,appName:表示字符串的名字,所有这里定义的在string.xml中就不能在重复定义相同的了,否则会报错,要用的时候也是使用 R.string.appName
buildConfigField : 修改常量,String:表示类型,ENVIRONMENT:表现名字, 360:表示常量的值,这些都由你自己决定。然后我们就可以随便创建一个类Constants,通过BuildConfig.ENVIRONMENT就可以去应用这边变量

Android----多渠道打包_第1张图片
图片.png

productFlavors {
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia",
                                    appname : "豌豆荚",
                                    app_icon   : "@mipmap/ic_launcher"
            ]
            buildConfigField "String", "ENVIRONMENT", '"豌豆荚"'
            buildConfigField "boolean", "isrRank", 'true'
            resValue "string", "appName", "豌豆荚"
            applicationId "com.channel.wandoujia"
        }

        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu",
                                    appname : "百度",
                                    app_icon   : "@mipmap/ic_launcher1"
            ]
           buildConfigField "String", "ENVIRONMENT", '"百度"'
            buildConfigField "boolean", "isrRank", 'true'
            resValue "string", "appName", "百度"
            applicationId "com.channel.baidu"
        }

        c360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360",
                                    appname : "360",
                                    app_icon   : "@mipmap/ic_launcher2"
           buildConfigField "String", "ENVIRONMENT", '"360"'
            buildConfigField "boolean", "isrRank", 'true'
            resValue "string", "appName", "360"
            ]
            applicationId "com.channel.xxxx"
        }
    }

2.在AndroidManifest.xml中引用你的配置

android:icon="${app_icon}" , app_icon是上面build.gradle中你配置的名称
android:label="${appname}",appname是上面build.gradle中你配置的名称
想在代码中获取渠道信息,1种方式是配置meta-data,如下:




        

        
            
                

                
            
        
    

3.在代码中怎么获取渠道信息

/**
     * 获取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;
    }

4.打包

配置完所有信息之后,接下来的打包方式就和之前的一个吊样了,选择你的签名就行、
Flavors中的就是你多渠道的名称,记得全部选中才行哦!然后点击 Finish 你就可以去吃饭了。


Android----多渠道打包_第2张图片
图片.png
Android----多渠道打包_第3张图片
图片.png
图片.png

未完,待续。。。

你可能感兴趣的:(Android----多渠道打包)