1. 程式人生 > >android多渠道打包工具

android多渠道打包工具

在工作中我們經常會遇到這種需求,同一份android原始碼,需要打出來不同配置的包(更改伺服器地址、換渠道配置),有時不同的包需要載入的資源不一樣,更變態的是同一份程式碼打出不同包名的app(已經遇到過做線上教育的,每個年級打出來一個apk,需要換包名、app的名字、icon ....);如果全部手工做要累死人的,後來在github上面發現了一個multiple-apk-generator的開源專案就是解決這個問題的 

這個專案使用shell指令碼寫的,打包依賴gradle,原始碼就400多行,功能卻很強大。實現原理比較巧妙,每個需要打的包被認為是一個target, 為每個target建立一個module並新增到快照目錄,按照配置替換target對應的module裡的內容,然後執行打包,等一會包全出來,輸出在專案根目錄下的zz-targets/out目錄。這個專案關注的是資源替換這塊,打包細節gradle處理(簽名、混淆都可以配置)。下面是這個專案的介紹

multiple-apk-generator簡介

  • 解決android apk的批量打包,支援渠道號替換或者伺服器地址替換(字串替換)、資源替換、指定檔案修改、修改包名
  • 輕量級: 使用shell指令碼編寫,方便開發者修改實現邏輯
  • 基於gradle打包apk

歡迎大家參與進來完善這個專案,如果你在使用過程中碰到問題或者有改進建議可以給我發郵件 [email protected]

使用說明

注: 需要依賴shell環境,mac和linux可以直接使用;如果是windows需要裝模擬linux環境的shell工具(xshell、cygwin)

1. 把multiple-apk-generator.sh複製到gradle的專案根目錄
2. 在專案根目錄下新建zz-targets目錄,儲存apk的配置資訊
3. zz-targets中新建代表一個打包任務的資料夾,名字是(對應的module的名字 + 下劃線 + xxxx)
4. 在第一步新建的目錄下面建立makefile檔案,使用規定的描述語言(參考下面一節)描述輸出apk之前做的一些資源替換操作

描述語言說明

目前支援的外掛有6種

  1. 修改目標app的包名
  2. 修改目標app的名字
  3. 遞迴替換某個資料夾的所有檔案中的某個字串
  4. 替換某個檔案中的某個字串
  5. 替換某個檔案
  6. 替換某個檔案中的指定行內容

以下是samples專案其中一個makefile內容(詳情可以參考samples專案)

#修改目標包名
package com.example.samples2

#修改app的名字
app_name 測試專案

#修改伺服器地址(全域性字串替換)
match_all /src/main/ www.baidu.com www.google.com

#把src/main/目錄下所有檔案中包含的字串testString,替換為testString2(使用這個可以完成渠道號替換或者伺服器地址替換)
match_all src/main/ testString pretestStringsub

#把config.java的中的字串github修改為aagithubbb
match_file src/main/java/com/example/samples/Config.java github aagithubbb

#複製檔案(如果對應的檔案存在就覆蓋掉)
copy_file app_icon.png src/main/res/drawable-hdpi/ic_launcher.png

#把src/main/assets/test.txt檔案的第5行內容替換成replace-line5ffgdg
replace_line src/main/assets/test.txt 5 replace-line5ffgdg

注意事項

  1. 最終輸出的apk,在zz-targets/out目錄下
  2. 在描述檔案中以#開頭的是註釋,會被忽略掉
  3. 描述語言以行為單位 ,按空格分隔,第一個單詞為動作,後面的依次為${1} ${2} ${3} ......
  4. target目錄名字以module的名字加下劃線開頭,再加上數字或字母(例如: app_1)
  5. 描述檔案(makefile)引數中不能出現空格