android多渠道打包工具
阿新 • • 發佈:2019-01-07
在工作中我們經常會遇到這種需求,同一份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種
- 修改目標app的包名
- 修改目標app的名字
- 遞迴替換某個資料夾的所有檔案中的某個字串
- 替換某個檔案中的某個字串
- 替換某個檔案
- 替換某個檔案中的指定行內容
以下是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
注意事項
- 最終輸出的apk,在zz-targets/out目錄下
- 在描述檔案中以#開頭的是註釋,會被忽略掉
- 描述語言以行為單位 ,按空格分隔,第一個單詞為動作,後面的依次為${1} ${2} ${3} ......
- target目錄名字以module的名字加下劃線開頭,再加上數字或字母(例如: app_1)
- 描述檔案(makefile)引數中不能出現空格