Android 应用(节点模式)
注意: Android 应用目前尚未公开发布。源码在 OpenClaw 仓库 的
apps/android目录下,你可以用 Java 17 和 Android SDK 自行构建(./gradlew :app:assembleDebug)。构建说明见 apps/android/README.md。
功能定位
- 角色:伴侣节点应用(Android 不承载 Gateway)。
- 需要 Gateway:是(在 macOS、Linux 或 Windows WSL2 上运行)。
- 安装:快速上手 + 配对。
- Gateway:操作手册 + 配置参考。
- 协议: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 / unicast DNS-SD(见下方),或者
- 手动填写 Gateway 主机/端口(兜底方案)
- Gateway 所在机器上可以运行 CLI(
openclaw),也可以通过 SSH 操作。
1) 启动 Gateway
openclaw gateway --port 18789 --verbose
日志中应能看到类似输出:
listening on ws://0.0.0.0:18789
如果是跨网络场景(比如维也纳 ⇄ 伦敦),建议把 Gateway 绑定到 tailnet IP:
- 在 Gateway 主机的
~/.openclaw/openclaw.json中设置gateway.bind: "tailnet"。 - 重启 Gateway / macOS 菜单栏应用。
2) 验证发现(可选)
在 Gateway 主机上运行:
dns-sd -B _openclaw-gw._tcp local.
更多调试信息:Bonjour。
Tailnet(跨网络)发现 — unicast DNS-SD
Android 的 NSD/mDNS 发现无法跨网络。如果你的 Android 节点和 Gateway 不在同一网络但都通过 Tailscale 连接,可以改用 Wide-Area Bonjour / unicast DNS-SD:
- 在 Gateway 主机上搭建一个 DNS-SD zone(例如
openclaw.internal.),发布_openclaw-gw._tcp记录。 - 在 Tailscale 中为该域名配置 split DNS,指向对应的 DNS 服务器。
详细配置和 CoreDNS 示例:Bonjour。
3) 从 Android 连接
在 Android 应用中:
- 应用通过 前台服务(持久通知)保持 Gateway 连接。
- 打开 Connect 标签。
- 使用 Setup Code 或 Manual 模式。
- 如果发现被阻断,在 Advanced controls 中手动填写主机/端口(以及 TLS/token/密码,如有需要)。
首次配对成功后,Android 会在启动时自动重连:
- 优先使用手动端点(如已设置),否则
- 使用上次发现的 Gateway(尽力重连)。
4) 批准配对(CLI)
在 Gateway 主机上:
openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>
配对细节:配对。
5) 确认节点已连接
-
查看节点状态:
openclaw nodes status -
通过 Gateway:
openclaw gateway call node.list --params "{}"
6) 聊天 + 历史
Android Chat 标签支持会话选择(默认 main,也可切换到其他已有会话):
- 历史记录:
chat.history - 发送消息:
chat.send - 推送更新(尽力投递):
chat.subscribe→event:"chat"
7) Canvas + 相机
Gateway Canvas Host(推荐用于 Web 内容)
如果你希望节点显示真实的 HTML/CSS/JS——agent 可以在磁盘上编辑的内容——把节点指向 Gateway canvas host。
说明:节点从 Gateway HTTP 服务器加载 canvas(端口与 gateway.port 相同,默认 18789)。
-
在 Gateway 主机上创建
~/.openclaw/workspace/canvas/index.html。 -
让节点导航到该页面(局域网):
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 host 地址为 http://<gateway-host>:18789/__openclaw__/a2ui/。
Canvas 命令(仅前台可用):
canvas.eval、canvas.snapshot、canvas.navigate(用{"url":""}或{"url":"/"}回到默认脚手架页面)。canvas.snapshot返回{ format, base64 }(默认format="jpeg")。- A2UI:
canvas.a2ui.push、canvas.a2ui.reset(canvas.a2ui.pushJSONL为旧别名)
相机命令(仅前台可用,需权限):
camera.snap(jpg)camera.clip(mp4)
参数和 CLI 帮助详见 Camera node。
8) 语音 + Android 扩展命令
- 语音:Android 在 Voice 标签中提供单一的麦克风开/关流程,支持语音转录和 TTS 播放(配置了 ElevenLabs 时使用 ElevenLabs,否则回退到系统 TTS)。退出前台后语音停止。
- 语音唤醒 / talk-mode 开关目前已从 Android 的界面和运行时中移除。
- Android 额外命令族(可用性取决于设备 + 权限):
device.status、device.info、device.permissions、device.healthnotifications.list、notifications.actionsphotos.latestcontacts.search、contacts.addcalendar.events、calendar.addmotion.activity、motion.pedometer