Flutter?Shell自動化打包解放雙手
正文
經(jīng)過一段時間的學習和項目實踐,你會發(fā)現(xiàn),
打包->上傳蒲公英->生成二維碼
是一個枯燥且乏味的事情,只要打包配置項,配置完成,剩下的基本上就是無聊的等待,和機械的步驟.
之前在寫iOS項目的時候,一直都是使用fastlane,和xcodebuild,進行腳本打包的.
只是那個時候,只是會簡單的打包,并沒有深究上傳.
最近花時間把flutter自動化打包也給加上了.
腳本運行視頻

打包流程圖
在開始編寫打包工具前,我們需要先把打包流程自己畫一畫,可以讓我們在腦子里,先過一下整體流程,哪些需要準備,哪些需要單獨處理.這里我把我從第一次寫流程圖,到最終流程圖確定的過程也分享給大家.也算是一種記錄吧.
第一版

第二版

第三版

相對來說,經(jīng)過這三版的改進,也算是把整體流程捋順了,從一開始不能自定義參數(shù),到可以自定義參數(shù),從只會打包出apk和ipa.到可以上傳到蒲公英,上傳到iOS商店.也算是基本完成了我的需求,所以下一步,就是按照我們畫的流程圖,進行代碼的編
腳本目錄講解
├── shell_pack │ ├── ExportOptions.plist(導出iOS商店包需要的plist) │ ├── ExportOptions_dev.plist(導出iOS測試包) │ ├── ExportOptions_hoc.plist(導出hoc包) │ ├── pack.sh(入口) │ ├── pack_apk.sh(apk打包模塊) │ ├── pack_clear_create_tool.sh(清緩存和構(gòu)建文件模塊) │ ├── pack_config.sh(全局配置項) │ ├── pack_ipa.sh(ipa打包模塊) │ ├── pack_tool.sh(工具模塊) │ └── pgyer_upload.sh(蒲公英模塊)
這就是根據(jù)我們畫的流程圖,我這邊設(shè)計的代碼實現(xiàn)分布,之前也看過其他人寫的shell腳本,一般都是把所有的代碼寫到一塊,可能我這邊一看到這么多代碼,就會有抗拒心里,所以,根據(jù)我的開發(fā)習慣,我會把主流程放在入口模塊,具體的業(yè)務(wù)實現(xiàn),會下發(fā)到各個功能模塊里,這樣的話也方便各個模塊的獨自聯(lián)調(diào)測試.??,我來簡單介紹一下對應(yīng)模塊的功能.
pack.sh(入口)
# shellcheck disable=SC1091
# shellcheck disable=SC2154
source ./pack_tool.sh
source ./pack_ipa.sh
source ./pack_apk.sh
source ./pack_config.sh
source ./pack_clear_create_tool.sh
# 為了可以執(zhí)行 sh 文件所有的函數(shù)
chmod a+x pack_clear_create_tool.sh pack_tool.sh
echomsg "STAR"
echomsg "開始配置參數(shù)"
param_count=$#
if [ $param_count == 0 ]; then
normalTip
else
for i in "$@"; do
if [[ $i == "-h" ]]; then
echoHelp
exit
else
funWithParam "$i"
fi
done
fi
configbuildType
echomsg "參數(shù)配置完成"
# 最終打包配置結(jié)果顯示
echoTip
# 清楚緩存
cleanFun
# 構(gòu)建文件
createLib
# 打包上傳
if [ "$pack_os" == 0 ]; then
buidApk
buidIos
elif [ "$pack_os" == 1 ]; then
buidApk
else
buidIos
fi
echomsg "END"
從代碼中,我把入口模塊劃分成4個小模塊
1. 配置參數(shù)
2. 清理緩存
3. 構(gòu)建文件
4. 打包上傳
這也符合我們梳理的流程圖.這里我打算把具體的代碼實現(xiàn)分為三部分進行講解.
第一部分
- 參數(shù)配置
- 清理緩存
- 構(gòu)建版本
第二部分
- 安卓項目配置項
- 安卓打包
- 上傳蒲公英
第三部分
- iOS項目配置項
- iOS打包
- 上傳蒲公英
- 上傳商店
??分類,我會在以后的文章里進行詳細講解.??我繼續(xù)講解一下
- pack_config.sh(全局配置項)
- 腳本使用
pack_config.sh(全局配置項)
# ======================== 命令參數(shù) ======================== #
# 打包系統(tǒng) 0 全部 1 apk 2 ipa
pack_os=0
# 上傳類型 1 商店 2 蒲公英
upload_type=1
# 打包環(huán)境 1 Releas 2 Deubg
project_build_type=1
# 編譯環(huán)境
build_type="release"
# 是否清理緩存 1 清理 0不清理
project_is_clear=1
# 0 全部市場 具體 123 是你自己修改apk_channels 對應(yīng)的渠道
pack_apk_channel=0
# ======================== 工程配置項 ======================== #
# 工程相對路徑
project_path=$(dirname $(pwd))
# ======================== Android ======================== #
# Flutter android release 打包生成的路徑
flutter_release_apk_path=$project_path/build/app/outputs/apk/release/
# Flutter android debug 打包生成的路徑
flutter_debug_apk_path=$project_path/build/app/outputs/apk/debug/
# 安卓打包根文件
export_android_path=$project_path/export/apk
# apk 最終Release存放的地方
export_apk_release_path=$export_android_path/release/
# apk 最終Debug存放的地方
export_apk_debug_path=$export_android_path/debug/
# 安卓渠道HUAWEI VIVO YYB
apk_channels=(HUAWEI)
# 安卓渠道 個數(shù)
apk_chanhels_length=0
# ======================== IOS ======================== #
# 工程名字
project_name=Runner
# scheme 名字
project_scheme=$project_name
# xcworkspace路徑
project_workspace_path=$project_path/ios/$project_name.xcworkspace
# xcarchive 名字
xcarchive_name=${project_name}.xcarchive
# ipa 名字
ipa_name=$project_name
# ios 團隊ID
ios_teamID=""
# 商店賬號
xcrun_u=""
# 賬號專屬密碼
xcrun_p=""
# 導出iOS文件路徑
export_ios_path=$project_path/export/ios
# 導出 xcarchive路徑
export_xcarchive_path=$export_ios_path/xcarchive/
# 導出ipa存放文件路徑
export_ipa_path=$export_ios_path/ipa/
# ExportOptions.plist app-store路徑
export_options_plist_store=$project_path/shell_pack/ExportOptions.plist
# ExportOptions.plist app-hoc路徑
export_options_plist_hoc=$project_path/shell_pack/ExportOptions_hoc.plist
# ExportOptions.plist app-dev路徑
export_options_plist_dev=$project_path/shell_pack/ExportOptions_dev.plist
# 最后選擇的環(huán)境
export_options_plist=$export_options_plist_store
# ======================== 蒲公英配置信息 ======================== #
# 蒲公英api_key
api_key=""
# 蒲公英iOS二維碼地址
pgyer_ios_code_url=""
# 蒲公英安卓二維碼地址
pgyer_android_code_url=""
從上面的代碼里,我這邊主要分了5個模塊
命令參數(shù)配置
| 如果你想修改默認的配置參數(shù),你可以修改這個模塊 |
|---|
| 比如修改默認的上傳環(huán)境為 |
| upload_type=2 |
| 這樣默認上傳的就是蒲公英了,當然我們也可以通過shell參數(shù)進行修改上傳環(huán)境 |
項目路徑配置
默認的打包工具shell_pack存放路徑如下所示

