Android App(Android 应用)(节点)

支持快照

  • 角色:配套节点应用(Android 不托管 Gateway(网关))。
  • Gateway(网关)要求:是(通过 WSL2 在 macOS、Linux 或 Windows 上运行)。
  • 安装:Getting Started + Pairing
  • Gateway(网关):Runbook + Configuration

系统控制

系统控制(launchd/systemd)位于 Gateway(网关)主机上。参阅 Gateway

连接运行手册

Android 节点应用 ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway(网关)

Android 直接连接到 Gateway(网关)WebSocket(默认 ws://<host>:18789)并使用 Gateway(网关)拥有的配对。

先决条件

  • 你可以在"主"机器上运行 Gateway(网关)。
  • Android 设备/模拟器可以访问 Gateway(网关)WebSocket:
    • 使用 mDNS/NSD 的同一 LAN,
    • 使用 Wide-Area Bonjour / unicast DNS-SD 的同一 Tailscale tailnet(见下文),
    • 手动 Gateway(网关)主机/端口(回退)
  • 你可以在 Gateway(网关)机器上运行 CLI(openclaw)(或通过 SSH)。

1) 启动 Gateway(网关)

openclaw gateway --port 18789 --verbose

在日志中确认你看到类似:

  • listening on ws://0.0.0.0:18789

对于仅 tailnet 设置(推荐用于 Vienna ⇄ London),将 Gateway(网关)绑定到 tailnet IP:

  • 在 Gateway(网关)主机的 ~/.openclaw/openclaw.json 中设置 gateway.bind: "tailnet"
  • 重启 Gateway(网关)/ macOS 菜单栏应用。

2) 验证发现(可选)

从 Gateway(网关)机器:

dns-sd -B _openclaw-gw._tcp local.

更多调试说明:Bonjour

Tailnet(Vienna ⇄ London)通过 unicast DNS-SD 发现

Android NSD/mDNS 发现不会跨网络。如果你的 Android 节点和 Gateway(网关)在不同的网络上但通过 Tailscale 连接,请改用 Wide-Area Bonjour / unicast DNS-SD:

  1. 在 Gateway(网关)主机上设置 DNS-SD 区域(示例 openclaw.internal.)并发布 _openclaw-gw._tcp 记录。
  2. 为指向该 DNS 服务器的所选域配置 Tailscale split DNS。

详情和示例 CoreDNS 配置:Bonjour

3) 从 Android 连接

在 Android 应用中:

  • 应用通过前台服务(持久通知)保持其 Gateway(网关)连接活跃。
  • 打开 Settings(设置)
  • Discovered Gateways(已发现的网关) 下,选择你的 Gateway(网关)并点击 Connect(连接)
  • 如果 mDNS 被阻止,请使用 Advanced → Manual Gateway(高级 → 手动网关)(主机 + 端口)和 Connect (Manual)(连接(手动))

首次成功配对后,Android 在启动时自动重新连接:

  • 手动端点(如果启用),否则
  • 最后发现的 Gateway(网关)(尽力而为)。

4) 批准配对(CLI)

在 Gateway(网关)机器上:

openclaw nodes pending
openclaw nodes approve <requestId>

配对详情:Gateway pairing

5) 验证节点已连接

  • 通过节点状态:
    openclaw nodes status
    
  • 通过 Gateway(网关):
    openclaw gateway call node.list --params "{}"
    

6) Chat + history(聊天 + 历史)

Android 节点的 Chat 表使用 Gateway(网关)的主会话键main),因此历史和回复与 WebChat 和其他客户端共享:

  • History(历史):chat.history
  • Send(发送):chat.send
  • Push updates(推送更新)(尽力而为):chat.subscribeevent:"chat"

7) Canvas + camera

Gateway Canvas Host(Gateway Canvas 主机)(推荐用于 Web 内容)

如果你希望节点显示代理可以在磁盘上编辑的真实 HTML/CSS/JS,请将节点指向 Gateway(网关)Canvas 主机。

注意:节点使用 canvasHost.port 上的独立 Canvas 主机(默认 18793)。

  1. 在 Gateway(网关)主机上创建 ~/.openclaw/workspace/canvas/index.html

  2. 将节点导航到它(LAN):

openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18793/__openclaw__/canvas/"}'

Tailnet(可选):如果两个设备都在 Tailscale 上,请使用 MagicDNS 名称或 tailnet IP 而不是 .local,例如 http://<gateway-magicdns>:18793/__openclaw__/canvas/

此服务器将实时重新加载客户端注入 HTML 并在文件更改时重新加载。 A2UI 主机位于 http://<gateway-host>:18793/__openclaw__/a2ui/

Canvas 命令(仅前台):

  • canvas.evalcanvas.snapshotcanvas.navigate(使用 {"url":""}{"url":"/"} 返回到默认脚手架)。canvas.snapshot 返回 { format, base64 }(默认 format="jpeg")。
  • A2UI:canvas.a2ui.pushcanvas.a2ui.resetcanvas.a2ui.pushJSONL 遗留别名)

Camera 命令(仅前台;权限门控):

  • camera.snap(jpg)
  • camera.clip(mp4)

参数和 CLI 助手请参阅 Camera node