Android使用指令碼多渠道打包
本文對 https://github.com/pengjianbo/MutiChannelPackup
Python指令碼,對指令碼作了擴充套件:
- 支援命令列引數,支援多flavor渠道打包
- 路徑優化,支援配置多個flavor,多個flavor對應相同或不同的渠道
- 簡化呼叫方式
- 支援渠道號與檔案命名不一樣,渠道號有對應的檔名字
- 程式碼在Python3.x下工作(原指令碼2.x)
對不會Python的同學使用更加親和。
早期使用Eclipse開發Android的同學想必對多渠道打包的痛苦還記憶猶新, 好在使用Android Studio後這一切變得簡單起來(雖然還是很慢)。如果僅僅是幾個渠道,使用gradle配置已經非常方便了。
設想這樣一種場景:應用要在各大市場上線(20個起碼),還有特別定製的(對企業個別頁面和資源定製)也要在各大市場上線(20個起碼),這樣30到40個包打出來30分鐘左右(我8G記憶體的PC),給點耐心估計也能忍,如果遇上司機或者發現bug重新打包,還能忍(有摔電腦的衝動)?
本文思路為META-INF渠道識別,你可以接著往下看,或者更詳細請檢視美團team部落格點選檢視
至於為什麼選用Python指令碼,本人試了下,感覺Python最方便,而且作為一個Python愛好者,知道了META-INF渠道識別的原理,需要作的知識檔案操作而已,很修改原指令碼。
META-INF渠道識別機制
我們普通apk打完包解壓後是這樣的結構:
主要在META-INF裡面作文章,在META-INF裡面新增檔案不需要重新簽名,步驟大概這樣:
- 把渠道號以檔名的方式(帶字首方便讀取)通過指令碼寫入到這個資料夾
- 在android程式碼中讀取帶約定字首的檔案的渠道號,設定渠道號
打包完後META-INF資料夾這樣:
10004就是後面要設定的渠道號
使用方式
呼叫
先說呼叫方式,簡單配置後(只需要generator.py,info.conf兩個檔案),AS打出我們要設定渠道的所有Flavor包,命令列呼叫:
python generator.py [flavor] [flavor]..
這裡就在apk_normal資料夾下生成了我的17個渠道包
flavor為可選,不填寫生成預設的,要同時生成多個flavor的渠道包可以這樣:
python generator.py normal dianxin
配置(info.conf)
我的配置:
[Meta]
apk.path = ./aa.apk
dianxin_path = ../app/build/outputs/apk/dianxin_V2.3.1.apk
normal_path = ../app/build/outputs/apk/normal_V2.3.1.apk
channel_prefix = channel-
[dianxin]
google=20001
hiapk=20002
[normal]
hiapk=10001
360cn=10002
我這裡是電信和normal兩個flavor 程式表現有些不一樣,分別打渠道包,我的指令碼在根目錄下建了個資料夾,放在裡面,可以隨便放,修改路徑即可,有問題可以在下方留言。
python程式碼和我的配置 github地址,如果覺得有幫助就給個star吧
以上,祝程式設計愉快 :)
感謝閱讀此文章,如果此文章對你有用或者你有任何疑問和意見,請在下方留言或者在github上fork我,你的鼓勵對我有非凡的意義。