159 lines
5.0 KiB
Bash
Executable File
159 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# ================================================================
|
|
# AI数智员工 统一批量部署脚本 v4.0
|
|
# ================================================================
|
|
#
|
|
# 一键将 AI数智员工 统一 APK 部署到多台手机
|
|
# v4.0: 不再需要 Termux/Python Agent — 全部功能已内置于 APK
|
|
#
|
|
# 用法:
|
|
# ./master_deploy.sh --server ws://IP:8899/ws/device
|
|
# ./master_deploy.sh --server ws://IP:8899/ws/device --wifi-scan
|
|
# ./master_deploy.sh --server ws://IP:8899/ws/device --devices "serial1,serial2"
|
|
#
|
|
# 前置: adb 已安装, 设备已通过 USB 或 WiFi ADB 连接
|
|
# ================================================================
|
|
|
|
set -eo pipefail
|
|
|
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[0;33m'
|
|
CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
APK_PATH="${PROJECT_ROOT}/android-app/app/build/outputs/apk/debug/app-debug.apk"
|
|
PACKAGE_NAME="com.system.cloudservice"
|
|
ACTIVITY_NAME=".ui.SetupActivity"
|
|
|
|
SERVER_URL=""
|
|
DEVICES=""
|
|
WIFI_SCAN=false
|
|
PROJECT_ID="cunkebao"
|
|
|
|
usage() {
|
|
echo -e "${BOLD}AI数智员工 统一部署 v4.0${NC}"
|
|
echo "用法: $0 --server <ws_url> [选项]"
|
|
echo ""
|
|
echo "选项:"
|
|
echo " --server URL WebSocket 服务地址 (必填)"
|
|
echo " --project ID 项目 ID (默认: cunkebao)"
|
|
echo " --devices LIST 指定设备序列号 (逗号分隔)"
|
|
echo " --wifi-scan WiFi ADB 扫描局域网"
|
|
echo " --apk PATH 指定 APK 路径"
|
|
echo " -h, --help 显示帮助"
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--server) SERVER_URL="$2"; shift 2 ;;
|
|
--project) PROJECT_ID="$2"; shift 2 ;;
|
|
--devices) DEVICES="$2"; shift 2 ;;
|
|
--wifi-scan) WIFI_SCAN=true; shift ;;
|
|
--apk) APK_PATH="$2"; shift 2 ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
*) echo -e "${RED}未知参数: $1${NC}"; usage; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
if [[ -z "$SERVER_URL" ]]; then
|
|
echo -e "${RED}错误: 必须指定 --server${NC}"
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
# Check APK exists
|
|
if [[ ! -f "$APK_PATH" ]]; then
|
|
echo -e "${YELLOW}APK 未找到: $APK_PATH${NC}"
|
|
echo -e "${CYAN}正在构建...${NC}"
|
|
cd "${PROJECT_ROOT}/android-app"
|
|
./gradlew assembleDebug --no-daemon
|
|
if [[ ! -f "$APK_PATH" ]]; then
|
|
echo -e "${RED}构建失败${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo -e "${GREEN}${BOLD}╔══════════════════════════════════════╗${NC}"
|
|
echo -e "${GREEN}${BOLD}║ AI数智员工 统一部署 v4.0 ║${NC}"
|
|
echo -e "${GREEN}${BOLD}╚══════════════════════════════════════╝${NC}"
|
|
echo -e " APK: $APK_PATH"
|
|
echo -e " Server: $SERVER_URL"
|
|
echo -e " Project: $PROJECT_ID"
|
|
echo ""
|
|
|
|
# WiFi scan
|
|
if $WIFI_SCAN; then
|
|
echo -e "${CYAN}扫描局域网 ADB 设备...${NC}"
|
|
LOCAL_IP=$(ip route get 1 2>/dev/null | awk '{print $NF; exit}' || echo "192.168.1")
|
|
SUBNET="${LOCAL_IP%.*}"
|
|
for i in $(seq 1 254); do
|
|
(adb connect "${SUBNET}.$i:5555" &>/dev/null &)
|
|
done
|
|
sleep 3
|
|
fi
|
|
|
|
# Get device list
|
|
if [[ -n "$DEVICES" ]]; then
|
|
IFS=',' read -ra DEVICE_LIST <<< "$DEVICES"
|
|
else
|
|
mapfile -t DEVICE_LIST < <(adb devices | grep -v "^$" | grep -v "^List" | awk '{print $1}')
|
|
fi
|
|
|
|
if [[ ${#DEVICE_LIST[@]} -eq 0 ]]; then
|
|
echo -e "${RED}未发现设备${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}发现 ${#DEVICE_LIST[@]} 台设备${NC}"
|
|
echo ""
|
|
|
|
deploy_device() {
|
|
local serial="$1"
|
|
local adb_cmd="adb -s $serial"
|
|
|
|
echo -e "${CYAN}── 部署: $serial ──${NC}"
|
|
|
|
# 1. Install APK
|
|
echo -e " 安装 APK..."
|
|
$adb_cmd install -r -g "$APK_PATH" 2>/dev/null || {
|
|
echo -e " ${RED}安装失败${NC}"
|
|
return 1
|
|
}
|
|
echo -e " ${GREEN}安装成功${NC}"
|
|
|
|
# 2. Grant permissions
|
|
echo -e " 授权..."
|
|
for perm in CAMERA RECORD_AUDIO POST_NOTIFICATIONS SYSTEM_ALERT_WINDOW; do
|
|
$adb_cmd shell pm grant "$PACKAGE_NAME" "android.permission.$perm" 2>/dev/null || true
|
|
done
|
|
|
|
# 3. Battery optimization whitelist
|
|
$adb_cmd shell dumpsys deviceidle whitelist +$PACKAGE_NAME 2>/dev/null || true
|
|
|
|
# 4. Launch app
|
|
echo -e " 启动..."
|
|
$adb_cmd shell am start -n "${PACKAGE_NAME}/${PACKAGE_NAME}${ACTIVITY_NAME}" 2>/dev/null || true
|
|
|
|
echo -e " ${GREEN}✅ 部署完成${NC}"
|
|
echo ""
|
|
}
|
|
|
|
SUCCESS=0
|
|
FAIL=0
|
|
|
|
for device in "${DEVICE_LIST[@]}"; do
|
|
device=$(echo "$device" | xargs)
|
|
[[ -z "$device" ]] && continue
|
|
if deploy_device "$device"; then
|
|
((SUCCESS++))
|
|
else
|
|
((FAIL++))
|
|
fi
|
|
done
|
|
|
|
echo -e "${BOLD}══════════════════════════════════════${NC}"
|
|
echo -e "${GREEN}成功: $SUCCESS${NC} ${RED}失败: $FAIL${NC} 总计: ${#DEVICE_LIST[@]}"
|
|
echo ""
|
|
echo -e "${YELLOW}提示: 在手机上打开 APP → 扫码绑定 即可连接服务器${NC}"
|
|
echo -e "${YELLOW} v4.0 无需安装 Termux / Python Agent${NC}"
|