feat: publish workphone SDK deployment and API docs

This commit is contained in:
Manus AI
2026-07-14 18:10:52 +08:00
commit 021d633cc1
534 changed files with 122391 additions and 0 deletions

116
sdk/android-app/deploy.sh Executable file
View File

@@ -0,0 +1,116 @@
#!/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 "═══════════════════════════════════════"