如圖所示,shell_pack文件,默認是放在項目根目錄下,如果你想把shell_pack放到其他地方,請修改獲取項目路徑配置參數(shù)project_path=$(dirname $(pwd))(修改成項目的路徑,默認打包工具放在項目根目錄下)
安卓打包配置
| 安卓需要修改的配置項就是安卓渠道,這個可以根據(jù)你們項目需求進行修改, |
|---|
| apk_channels=(HUAWEI VIVO YYB) |
iOS打包配置
| 這里我只實現(xiàn)了一種上傳商店的方式,就是配置商店賬號和專屬秘密的形式,進行商店上傳的.所以這里需要修改的配置就是 |
|---|
| xcrun_u="" xcrun_p="" |
- 蒲公英配置
- 只需要修改api_key即可
腳本使用
把shell_pack打包工具文件,放到你項目的根目錄下.如下所示

- 在終端進入到shell_pack目錄下
- xx@xxx shelltest %cd shell_pack
- 在終端輸入執(zhí)行命令,如果你不需要修改默認配置執(zhí)行即可
- sh pack.sh 如果你需要修改默認配置項,并且你不知道默認配置項是啥的時候,你只需要輸入
- sh pack.sh -h

就會顯示默認的配置參數(shù)以及參數(shù)說明
修改完成后,執(zhí)行對應(yīng)的命令即可,比如我這邊修改了u:2,把默認上傳到商店,修改成了上傳到蒲公英 執(zhí)行命令如下
sh pack.sh -u:2
至此,自動化打包就已完成,你可以快樂的解放雙手.做你想做的事情了. 喜歡看源碼的
項目地址
以上就是Flutter Shell自動化打包解放雙手的詳細內(nèi)容,更多關(guān)于Flutter Shell自動化打包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談Android AsyncTask內(nèi)存安全的一種使用方式
這篇文章主要介紹了淺談Android AsyncTask內(nèi)存安全的一種使用方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
Android 自定義加載動畫Dialog彈窗效果的示例代碼
這篇文章主要介紹了Android 自定義加載動畫Dialog彈窗效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Android開發(fā)實現(xiàn)按鈕點擊切換背景并修改文字顏色的方法
這篇文章主要介紹了Android開發(fā)實現(xiàn)按鈕點擊切換背景并修改文字顏色的方法,涉及Android界面布局與相關(guān)屬性設(shè)置技巧,需要的朋友可以參考下2018-01-01
創(chuàng)建Android庫的方法及Android .aar文件用法小結(jié)
本文給大家介紹了創(chuàng)建Android庫的方法及Android中 .aar文件生成方法與用法詳解,涉及到創(chuàng)建庫模塊操作步驟及開發(fā)注意事項,需要的朋友參考下吧2017-12-12

