Flutter 命令行打包

做者:騰訊 - 小德(koudleren 任曉帥)android

前言

前面講了Flutter持續化集成上的演進之路,Flutter的工程爲Flutter Model的工程,其中一個很重要的點就是如何在服務器上打包,這個涉及到命令行打包,接下來看如何作。ios

Android打包

Android的命令行打包比較簡單,直接用gradle命令,在工程的目錄下運行以下的命令:xcode

  1. 打debug包
$./gradlew assembleDebug
複製代碼
  1. 打Release包
$./gradlew assembleRelease
複製代碼

生成的aar包就在.android/Flutter/build/outputs/aar/目錄下bash

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
複製代碼

能夠看到這個腳本有三個功能,分別是:app

  1. build
  2. thin
  3. embed

把這個腳本拷貝到工程的目錄,運行ide

  1. 第一步
$/bin/sh xcode_backend.sh build
複製代碼

而後你會發現有報錯,以下:post

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.
複製代碼

這是由於少了一些環境變量,要把這些變量加上:gradle

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
複製代碼

一樣也要加上環境變量:ui

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
複製代碼
相關文章
相關標籤/搜索