Productflavors 多渠道打包

多渠道打包。为了方便统计不同市场的用户情况等信息。 需要实现每个市场一个唯一标识来统计信息 。比如友盟统计   
友盟统计具体实现步骤我就不详述了。 可以去看友盟的文档。
我们多渠道打包一般是 Android Stuido 环境下。
1 在application 下配置meta data 
     
  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data
        android:name="CHANNEL_NAME" //获取渠道的标识key 
        android:value="${UMENG_CHANNEL_VALUE}" /> //不同的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>          
2 在gradle 下配置    UMENG_CHANNEL_VALUE   多个渠道 多个名字

      productFlavors {
            xiaomi {}
            baidu {}
            wandoujia {}
        }

        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] //这个标识将productFlavors 中的名字 赋值给 UMENG_CHANNEL_VALUE   也就是 xiaomi{} 会赋值  xiaomi 给UMENG_CHANNEL_VALUE;
        }

3 打包 
可以看到 已经配置的  三个渠道名字 这样答出来的包 直接是有名字区分的。 每个名字对应一个UMENG_CHANNEL_VALUE  这样就 xiaomi baidu 就根据UMENG_CHANNEL_VALUE 的值不同就可以区分开来  不同的渠道

二  多渠道的打包我们知道  改怎么实现了。 那么如果需求定的是根据不同的渠道来展示不同的启动页 图片  比如我想要在小米应用商店下载的app 打开的时候展示 小xx首发 logo 图。 百xx下载的app 打开的是百xx首发的logo图 怎么办 ? 
1 根据不同渠道的UMENG_CHANNEL_VALUE  值 我可以变换 logo 图 。那么如何拿到UMENG_CHANNEL_VALUE 的值。
2
  <meta-data
        android:name="CHANNEL_NAME" //友盟的标识 
        android:value="${UMENG_CHANNEL_VALUE}" /> //不同的value区分不同的值 
这里我们可以 根据CHANNEL_NAME 作为key 来取UMENG_CHANNEL_VALUE  这样判断一下 就可以实现需求 

3 那么如何取到 UMENG_CHANNEL_VALUE  呢
       ApplicationInfo info= null;
        try {
            info=getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
             String msg =info.metaData.getString("ab");
            if("xiaomi".equals(msg)){
            }else if(){
            }...
        } catch (Exception e) {
            e.printStackTrace();

        }
注意我这里用的是getApplicationInfo  网上搜到的获取meta data 数据的,很多都是  ActivityInfo 这是获取在Activty节点中配置的metadata 的 我们这是在Application 节点下配置的
你要是用getActivityInfo 是拿不到东西的。
至此大功告成。

                                                                                                                                           

猜你喜欢

转载自blog.csdn.net/ImTryCatchException/article/details/53304586
今日推荐