1. 程式人生 > >PythonTool多渠道打包 (PythonTool的使用方法)

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 命令 即可
注意:如果執行 ./

MultiChannelBuildTool.py 命令出現錯誤時 檢視你是否安裝Python (mac使用者可在執行命令時根據提示安裝,win 需要自行下載Python 安裝,下載連結呈上:https://www.python.org/getit/ 並配置環境變數);

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:這個印象也不大,如果是某渠道包崩潰,少這幾個也不會影響。

 

綜上,我們選擇不再讀取。

當然,如果你有其他使用場景,考量之後覺得要精確,可以每次讀包,快取到記憶體中。當時我是感覺沒有太大必要,才寫成這樣。