Android 应用

Android 应用(节点)

支持快照

  • 角色:Companion 节点应用(Android 不托管 Gateway)。
  • 需要 Gateway:是(在 macOS、Linux 或 Windows(通过 WSL2)上运行)。
  • 安装:入门指南 + 配对
  • Gateway: 运行手册 + 配置

系统控制

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

连接运行手册

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

Android 直接连接到 Gateway WebSocket(默认 ws://<host>:18789)并使用设备配对(role: node)。

前置条件

  • 你可以在"主控"机器上运行 Gateway。
  • Android 设备/模拟器可以访问 gateway WebSocket:
    • 同一局域网,使用 mDNS/NSD,
    • 同一 Tailscale tailnet,使用 Wide-Area Bonjour / 单播 DNS-SD(见下文),
    • 手动 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

通过单播 DNS-SD 进行 Tailnet (Vienna ⇄ London) 发现

Android NSD/mDNS 发现无法跨网络。如果你的 Android 节点和 gateway 位于不同网络但通过 Tailscale 连接,请使用 Wide-Area Bonjour / 单播 DNS-SD:

  1. 在 gateway 主机上设置 DNS-SD 区域(例如 openclaw.internal.)并发布 _openclaw-gw._tcp 记录。
  2. 配置 Tailscale 拆分 DNS,将选择的域指向该 DNS 服务器。

详细信息和 CoreDNS 配置示例:Bonjour

3) 从 Android 连接

在 Android 应用中:

  • 应用通过前台服务(持久通知)保持 gateway 连接活跃。
  • 打开 Connect 标签页。
  • 使用 Setup CodeManual 模式。
  • 如果发现被阻止,在 Advanced controls 中使用手动主机/端口(以及所需的 TLS/令牌/密码)。

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

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

4) 批准配对(CLI)

在 gateway 机器上:

openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>

配对详情:配对

5) 验证节点已连接

  • 通过 nodes 状态:

    openclaw nodes status
    
  • 通过 Gateway:

    openclaw gateway call node.list --params "{}"
    

6) 聊天 + 历史

Android Chat 标签页支持会话选择(默认 main,以及其他现有会话):

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

7) Canvas + 屏幕 + 摄像头

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

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

注意:节点从 Gateway HTTP 服务器加载 canvas(与 gateway.port 相同的端口,默认 18789)。

  1. 在 gateway 主机上创建 ~/.openclaw/workspace/canvas/index.html

  2. 导航节点到它(局域网):

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

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

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

Canvas 命令(仅限前台):

  • canvas.evalcanvas.snapshotcanvas.navigate(使用 {"url":""}{"url":"/"} 返回默认 scaffold)。canvas.snapshot 返回 { format, base64 }(默认 format="jpeg")。
  • A2UI: canvas.a2ui.pushcanvas.a2ui.resetcanvas.a2ui.pushJSONL 旧版别名)

摄像头命令(仅限前台;需要权限):

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

参数和 CLI 助手参见 摄像头节点

屏幕命令:

  • screen.record (mp4;仅限前台)

8) 语音 + 扩展的 Android 命令界面

  • 语音:Android 在 Voice 标签页中使用单一的麦克风开/关流程,包含转录捕获和 TTS 播放(配置时使用 ElevenLabs,系统 TTS 作为备用)。
  • 语音唤醒/对话模式切换目前已从 Android UX/运行时中移除。
  • 其他 Android 命令系列(可用性取决于设备 + 权限):
    • device.statusdevice.infodevice.permissionsdevice.health
    • notifications.listnotifications.actions
    • photos.latest
    • contacts.searchcontacts.add
    • calendar.eventscalendar.add
    • motion.activitymotion.pedometer
    • app.update