feat: install_app.sh 脚本支持打包安装 macOS 桌面版
This commit is contained in:
+158
-22
@@ -1,35 +1,171 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# 进入项目根目录
|
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
echo "📱 检查连接的 Android 设备..."
|
BUILD_MODE="debug"
|
||||||
DEVICE_COUNT=$(adb devices | grep -v "List of devices" | grep "device$" | wc -l | tr -d ' ')
|
TARGET=""
|
||||||
|
|
||||||
if [ "$DEVICE_COUNT" -eq 0 ]; then
|
for arg in "$@"; do
|
||||||
echo "❌ 未检测到连接的 Android 设备,请确保手机已开启 USB 调试并通过数据线连接!"
|
case "$arg" in
|
||||||
exit 1
|
android|apk)
|
||||||
|
TARGET="android"
|
||||||
|
;;
|
||||||
|
mac|macos|desktop)
|
||||||
|
TARGET="mac"
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
TARGET="all"
|
||||||
|
;;
|
||||||
|
--release|-r)
|
||||||
|
BUILD_MODE="release"
|
||||||
|
;;
|
||||||
|
--debug|-d)
|
||||||
|
BUILD_MODE="debug"
|
||||||
|
;;
|
||||||
|
--help|-h)
|
||||||
|
echo "用法: ./install_app.sh [目标] [选项]"
|
||||||
|
echo ""
|
||||||
|
echo "目标 (可选):"
|
||||||
|
echo " android 打包并安装到连接的 Android 真机"
|
||||||
|
echo " mac 打包并安装到 macOS (/Applications) 并启动"
|
||||||
|
echo " all 同时打包 Android 和 macOS 版本"
|
||||||
|
echo ""
|
||||||
|
echo "选项 (可选):"
|
||||||
|
echo " --debug 编译 Debug 版本 (默认,构建更快)"
|
||||||
|
echo " --release 编译 Release 版本 (体积更小,性能更好)"
|
||||||
|
echo " -h, --help 显示帮助信息"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# 如果未指定目标且处于交互终端,提示用户选择
|
||||||
|
if [ -z "$TARGET" ]; then
|
||||||
|
if [ -t 0 ]; then
|
||||||
|
echo "========================================="
|
||||||
|
echo " 🌱 芽说英语 (Kouyu English) 打包安装工具"
|
||||||
|
echo "========================================="
|
||||||
|
echo "请选择要打包安装的目标平台:"
|
||||||
|
echo " 1) Android 真机 (自动检测设备并安装)"
|
||||||
|
echo " 2) macOS 桌面版 (打包并安装到 /Applications 并启动)"
|
||||||
|
echo " 3) 全部 (Android + macOS)"
|
||||||
|
read -p "请输入序号 [1/2/3] (默认 1): " choice
|
||||||
|
case "$choice" in
|
||||||
|
2)
|
||||||
|
TARGET="mac"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
TARGET="all"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
TARGET="android"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
# 非交互模式下,优先检测 Android 设备
|
||||||
|
if adb devices 2>/dev/null | grep -v "List of devices" | grep -q "device$"; then
|
||||||
|
TARGET="android"
|
||||||
|
else
|
||||||
|
TARGET="mac"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "📦 正在编译 Debug APK (包含最新的 assets 配置)..."
|
install_android() {
|
||||||
flutter build apk --debug
|
echo ""
|
||||||
|
echo "📱 ================= Android 打包与安装 ================="
|
||||||
|
echo "🔍 检查连接的 Android 设备..."
|
||||||
|
DEVICE_COUNT=$(adb devices 2>/dev/null | grep -v "List of devices" | grep "device$" | wc -l | tr -d ' ')
|
||||||
|
|
||||||
APK_PATH="build/app/outputs/flutter-apk/app-debug.apk"
|
if [ "$DEVICE_COUNT" -eq 0 ]; then
|
||||||
|
echo "❌ 未检测到连接的 Android 设备,请确保手机已开启 USB 调试并通过数据线连接!"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -f "$APK_PATH" ]; then
|
echo "📦 正在编译 Android ${BUILD_MODE} APK (包含最新的 assets 配置)..."
|
||||||
echo "❌ 找不到编译输出的 APK: $APK_PATH"
|
if [ "$BUILD_MODE" = "release" ]; then
|
||||||
exit 1
|
flutter build apk --release
|
||||||
fi
|
APK_PATH="build/app/outputs/flutter-apk/app-release.apk"
|
||||||
|
else
|
||||||
|
flutter build apk --debug
|
||||||
|
APK_PATH="build/app/outputs/flutter-apk/app-debug.apk"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "🚀 正在安装 APK 到手机..."
|
if [ ! -f "$APK_PATH" ]; then
|
||||||
if ! adb install -r "$APK_PATH"; then
|
echo "❌ 找不到编译输出的 APK: $APK_PATH"
|
||||||
echo "⚠️ 覆盖安装失败(签名不一致或版本冲突),正在卸载旧版本并重新安装..."
|
return 1
|
||||||
adb uninstall com.shen.kouyu_english || true
|
fi
|
||||||
adb install -r "$APK_PATH"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "▶️ 正在手机上启动 开口英语 App..."
|
echo "🚀 正在安装 APK 到手机..."
|
||||||
adb shell monkey -p com.shen.kouyu_english -c android.intent.category.LAUNCHER 1 > /dev/null 2>&1 || true
|
if ! adb install -r "$APK_PATH"; then
|
||||||
|
echo "⚠️ 覆盖安装失败(签名不一致或版本冲突),正在卸载旧版本并重新安装..."
|
||||||
|
adb uninstall com.shen.kouyu_english || true
|
||||||
|
adb install -r "$APK_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "✅ 安装并启动成功!"
|
echo "▶️ 正在手机上启动 芽说英语 App..."
|
||||||
|
adb shell monkey -p com.shen.kouyu_english -c android.intent.category.LAUNCHER 1 > /dev/null 2>&1 || true
|
||||||
|
echo "✅ Android 版本安装并启动成功!"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_mac() {
|
||||||
|
echo ""
|
||||||
|
echo "🖥️ ================= macOS 打包与安装 ================="
|
||||||
|
echo "📦 正在编译 macOS ${BUILD_MODE} 应用..."
|
||||||
|
if [ "$BUILD_MODE" = "release" ]; then
|
||||||
|
flutter build macos --release
|
||||||
|
APP_SRC="build/macos/Build/Products/Release/kouyu_english.app"
|
||||||
|
else
|
||||||
|
flutter build macos --debug
|
||||||
|
APP_SRC="build/macos/Build/Products/Debug/kouyu_english.app"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$APP_SRC" ]; then
|
||||||
|
echo "❌ 找不到编译输出的 macOS App: $APP_SRC"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_NAME="芽说英语.app"
|
||||||
|
DEST_DIR="/Applications"
|
||||||
|
DEST_APP="$DEST_DIR/$APP_NAME"
|
||||||
|
|
||||||
|
echo "📂 正在安装到 $DEST_APP..."
|
||||||
|
# 检查是否有权限写入 /Applications,如果无权限则回退至 ~/Applications
|
||||||
|
if [ ! -w "$DEST_DIR" ]; then
|
||||||
|
DEST_DIR="$HOME/Applications"
|
||||||
|
mkdir -p "$DEST_DIR"
|
||||||
|
DEST_APP="$DEST_DIR/$APP_NAME"
|
||||||
|
echo "ℹ️ /Applications 无写入权限,改用 $DEST_APP"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 关闭可能正在运行的实例
|
||||||
|
pkill -f "芽说英语" 2>/dev/null || pkill -f "kouyu_english" 2>/dev/null || true
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# 同步/拷贝应用
|
||||||
|
rm -rf "$DEST_APP"
|
||||||
|
cp -R "$APP_SRC" "$DEST_APP"
|
||||||
|
|
||||||
|
echo "▶️ 正在启动 macOS 芽说英语 App..."
|
||||||
|
open "$DEST_APP"
|
||||||
|
echo "✅ macOS 版本已成功安装到 $DEST_APP 并启动!"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$TARGET" in
|
||||||
|
android)
|
||||||
|
install_android
|
||||||
|
;;
|
||||||
|
mac)
|
||||||
|
install_mac
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
install_android || true
|
||||||
|
install_mac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🎉 全部操作已完成!"
|
||||||
|
|||||||
Reference in New Issue
Block a user