aixautobotaixautobot
写新云 aixautobot 文档

方式 B:作为节点

节点接入 backend、设备发现、云设备创建

节点会:发现本机设备 → 以 /ws/node 注册(上报设备清单)→ 接收并执行派发的 Flow、响应设备操作 RPC(DeviceOp)、推送运行事件与心跳;开启 webrtc 时为每台设备起媒体会话。

设备发现

节点始终枚举本机所有 adb 可见设备(USB 真机 + 虚拟/模拟器),不区分、无需指定 android。每台 adb 设备 metaplatform:"android"(驱动选择器)+ transport:"usb"|"virtual"。best-effort——缺 adb 只告警不致命。Desktop / iOS 为 opt-in,经 AIXAUTOSDK_NODE_PLATFORMS 显式开启。

1. 在 backend 签发 node token

节点归属注册它的调用方:必须带身份(项目 key/secret → 解析为该项目的代表用户,或用户 JWT bearer)。匿名注册返回 401。该节点上报的设备即归该用户。

curl -sX POST http://<backend>/api/nodes \
  -H 'Content-Type: application/json' \
  -H 'X-Project-Key: <PROJECT_KEY>' -H 'X-Project-Secret: <PROJECT_SECRET>' \
  -d '{"name":"lab-node-1"}'
# → {"id":"...","token":"<NODE_TOKEN>"}   token 仅此一次返回,妥善保存

2. 运行节点

AIXAUTOSDK_BACKEND_WS=ws://<backend>:3000 \
AIXAUTOSDK_NODE_TOKEN=<NODE_TOKEN> \
AIXAUTOSDK_NODE_NAME=lab-node-1 \
  ./aixautobot node
变量必填默认 / 说明
AIXAUTOSDK_NODE_TOKENbackend 签发的节点 token
AIXAUTOSDK_BACKEND_WSws://localhost:3000
AIXAUTOSDK_NODE_NAME默认取 $HOSTNAME
AIXAUTOSDK_NODE_PLATFORMS可选。adb 设备始终自动枚举;仅当要额外接入 desktop / ios 时填逗号列表
AIXAUTOSDK_IOS_WDA_URLios opt-in 时启用 ios 后端需设置 WDA 地址
AIXAUTOSDK_MAX_VIEWERSWebRTC 单设备最大查看端,默认 4

3. 嵌入自己的二进制(可选)

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    aixautosdk::node::run().await   // 读取上述 env,自带退避重连
}

iOS 与虚拟 iOS(vphone)

两条 lane 均默认关闭、与 redroid 平行。iOS 一律按真机对待——无论物理机还是 vphone 云手机,上线后都经 usbmuxd/WDA 走统一的设备操作路径。

Feature作用设备宿主
ios真机 iOS(go-ios 驱动)USB 连接的 iPhone/iPad装有 go-ios(ios 二进制)的主机
vphone虚拟 iOS 云手机(外部 vphone-cliiOS VMApple Silicon + macOS 15+、关闭 SIP/AMFI
  • 路由provisionspec.platform="ios" / kind="vphone" 走 vphone 创建(真机 iOS 只发现、不创建);power / device_control 按设备 id 命名空间路由——ios-<udid> → 真机 iOS,已注册的 vphone 实例 → vphone,其余 → redroid。功能未启用时返回明确的 “not enabled” 错误。
  • 开启 ios feature 时 helper 为唯一权威源:按 udid 枚举、为每台设备把 WDA 转发到各自独立的本地端口,设备 id = ios-<udid>。相关 env:AIXAUTOSDK_IOS_PYTHONAIXAUTOSDK_IOS_USBMUXDAIXAUTOSDK_IOS_WDA_LOCAL_PORT / _DEVICE_PORT
  • vphone 相关 env:AIXAUTOSDK_VPHONE_CLI(预编译且签名的绝对路径)、AIXAUTOSDK_VPHONE_INSTANCES_DIRAIXAUTOSDK_VPHONE_IPSW 等。
  • 能力上报Hello.capabilitiesios_capable / vphone_capable / redroid_capable,供后端按节点能力调度。

云设备创建:代理与安装包

创建云设备(POST /api/devices/provision)的 spec 支持两个平台无关的可选输入,设备上线后由节点自动应用:

字段形态说明
proxystring(URL)代理地址。redroid 走原生 settings put global http_proxy;vphone/iOS 安装一份全局 HTTP 代理描述文件
packages[{software, version?}]software + version 安装的包数组。version 省略时由平台管理员默认版本补齐
{
  "platform": "ios", "name": "vm-01",
  "proxy": "http://10.0.0.1:7890",
  "packages": [
    { "software": "com.foo.app", "version": "1.2.3" },
    { "software": "com.bar.app" }
  ]
}
  • 解析器:节点按 (platform, software, version)AIXAUTOSDK_PKG_RESOLVER 指向的解析服务取包,下载并校验 sha256 后安装。
  • 应用时机:provision 创建并 ensure_online 后逐包安装 + 应用代理,best-effort——单项失败只告警、不致 provision 失败。

Mac 环境底座(aixautobot mac-env

macOS 上把“装 lima → 建 Ubuntu VM → 加载 binder → 装 docker”这套环境底座固化为一键命令,使现有 redroid 创建路径开箱即用。只做底座,不创建设备、不注册节点

aixautobot mac-env setup    --json   # 一键配置,逐行输出进度
aixautobot mac-env status   --json   # 只探测,报每步 ok|missing
aixautobot mac-env teardown [--purge]# 停 VM;--purge 连磁盘一起删

setup 成功后产出 AIXAUTOSDK_DOCKER_SOCKETAIXAUTOSDK_INSTANCES_DIR 两个变量;让本机 node 进程带上它们,之后走现有 POST /api/devices/provision 即可在该 VM 内创建 redroid 云手机。