Appearance
Android 应用(节点)
注意: Android 应用尚未公开发布。源码在 OpenClaw 仓库 的
apps/android目录下,可用 Java 17 和 Android SDK 自行构建(./gradlew :app:assemblePlayDebug)。构建说明见 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 使用广域 Bonjour/单播 DNS-SD(见下文),或
- 手动指定 Gateway host/port(备选方案)
- 可在 Gateway 机器上运行 CLI(
openclaw)或通过 SSH 连接。
1) 启动 Gateway
bash
openclaw gateway --port 18789 --verbose确认日志中出现:
listening on ws://0.0.0.0:18789
对于仅使用 tailnet 的场景(推荐用于跨网络节点),将 Gateway 绑定到 tailnet IP:
- 在 Gateway 宿主机的
~/.openclaw/openclaw.json中设置gateway.bind: "tailnet"。 - 重启 Gateway / macOS 菜单栏应用。
2) 验证发现(可选)
在 Gateway 机器上:
bash
dns-sd -B _openclaw-gw._tcp local.更多调试说明:Bonjour。
Tailnet 跨网络发现(通过单播 DNS-SD)
Android NSD/mDNS 发现不能跨网段。如果 Android 节点和 Gateway 在不同网络但通过 Tailscale 连接,需使用广域 Bonjour/单播 DNS-SD:
- 在 Gateway 宿主机上配置 DNS-SD 区域(示例:
openclaw.internal.)并发布_openclaw-gw._tcp记录。 - 配置 Tailscale split DNS,将你的域名指向该 DNS 服务器。
详情及 CoreDNS 配置示例:Bonjour。
3) 从 Android 连接
在 Android 应用中:
- 应用通过前台服务(持久通知)保持 Gateway 连接。
- 打开 Connect 标签。
- 使用 Setup Code 或 Manual 模式。
- 如果发现被阻止,在 Advanced controls 中手动输入 host/port(以及 TLS/token/密码)。
首次成功配对后,Android 启动时会自动重连:
- 手动指定的端点(如果已启用),否则
- 上次发现的 Gateway(尽力而为)。
4) 批准配对(CLI)
在 Gateway 机器上:
bash
openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>配对详情:设备配对。
5) 验证节点已连接
通过节点状态:
bashopenclaw nodes status通过 Gateway:
bashopenclaw gateway call node.list --params "{}"
6) 聊天 + 历史记录
Android Chat 标签支持会话选择(默认 main,以及其他已有会话):
- 历史:
chat.history - 发送:
chat.send - 推送更新(尽力而为):
chat.subscribe→event:"chat"
7) Canvas + 摄像头
Gateway Canvas 宿主(推荐用于 Web 内容)
如果希望节点显示 Agent 可以在磁盘上编辑的真实 HTML/CSS/JS,将节点指向 Gateway canvas 宿主。
注意:节点从 Gateway HTTP 服务器加载 canvas(与 gateway.port 同端口,默认 18789)。
在 Gateway 宿主机上创建
~/.openclaw/workspace/canvas/index.html。导航节点到该文件(局域网):
bash
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.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 节点。
8) 语音 + Android 扩展命令
- 语音:Android 在 Voice 标签中使用单次麦克风开/关流程,支持转录和 TTS 播放(已配置时使用 ElevenLabs,否则回退到系统 TTS)。应用离开前台后语音停止。
- 语音唤醒/通话模式开关目前已从 Android 界面/运行时移除。
- 其他 Android 命令族(可用性取决于设备和权限):
device.status、device.info、device.permissions、device.healthnotifications.list、notifications.actionsphotos.latestcontacts.search、contacts.addcalendar.events、calendar.addcallLog.searchsms.searchmotion.activity、motion.pedometer
把 Android 手机接入"我的龙虾"后,它不仅是聊天入口,还能当摄像头、日历助手、短信检索器——AI 多模态能力全开。