轉(zhuǎn)載請(qǐng)標(biāo)明原文地址:http://www.reibang.com/p/b547d889c6c8
一個(gè)奇葩的需求咨演,用戶希望可以由客戶來(lái)自定義 app 的應(yīng)用名伤溉、圖標(biāo)避矢,由于這些資源是不確定的寡润,所以沒有辦法事先通過(guò)打包多個(gè) flavor 來(lái)滿足需求祖驱。需要在用戶需要的時(shí)候停士,動(dòng)態(tài)的完成打包工作挖帘。
思考
在接到這個(gè)需求的時(shí)候,我想到了兩個(gè)可能實(shí)現(xiàn)的方案:
使用 gradle恋技,將項(xiàng)目源文件放在服務(wù)器上拇舀,當(dāng)需要打包時(shí),替換對(duì)應(yīng)的資源文件蜻底,然后調(diào)用 gradle 指令骄崩,完成打包任務(wù)(思路來(lái)自 Jenkins,其實(shí)質(zhì)好像就是通過(guò)調(diào)用gradle來(lái)進(jìn)行打包)薄辅。
服務(wù)器上放置 apk 文件要拂,在需要的時(shí)候,解包 apk站楚,替換資源文件脱惰,然后重新打包簽名。(思路來(lái)自鴻洋反編譯的博文)窿春。
其中方法一需要重新編譯打包拉一,無(wú)疑是一個(gè)極其費(fèi)時(shí)的方法,故考慮采用方法二谁尸。
工具:
apktool:https://ibotpeaches.github.io/Apktool/
jarsigner:安裝 JDK 后在 bin 文件夾下有這個(gè)工具
步驟
下載 apktool.bat 與 apktool.jar 文件舅踪,放在同一目錄下,并將該目錄添加到環(huán)境變量(Windows系統(tǒng))
-
通過(guò) AS 打包生成 apk 文件良蛮,并放置到上述目錄中
放置在同一目錄 -
cmd 運(yùn)行指令
apktool d app.apk
抽碌,將 apk 文件解包(默認(rèn)解包到當(dāng)前目錄下的同名文件夾下)
Paste_Image.png -
修改資源文件
修改圖標(biāo)文件
修改應(yīng)用名 -
cmd 運(yùn)行指令
apktool b app -o other.apk
(app 指需要打包的文件夾,-o other.apk 表示生產(chǎn)新文件),重新打包 apk
重新打包 apk 將 keystore 文件放到該目錄货徙,簽名 apk 文件
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore key.keystore -storepass yourpass other.apk alias
//注意這里是一行指令
-keystore key.keystore
:用于指定 keystore 的位置
-storepass yourpass
:用于指定 keystore 的密碼
other.apk
:表示要簽名的文件
alias
:表示 keystore 文件的別名
更多詳細(xì)指令請(qǐng)參考:jarsigner命令詳解
完成上述的6個(gè)步驟左权,就完成了在不重新編譯的情況下,對(duì)工程進(jìn)行一定的個(gè)性化定制痴颊。
TODO
將上述功能使用 Python 腳本來(lái)完成赏迟。