Flutter 命令行打包
作者:腾讯 - 小德(koudleren 任晓帅)
前言
Android打包
Android的命令行打包比较简单,直接用gradle命令,在工程的目录下运行如下的命令:
- 打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="" //有三个值:Debug Profile Release
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="" //有三个值:Debug Profile Release
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
生成产物在.../.iOS/Flutter
中查看,如果想修改生成产物的路径,修改脚本里derived_dir
的值,如下:
local derived_dir="${SOURCE_ROOT}/Flutter/Flutter"
if [[ -e "${project_path}/.ios" ]]; then
derived_dir="${project_path}/.ios/Flutter/Flutter"
fi
转载自:https://juejin.cn/post/6844903741104062477