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 是拿不到東西的。
至此大功告成。

                                                                                                                                           
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章