美文网首页
Android----多渠道打包

Android----多渠道打包

作者: Answer_厮守 | 来源:发表于2017-12-15 17:48 被阅读0次

    什么是多渠道打包?

    同一个项目针对不同应用平台的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就可以去应用这边变量

    图片.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,如下:

    <meta-data
                android:name="UMENG_CHANNEL"
                android:value="${UMENG_CHANNEL_VALUE}" />
    
    <application
            android:allowBackup="true"
            android:icon="${app_icon}"
            android:label="${appname}"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            <meta-data
                android:name="UMENG_CHANNEL"
                android:value="${UMENG_CHANNEL_VALUE}" />
    
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
    
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    

    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 你就可以去吃饭了。


    图片.png 图片.png 图片.png

    未完,待续。。。

    相关文章

      网友评论

          本文标题:Android----多渠道打包

          本文链接:https://www.haomeiwen.com/subject/yhpdwxtx.html