android多渠道打包

基本思路:在AndroidManifest.xml文件中設(shè)置一個(gè)placeholder,打包的時(shí)候動(dòng)態(tài)替換該placeholder。

  1. 通過如下方式在AndroidManifest.xml文件中設(shè)置一個(gè)placeholder(這里placeholder名為“APP_CHANNEL_VALUE”):
AndroidManifest.xml:

<meta-data
    android:name="APP_CHANNEL"
    android:value="${APP_CHANNEL_VALUE}" />
  1. 在build.gradle文件中動(dòng)態(tài)替換placeholder:
huild.gradle:
android{
    ...
    productFlavors {
        yingyongbao {}
        xiaomi {}
        huawei {}
        ...
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name]
    }
}

經(jīng)過上述兩步操作,執(zhí)行打包命令gradlew assembleRelease,就能獲得不同渠道的安裝包了。

注意

有時(shí),我們?cè)贏ndroidManifest.xml文件當(dāng)中配置了多個(gè)placeholder,比如我們?cè)谏鲜鯝ndroidManifest.xml中再添加一個(gè)placeholder,名字為APP_KEY_VALUE:

AndroidManifest.xml:

<meta-data
    android:name="APP_CHANNEL"
    android:value="${APP_CHANNEL_VALUE}" />
<meta-data
    android:name="APP_KEY"
    android:value="${APP_KEY_VALUE}" />

這時(shí)會(huì)報(bào)這樣的問題:

Error:(74, 13) Attribute meta-data#APP_KEY@value at AndroidManifest.xml:74:13 requires a placeholder substitution but no value for <APP_KEY> is provided.

問題的原因是沒有為APP_KEY_VALUE提供值。下面我們嘗試修改:

huild.gradle:
android{
    defaultConfig {
        manifestPlaceholders = [APP_KEY_VALUE : "appkey"]
    }
    ...
    productFlavors {
        yingyongbao {}
        xiaomi {}
        huawei {}
        ...
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name]
    }
}

這樣修改之后問題依然存在。我們看一下這個(gè)問題的原因:

manifestPlaceholders是一個(gè)變量,我們?cè)赿efaultConfig當(dāng)中賦值,又在productFlavor.all中賦值,前面的賦值就被覆蓋掉了。
進(jìn)一步講,manifestPlaceholders是一個(gè)數(shù)組變量,賦值的時(shí)候我們應(yīng)該把所有placeholder組成一個(gè)數(shù)組賦值給manifestPlaceholders。

正確的做法:

huild.gradle:
android{
    ...
    productFlavors {
        yingyongbao {}
        xiaomi {}
        huawei {}
        ...
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name,
                                                  APP_KEY_VALUE:"appkey"]
    }
}

進(jìn)階->配置文件外移

在根目錄下創(chuàng)建local.properties文件,并添加如下內(nèi)容:

local.properties

sdk.dir = /android/sdk/dir
appkey:"realAppkey"

在build.gradle文件中引用:

huild.gradle:

apply plugin: 'com.android.application'

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

android{
    ...
    productFlavors {
        yingyongbao {}
        xiaomi {}
        huawei {}
        ...
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name,
                                                  APP_KEY_VALUE:properties.getProperty("appkey")]
    }
}
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 目錄一、Python打包及優(yōu)化(美團(tuán)多渠道打包)二、Gradle打包三、其他打包方案:修改Zip文件的commen...
    守望君閱讀 5,931評(píng)論 4 17
  • 一、什么是多渠道 我理解的是:APP發(fā)布到不同的應(yīng)用平臺(tái),監(jiān)測(cè)用戶是從哪個(gè)平臺(tái)安裝的。 二、為什么要多渠道打包 1...
    LucasAdam閱讀 1,038評(píng)論 0 1
  • android多渠道打包 1.如何查看apk的簽名信息 1將apk解壓; 2.找到META-INF 下的.RSA文...
    ping0505閱讀 1,130評(píng)論 0 1
  • title: Android 軟件打包date: 2016-04-09 12:18:12tags: 軟件打包c(diǎn)at...
    Passon_Fang閱讀 1,359評(píng)論 0 4
  • 按照渠道識(shí)別型分類: META-INF渠道識(shí)別型:網(wǎng)頁版、Python版、BAT腳本、Jar版、Manifest渠...
    比薩u閱讀 2,066評(píng)論 9 18

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