有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

flutter打包(Flutter 命令行打包)实现方式

前端框架 炮渣日记 4周前 (11-12) 22次浏览 已收录 0个评论 扫描二维码

前言

前面讲了Flutter持续化集成上的演进之路,Flutter的工程为Flutter Model的工程,其中一个很重要的点就是如何在服务器上打包,这个涉及到命令行打包,接下来看如何做。

Android打包

Android的命令行打包比较简单,直接用gradle命令,在工程的目录下运行如下的命令:

  1. 打debug包
$./gradlew assembleDebug
复制代码
  1. 打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
复制代码

可以看到这个脚本有三个功能,分别是:

  1. build
  2. thin
  3. embed

把这个脚本拷贝到工程的目录,运行

  1. 第一步
$/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要支持的平台
复制代码
  1. 第二步
$/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
复制代码
喜欢 (0)
炮渣日记
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址