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

一.場(chǎng)景

應(yīng)用需要接入統(tǒng)計(jì)服務(wù),了解應(yīng)用在不同應(yīng)用市場(chǎng)的表現(xiàn)時(shí),分發(fā)到不同應(yīng)用市場(chǎng)的apk需要一個(gè)渠道名區(qū)分不同應(yīng)用市場(chǎng)。這時(shí)就需要打多個(gè)不同的包,每個(gè)包對(duì)應(yīng)一個(gè)渠道名, 即對(duì)應(yīng)一個(gè)應(yīng)用市場(chǎng)。

二.多渠道打包實(shí)踐(以友盟統(tǒng)計(jì)為例)

1.Gradle方式
(1)在AndroidManifest.xml清單文件中設(shè)置友盟統(tǒng)計(jì)的APPKEY和應(yīng)用推廣的渠道名稱。
<!--友盟統(tǒng)計(jì)APPKEY-->
<meta-data android:name="UMENG_APPKEY" android:value="58cba6" />
 <!--應(yīng)用推廣的渠道名稱-->
 <!--${UMENG_CHANNEL_VALUE}的值就是gradle中自定義配置的UMENG_CHANNEL_VALUE的值-->
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/>
(2)在項(xiàng)目Module的build.gradle文件的android標(biāo)簽下添加代碼,配置多個(gè)渠道。
//多渠道配
productFlavors {
   //設(shè)置百度應(yīng)用市場(chǎng)渠道名為baidu
    baidu {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu "]
    }
   //設(shè)置360應(yīng)用市場(chǎng)渠道名為360
    360 {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
    }
    //設(shè)置wandoujia 應(yīng)用市場(chǎng)渠道名為wandoujia 
    wandoujia {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia "]
    }
}
(3)簽名打包,這時(shí)就會(huì)生成對(duì)應(yīng)(2)中配置的三個(gè)渠道的三個(gè)apk文件。
(4)特殊需求:每個(gè)渠道包的圖標(biāo)和應(yīng)用名都不一樣。
a.在AndroidManifest.xml清單文件中設(shè)置包名和圖標(biāo)時(shí)如下
<application
  android:icon="${app_icon}"
  android:label="${app_name}">
b.步驟(2)中修改以下
productFlavors {
    baidu {
        //設(shè)置百度應(yīng)用市場(chǎng)渠道下渠道名為baidu   
        //應(yīng)用名@string/app_name_baidu
        //應(yīng)用名@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清單文件中設(shè)置友盟統(tǒng)計(jì)的APPKEY和應(yīng)用推廣的渠道名稱。
<!--友盟統(tǒng)計(jì)APPKEY-->
<meta-data android:name="UMENG_APPKEY" android:value="58cba6c6e88bad3c540008d3" />
 <!--設(shè)置一個(gè)默認(rèn)的渠道名:service-->
<meta-data android:name="UMENG_CHANNEL" android:value="service"/>
(2)360加固寶的配置信息中進(jìn)行多渠道配置

如上圖添加了三個(gè)渠道
選擇友盟統(tǒng)計(jì)平臺(tái)對(duì)應(yīng)步驟(1)中設(shè)置渠道名中的name:UMENG_CHANNEL
填寫(xiě)渠道編號(hào)對(duì)應(yīng)步驟(1)中設(shè)置渠道名中的value:wandoujia

(3)使用AndroidStudio打包一個(gè)apk,再用360加固寶對(duì)apk加固,這時(shí)就會(huì)產(chǎn)生3個(gè)加固后的apk。(都這里別和我說(shuō)加固寶不會(huì)用)

三.獲取渠道信息

想要驗(yàn)證渠道包的渠道名是不是相對(duì)應(yīng),這就需要獲取渠道信息進(jìn)行驗(yàn)證,代碼如下。

//key為渠道名的key,對(duì)應(yīng)友盟的 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 "";
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容