創造 | 一個強大的 Android 自動化打包指令碼

語言: CN / TW / HK

該指令碼是我在獨立開發過程中,為了提升 Android 應用打包和運營的效率而開發的指令碼。專案地址是,

http://github.com/Shouheng88/autopackage

如專案中的語言構成展示的,該指令碼完全使用 Python 語言開發完成。

1、使用方式

使用起來非常簡單,首先你要準備如下的環境,

  • 準備 Python 語言環境: Python3
  • 新增 pyymal 庫: pip install pyyaml
  • 新增 requests 庫: pip install requests
  • 新增 requests_toolbelt 庫: pip install requests_toolbelt

然後,通過編輯配置檔案 config.yml 對指令碼進行配置。比如,

```yml build: gradlew: ../ file: ../app/build.gradle ndk: abi_64: ndk {abiFilters 'arm64-v8a', 'x86_64'} abi_32: ndk {abiFilters 'armeabi-v7a', 'x86'} apk_output_dir: ../app/build/outputs/apk/prod/release # The mapping file location. mapping_path: ../app/mapping.txt dest: apk_dir: D:/codes/other/LeafNote-resources/apks community: languages_dir: D:/codes/other/LeafNote-Community/languages/app jiagu: exec_path: D:\360jiagubao_windows_64\jiagu\jiagu.jar account: xxxx

...

```

YAML 格式也不算新穎,早在幾年之前的 SpringBoot 裡面就已經採用了這種格式。相比於使用 json 或者 properties 等格式的配置檔案,它更加簡潔。

2、主要功能

1、使用 gradle 指令自動打包,區分 32 位和 64 位:因為現在有些應用市場明確要求區分 32 位和 64 位,所以,打包的時候要分開進行打包。

2、打包完成之後將 APK 拷貝到指定的目錄:主要用來做本地的 APK 檔案備份,後面也會用這裡拷貝的 APK 檔案進行自動化加固。

3、使用 diffuse 輸出相對於上一個版本的 APK 版本差異報告:diffuse 是 JakeWharton 開發的 APK, AAB, AAR 和 JAR 的對比工具。這裡我用它對比當前版本和上一個版本的 APK 的資訊,以實現對 APK 質量的監控。diffuse 專案的地址是 http://github.com/JakeWharton/diffuse

3、拷貝多語言資源到指定的目錄,並自動提交到 Github 倉庫以便於協助翻譯:對做國際化的應用的開發者而言,我們可以通過應用內的協助翻譯功能借助社群的力量實現應用的多語言。這裡我儘量將這個過程做得更加自動化。即在應用打包完成之後將應用內的多語言資源按照版本資訊拷貝到指定的目錄下。然後使用 Git 工具將其推送到 Github 等。具體的效果可以參考 http://github.com/Shouheng88/LeafNote-Community.

4、自動打 tag 並提交到遠端倉庫:該功能用來在打包完成之後使用為當前版本新增 Git tag,以便於後續根據版本回滾到指定的 Git 提交記錄。

5、根據 Git 提交記錄自動生成更新日誌:上面做了為專案自動新增 Git tag 的功能之後,我們可以根據當前版本到上一版本之間的 Git 提交記錄的 comment 資訊自動生成版本更新日誌。雖然,這個這樣生成的更新日誌並不能直接用作釋出時的更新記錄,但在至少可以讓我們直觀得看到這個版本修改了什麼。

6、使用 360 加固 對上述 APK 進行加固並輸出到指定的目錄:加固操作其實非常簡單,只需要一個 command 指令就可以完成了,

python os.system("java -jar %s -login %s %s\ && java -jar %s -jiagu %s %s -autosign -automulpkg"\ % (config.jiagu_exec_path, config.jiagu_account, config.jiagu_password\ , config.jiagu_exec_path, apk, out))

不過在使用上述命令之前需要先通過 GUI 的形式修改你在 360 加固中的渠道和簽名信息(直接手動改檔案也可以)。

7、上傳打包 APK 到藍奏雲:藍奏雲是現在很多開發者用來分享軟體的一個雲端儲存平臺,100M 以下的檔案可以免費儲存,類似於百度雲。上傳藍奏雲之前需要先修改配置檔案,

yml lanzou: ylogin: xxxx phpdisk_info: xxxx

這裡需要填入的 yloginphpdisk_info 可以在登入之後通過 Chrome 的開發工具檢視 cookie 資訊得到。目前能夠做到自動化的一個方案就是使用上述兩個資訊。

8、通過 Telegram bot 將打包完成的渠道包和更新日誌資訊傳送到 Telegram 群組:對海外的使用者我們可以通過 Telegram 作為一個交流的渠道。Telegram 是一個非常好用的聊天軟體。它提供了 bot 功能,即一個可以推送訊息的機器人。我們可以通過這個功能來在群組中推送訊息、圖片和檔案。Telegram 的 bot 有非常強大的自定義性。其實我們完全可以基於爬蟲和 bot 維護一個社群,然後通過在社群內推送廣告來獲得一些利益。這也不失為一個賺錢的渠道。使用 Telegram bot 之前需要在配置檔案中填入如下資訊,

yml telegram: chat_id: xxxx token: xxxx

這裡的 token 是註冊 bot 的時候得到的資訊。chat_id 可以通過如下方式獲取到:

  1. 首先把 Bot 新增到要推送的群組。然後在該群組裡傳送一條資訊。
  2. 然後使用連結獲取到,

http://api.telegram.org/bot<YourBOTToken>/getUpdates

即將 token 資訊填入到上述 <YourBOTToken> 處。在返回的 json 結果中可以獲取到 chat id 資訊。

向群組推送資訊的方式非常簡單,一個 http 請求即可完成,

python url = TG_SEND_DOCUMENT_URL % (config.tg_token) files = { 'document': (name, open(path, 'rb')) } ret = requests.post(url, data={ 'chat_id': config.tg_chat_id, 'caption': msg }, files=files)

更多的協議可以參考這個文件:http://core.telegram.org/bots/api#senddocument

9、完成上述操作之後使用郵件通知打包結果:最後就是在完成了最終的打包操作之後通過 Email 傳送一封郵件,內部包含了本次打包的 diff 資訊等給指定的使用者。使用郵件功能需要在配置檔案中填寫,

yml mail: receivers: - xxxx user: xxxx password: xxxx

這裡我們使用的是 QQ 郵箱來發送郵件。這裡需要填寫的 userpassword 欄位分別是郵箱和開通 smtp 服務時系統提供的密碼資訊。QQ 郵箱開通 SMTP 伺服器其 官方文件 即可。

總結

上述是該打包指令碼的主要功能。後續我會新增更多功能。因為時間有限,有些功能需要修改一下才能使用。不過,許多功能我都封裝成了獨立的 Python 指令碼,如果需要的話可以自己做細微的修改。對於這個指令碼,如果你有更好的建議和想法,可以跟我交流~