Android多渠道打包
-
需求:
為了讓APP能更好的向市場中進行推廣,產品希望能將目前的APP拆分成三個,核心業務模組保持一致,APP圖示名稱、登入和啟動頁面等不同。
-
怎樣實現多渠道打包
通過使用gradle 進行多渠道打包,動態更換資源
-
使用gradle進行動態配置
- 通過productFlavors配置打包渠道
app/build.gradle: productFlavors { anzhi { applicationId "com.muitlchannelpack.anzhi.jks" manifestPlaceholders = [ UMENG_APPKEY : UM_ANZHI, UMENG_CHANNEL: ANZHI, ] } wandoujia { applicationId "com.muitlchannelpack.wandoujia" manifestPlaceholders = [ UMENG_APPKEY : UM_HUAWEI, UMENG_CHANNEL: WANDOUJIA, ] } huawei { applicationId "com.muitlchannelpack.huawei" manifestPlaceholders = [ UMENG_APPKEY : UM_WANDOUJIA, UMENG_CHANNEL: HUAWEI, ] } }
AndroidManifest.xml: <!-- 友盟 --> <meta-data android:name="UMENG_APPKEY" android:value="${UMENG_APPKEY}" /> <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL}" />
gradle.properties: ANZHI=anzhi UM_ANZHI=xxxxxxxxxx HUAWEI=huawei UM_HUAWEI=xxxxxxxxxx WANDOUJIA=wandoujia UM_WANDOUJIA=xxxxxxxxxx
這裡添加了三個渠道(安智、豌豆莢和華為),為每個渠道配置了不同的applicatioId
manifestPlaceholders表示 AndroidManifest清單檔案佔位符,通過${name}直接使用
gradle.properties一般用來儲存簽名信息、敏感資訊(賬號、密碼等)及很多類共同使用,這裡儲存的是友盟的key,在build.gradle可以直接使用
這樣就可以生成了對應三個渠道:

選擇打包的渠道.png
-
資原始檔的替換
-
在app/src目錄下面建立productFlavors對應的資料夾
建立資料夾.png
-
在各個資料夾下面建立對應的資原始檔,例如安智版本:
資原始檔.png
app圖示.png
string.xml.png
這樣在選擇不同的包時,系統就會去載入對應資料夾下面的資原始檔(注意:名稱要相同)。修改其他資原始檔也是類似,例如修改登入頁面,只需要在三個資料夾下面建立activity_login.xml佈局,打包之後會去載入對應的佈局檔案
-
配置介面環境
不同buildType的包需要載入不同型別的介面環境,比如release需要載入線上環境,debug包對應uat環境

定義介面引數.png

buildTypes.png
通過def新增對應的引數,在buildTypes裡面通過buildConfigField向BuilfConfig裡面新增欄位,Java程式碼裡可以通過BuildConfig.API_HOST獲取配置的介面環境
-
線上除錯

Build Variant.png
可以通過Build Variant來選擇當前需要編譯的版本,這樣就不需要每次都打包進行測試

當前正在使用的資原始檔.png
可以看到當前正在使用哪個渠道下的資原始檔
-
測試結果
華為和安智是debug包,豌豆莢是release包

測試.gif
程式碼稍後上傳到github,敬請各位斧正,相互探討,相互學習~