Flutter 命令列打包
前面講了ofollow,noindex">Flutter持續化整合上的演進之路 ,Flutter的工程為Flutter Model的工程,其中一個很重要的點就是如何在伺服器上打包,這個涉及到命令列打包,接下來看如何做。
Android打包
Android的命令列打包比較簡單,直接用gradlew命令,在工程的目錄下執行如下的命令:
- 打debug包
$./gradlew assembleDebug 複製程式碼
- 打Release包
$./gradlew assembleRelease 複製程式碼
生成的aar包就在.android/Flutter/build/outputs/aar/
目錄下
iOS打包
iOS打包比較複雜一些,需要用到一個打包的指令碼,這個指令碼在Flutter SDK裡,路徑為packages/flutter_tools/bin
,有一個叫xcode_backend.sh
的指令碼,首先分析這個指令碼:
if [[ $# == 0 ]]; then # Backwards-compatibility: if no args are provided, build. BuildApp else case $1 in "build") BuildApp ;; "thin") ThinAppFrameworks ;; "embed") EmbedFlutterFrameworks ;; esac fi 複製程式碼
可以看到這個指令碼有三個功能,分別是:
- build
- thin
- embed
把這個指令碼拷貝到工程的目錄,執行
- 第一步
$/bin/sh xcode_backend.sh build 複製程式碼
然後你會發現有報錯,如下:
ERROR: Unknown FLUTTER_BUILD_MODE: . Valid values are 'Debug', 'Profile', or 'Release' (case insensitive). This is controlled by the FLUTTER_BUILD_MODE environment varaible. If that is not set, the CONFIGURATION environment variable is used. 複製程式碼
這是因為少了一些環境變數,要把這些變數加上:
export FLUTTER_BUILD_MODE="" //有三個值:DebugProfileRelease export FLUTTER_ROOT="" //Flutter SDK的目錄 export FLUTTER_APPLICATION_PATH=""//工程目錄 export SOURCE_ROOT="${FLUTTER_APPLICATION_PATH}/.ios/Flutter"//Flutter iOS程式碼的目錄 export FLUTTER_TARGET="lib/main.dart"//dart程式碼 export FLUTTER_BUILD_DIR="build" //build生成的路徑 export ARCHS="armv7 arm64" //Flutter打包的Framework要支援的平臺 複製程式碼
- 第二步
$/bin/sh xcode_backend.sh thin 複製程式碼
同樣也要加上環境變數:
export SOURCE_ROOT=".../.ios/Flutter" //Flutter iOS程式碼的目錄 export ARCHS="armv7 arm64" //Flutter打包的Framework要支援的平臺 export TARGET_BUILD_DIR="${SOURCE_ROOT}" //build生成的路徑 export app_path="${TARGET_BUILD_DIR}/Flutter" //Flutter打包的Framework所在的路徑 export frameworks_dir="${app_path}"//Flutter打包的Framework所在的路徑 複製程式碼
綜上,要加的環境變數如下:
export FLUTTER_BUILD_MODE="" //有三個值:DebugProfileRelease export FLUTTER_ROOT="" //Flutter SDK的目錄 export FLUTTER_APPLICATION_PATH=""//工程目錄 export SOURCE_ROOT="${FLUTTER_APPLICATION_PATH}/.ios/Flutter"//Flutter iOS程式碼的目錄 export FLUTTER_TARGET="lib/main.dart"//dart程式碼 export FLUTTER_BUILD_DIR="build" //build生成的路徑 export ARCHS="armv7 arm64" //Flutter打包的Framework要支援的平臺 export TARGET_BUILD_DIR="${SOURCE_ROOT}" //build生成的路徑 export app_path="${TARGET_BUILD_DIR}/Flutter" //Flutter打包的Framework所在的路徑 export frameworks_dir="${app_path}"//Flutter打包的Framework所在的路徑 複製程式碼
執行的命令如下:
$/bin/sh xcode_backend.sh build $/bin/sh xcode_backend.sh thin 複製程式碼