Browse Source
chore(scripts): 添加 Flutter 自动化打包脚本
chore(scripts): 添加 Flutter 自动化打包脚本
- 新增 Android 打包脚本 build_android.sh- 新增 iOS 打包脚本 build_ios.sh - 支持通过 --output 参数指定输出路径- 支持透传额外的 flutter build 参数 - 更新 README 文档说明使用方式ios
3 changed files with 143 additions and 0 deletions
Split View
Diff Options
@ -0,0 +1,70 @@ |
|||
#!/bin/bash |
|||
# usage: |
|||
# ./scripts/build_android.sh --output /absolute/path/to/dir_or_apk [extra flutter build args...] |
|||
|
|||
set -euo pipefail |
|||
|
|||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" |
|||
|
|||
DEFAULT_OUTPUT_DIR="$PROJECT_ROOT/build/android_release" |
|||
DEFAULT_OUTPUT_PATH="$DEFAULT_OUTPUT_DIR/app-release.apk" |
|||
|
|||
OUTPUT_PATH="$DEFAULT_OUTPUT_PATH" |
|||
EXTRA_ARGS=() |
|||
|
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--output=*) |
|||
OUTPUT_PATH="${1#*=}" |
|||
shift |
|||
;; |
|||
--output) |
|||
if [[ $# -lt 2 ]]; then |
|||
echo "参数错误: --output 需要一个路径" >&2 |
|||
exit 1 |
|||
fi |
|||
OUTPUT_PATH="$2" |
|||
shift 2 |
|||
;; |
|||
*) |
|||
EXTRA_ARGS+=("$1") |
|||
shift |
|||
;; |
|||
esac |
|||
done |
|||
|
|||
pushd "$PROJECT_ROOT" >/dev/null |
|||
echo "📦 清理旧构建..." |
|||
flutter clean |
|||
|
|||
echo "📚 获取依赖..." |
|||
flutter pub get |
|||
|
|||
echo "🤖 开始构建 Android APK..." |
|||
flutter build apk --release "${EXTRA_ARGS[@]}" |
|||
popd >/dev/null |
|||
|
|||
ARTIFACT_DIR="$PROJECT_ROOT/build/app/outputs/flutter-apk" |
|||
if [[ ! -d "$ARTIFACT_DIR" ]]; then |
|||
echo "未找到 APK 输出目录:$ARTIFACT_DIR" >&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
BUILT_APK="$(find "$ARTIFACT_DIR" -maxdepth 1 -name '*.apk' -print | head -n 1)" |
|||
if [[ -z "$BUILT_APK" || ! -f "$BUILT_APK" ]]; then |
|||
echo "未找到构建出的 APK 文件" >&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
if [[ "$OUTPUT_PATH" == *.apk ]]; then |
|||
TARGET_PATH="$OUTPUT_PATH" |
|||
mkdir -p "$(dirname "$TARGET_PATH")" |
|||
else |
|||
mkdir -p "$OUTPUT_PATH" |
|||
TARGET_PATH="$OUTPUT_PATH/$(basename "$BUILT_APK")" |
|||
fi |
|||
|
|||
cp "$BUILT_APK" "$TARGET_PATH" |
|||
echo "✅ 构建完成,APK 已保存到:$TARGET_PATH" |
|||
|
|||
@ -0,0 +1,49 @@ |
|||
#!/bin/bash |
|||
# usage: |
|||
# ./scripts/build_ios.sh --output /absolute/path/to/output [extra flutter build args...] |
|||
|
|||
set -euo pipefail |
|||
|
|||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" |
|||
|
|||
DEFAULT_BUILD_DIR="$PROJECT_ROOT/build/ios_release" |
|||
OUTPUT_DIR="$DEFAULT_BUILD_DIR" |
|||
EXTRA_ARGS=() |
|||
|
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--output=*) |
|||
OUTPUT_DIR="${1#*=}" |
|||
shift |
|||
;; |
|||
--output) |
|||
if [[ $# -lt 2 ]]; then |
|||
echo "参数错误: --output 需要一个路径" >&2 |
|||
exit 1 |
|||
fi |
|||
OUTPUT_DIR="$2" |
|||
shift 2 |
|||
;; |
|||
*) |
|||
EXTRA_ARGS+=("$1") |
|||
shift |
|||
;; |
|||
esac |
|||
done |
|||
|
|||
mkdir -p "$OUTPUT_DIR" |
|||
|
|||
pushd "$PROJECT_ROOT" >/dev/null |
|||
echo "📦 清理旧构建..." |
|||
flutter clean |
|||
|
|||
echo "📚 获取依赖..." |
|||
flutter pub get |
|||
|
|||
echo "🚀 开始构建 iOS 安装包..." |
|||
flutter build ios --release --build-dir "$OUTPUT_DIR" "${EXTRA_ARGS[@]}" |
|||
popd >/dev/null |
|||
|
|||
echo "✅ 构建完成,产物目录:$OUTPUT_DIR" |
|||
|
|||
Write
Preview
Loading…
Cancel
Save