PythonTool多渠道打包 (PythonTool的使用方法)
Android 多渠道打包的方法其實有很多。你可能用過友盟的多渠道打包 http://bbs.umeng.com/thread-9119-1-1.html。
實現友盟的多渠道打包 詳情看友盟。現在分享一種多渠道打包的簡單方法。
1.第一步,我們使用gradle打包 ,生成Android apk檔案。
命令 window下:release包 : .\gradlew clean assembleRelease -Penv=p -x bundleReleaseJsAndAssets
debug 包 :.\gradlew clean assembleDebug -Penv=p
mac 下
release包 : ./gradlew clean assembleRelease -Penv=p -x bundleReleaseJsAndAssets
debug 包 :./gradlew clean assembleDebug -Penv=p
p 為線上環境標誌
2.把apk拷貝到 PythonTool根目錄
3.mac端開啟終端 進入 PythonTool 目錄下
cd 到PythonTool目錄下,可以拖拽,進入
4.進入到 PythonTool後 執行 ./MultiChannelBuildTool.py 命令 即可
注意:如果執行 ./
window下安裝Python環境後,可以直接執行MultiChannelBuildTool.py 檔案就可以了。
5.開啟 PythonTool 目錄 發現生成一個 out_put 資料夾 就說明成功了
圖片.png
安卓多渠道打包工具。
實現思路講解: [Android批量打包提速 - GavinCT](http://www.cnblogs.com/ct2011/p/4152323.html)
參考:https://github.com/GavinCT/AndroidMultiChannelBuildTool
使用本工具,Android程式設計師僅需將ChannelUtil.java放入到工程裡使用,以後打包的事情就不用自己動手了。
安裝個Python環境,執行一下MultiChannelBuildTool.py,誰都可以打包了!
# 寫在最前面
本工具不支援v2簽名,如有需要,請使用[Meituan-Dianping/walle](https://github.com/Meituan-Dianping/walle)
# 具體使用步驟
將想要批量打包的apk檔案拷貝到PythonTool目錄下(與py同級),執行py指令碼即可打包完成。(生成的渠道apk包在output_** 目錄下)
# 目錄介紹及使用注意
## PythonTool
Python2 與 Python3 都能正常使用
- info目錄下的channel用來存放渠道,多個渠道之間用換行隔開。
注意:
fork後通過Github clone,這個channel檔案在Windows端是正常的,以換行隔開(`\r\n`)。
直接點選右側的download下載zip,可能你在windows端看到的就不是以換行隔開的(`\n`)。
這是Github造成的。但不會影響程式最後的執行效果。
你可以貼上下面的渠道到channel.txt中保持它在windows端的可讀性。
```
samsungapps
hiapk
anzhi
360cn
xiaomi
myapp
91com
gfan
appchina
nduoa
3gcn
mumayi
10086com
wostore
189store
lenovomm
hicloud
meizu
baidu
googleplay
wandou
```
也可以自己來寫入自己需要的市場,並以換行隔開
- MultiChannelBuildTool.py是多渠道打包的指令碼。
## JavaUtil
ChannelUtil.java 用來解析渠道,直接拷貝到Android工程中使用即可。
ChannelUtil中的getChannel方法可以方便的獲取渠道。
# 常見問題答疑
這部分問題是由美團大神<a href="http://weibo.com/coderdd" target="_blank" >丁志虎</a>在微博上答覆的,摘錄如下:
- 這個方案沒法解決不同渠道使用渠道自己SDK的問題,友盟的SDK提供了在程式碼中設定渠道的方式,所以再獲取到渠道號後再呼叫SDK相關設定渠道的方法就可以了
- apk用的是java那一套簽名,放在META-INF資料夾裡的檔案原則上是不參與簽名的。如果Google修改了apk的簽名規則,這一套可能就不適用了。
# 注意
問:同樣一個版本號的2個渠道包,比如先裝了360,那麼SharedPreferences存的就是360了。這時再用xiaomi渠道的去覆蓋安裝,那麼讀出來的渠道號還是360的。不知道博主對這個問題怎麼看,還是去掉sp快取,就保留記憶體和包中讀取?
答:
看你個人的使用場景吧 一般來說 渠道使用無非是統計升級渠道、根據相應渠道變化樣式、上報崩潰資訊攜帶渠道。
- 針對1:統計不怎麼需要特別情況,你說的這種情況我們也考慮過,但一般使用者大多不會這麼折騰,也就QA這麼玩。
- 針對2:使用flavor來解決了。而不是判斷渠道。早期適配魅族手機也是不管渠道,只看是不是魅族手機
- 針對3:這個印象也不大,如果是某渠道包崩潰,少這幾個也不會影響。
綜上,我們選擇不再讀取。
當然,如果你有其他使用場景,考量之後覺得要精確,可以每次讀包,快取到記憶體中。當時我是感覺沒有太大必要,才寫成這樣。