Files
workphone-sdk/sdk/android-app/deploy.sh

117 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ─────────────────────────────────────────────────
# 工作手机 APK 一键编译 + 部署(全自动、零提问)
# 用法: ./deploy.sh [debug|release] [可选: 设备序列号]
# ─────────────────────────────────────────────────
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# JDKmacOS 上**强制**优先 21/17覆盖环境里指向 JDK 22+ 的 JAVA_HOMEKotlin 1.9 守护进程会崩)
JAVA_HOME_FIXED=""
if [[ "${DEPLOY_USE_ENV_JAVA:-0}" != "1" && -x /usr/libexec/java_home ]]; then
for _jv in 21 17; do
if _jh="$(/usr/libexec/java_home -v "$_jv" 2>/dev/null)" && [[ -d "$_jh" ]]; then
JAVA_HOME_FIXED="$_jh"
break
fi
done
fi
if [[ -z "$JAVA_HOME_FIXED" && -d "/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home" ]]; then
JAVA_HOME_FIXED="/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home"
fi
if [[ -n "$JAVA_HOME_FIXED" ]]; then
export JAVA_HOME="$JAVA_HOME_FIXED"
elif [[ -n "${JAVA_HOME:-}" ]]; then
export JAVA_HOME
elif [[ -x /usr/libexec/java_home ]]; then
export JAVA_HOME="$(/usr/libexec/java_home 2>/dev/null || true)"
fi
if [[ -z "${JAVA_HOME:-}" || ! -d "$JAVA_HOME" ]]; then
echo "✗ 未找到可用 JAVA_HOME请安装 Temurin 21 或设 DEPLOY_USE_ENV_JAVA=1"
exit 1
fi
BUILD_TYPE="${1:-debug}"
SERIAL="${2:-}"
BUILD_CAP="$(tr '[:lower:]' '[:upper:]' <<< "${BUILD_TYPE:0:1}")${BUILD_TYPE:1}"
TASK="assemble${BUILD_CAP}"
APK_PATH="app/build/outputs/apk/${BUILD_TYPE}/app-${BUILD_TYPE}.apk"
PKG="com.system.cloudservice"
pick_adb_serial() {
# 优先 USB 真机(排除 emulator否则第一个 device
local s
s="$(adb devices | awk '/\tdevice$/ {print $1}' | grep -v '^emulator-' | head -1)"
if [[ -z "$s" ]]; then
s="$(adb devices | awk '/\tdevice$/ {print $1}' | head -1)"
fi
echo "$s"
}
ADB_ARGS=()
if [[ -n "$SERIAL" ]]; then
ADB_ARGS=( -s "$SERIAL" )
else
AUTO_SERIAL="$(pick_adb_serial)"
if [[ -n "$AUTO_SERIAL" ]]; then
ADB_ARGS=( -s "$AUTO_SERIAL" )
fi
fi
echo "═══════════════════════════════════════"
echo " 工作手机 统一安装包部署(全自动)"
echo " 构建类型: ${BUILD_TYPE}"
echo " 设备序列号: ${SERIAL:-${AUTO_SERIAL:-(自动)}}"
echo " JAVA_HOME: ${JAVA_HOME}"
echo "═══════════════════════════════════════"
echo ""
echo "▸ [1/5] 停止守护进程并清理本地缓存(防路径错乱/Kotlin JDK 不匹配)…"
if [[ "${DEPLOY_NO_CLEAN:-0}" != "1" ]]; then
./gradlew --stop 2>/dev/null || true
rm -rf .gradle app/build
else
./gradlew --stop 2>/dev/null || true
fi
echo ""
echo "▸ [2/5] 编译..."
if ! ./gradlew "$TASK" --no-daemon -q; then
echo "✗ Gradle 失败"
exit 1
fi
if [[ ! -f "$APK_PATH" ]]; then
echo "✗ APK 未找到: $APK_PATH"
exit 1
fi
APK_SIZE=$(du -h "$APK_PATH" | cut -f1)
echo " ✓ 编译完成 ($APK_SIZE)"
echo ""
echo "▸ [3/5] 检查设备..."
DEVICE_COUNT=$(adb "${ADB_ARGS[@]}" devices 2>/dev/null | grep -c $'\tdevice$' || true)
if [[ "$DEVICE_COUNT" -eq 0 ]]; then
echo "✗ 未检测到设备(请 USB 调试 + 授权)"
exit 1
fi
DEVICE_MODEL=$(adb "${ADB_ARGS[@]}" shell getprop ro.product.model 2>/dev/null | tr -d '\r')
echo " ✓ 设备: $DEVICE_MODEL"
echo ""
echo "▸ [4/5] 安装..."
adb "${ADB_ARGS[@]}" shell am force-stop "$PKG" 2>/dev/null || true
adb "${ADB_ARGS[@]}" install -r -g -t "$APK_PATH" 2>&1
echo ""
echo "▸ [5/5] 启动(无桌面图标,仅显式启动)..."
adb "${ADB_ARGS[@]}" shell am start -n "${PKG}/.ui.SetupActivity" 2>/dev/null || true
echo ""
echo "═══════════════════════════════════════"
echo " ✓ 部署完成! ($APK_SIZE)"
echo "═══════════════════════════════════════"