Android 應用程式(Node)
注意: 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 機器上(或透過 SSH)執行 CLI(
openclaw)。
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(跨網路)透過 unicast DNS-SD 探索
Android NSD/mDNS 探索無法跨網路運作。若 Android 節點與 Gateway 位於不同網路但透過 Tailscale 連線,請改用 Wide-Area Bonjour / unicast 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 中手動輸入主機/連接埠(以及 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(建議用於網頁內容)
若希望節點顯示代理程式可在磁碟上編輯的真實 HTML/CSS/JS,請將節點指向 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 主機位於 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)。應用程式離開前景時語音會停止。
- Voice wake/talk-mode 切換目前已從 Android UX/執行環境中移除。
- 其他 Android 指令系列(可用性依裝置 + 權限而定):
device.status、device.info、device.permissions、device.healthnotifications.list、notifications.actionsphotos.latestcontacts.search、contacts.addcalendar.events、calendar.addmotion.activity、motion.pedometer