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:操作手冊 + 設定

系統控制

系統控制(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:

  1. 在 Gateway 主機上建立 DNS-SD 區域(例如 openclaw.internal.)並發布 _openclaw-gw._tcp 記錄。
  2. 設定 Tailscale split DNS,將你選用的網域指向該 DNS 伺服器。

詳細說明與 CoreDNS 範例設定:Bonjour

3) 從 Android 連線

在 Android 應用程式中:

  • 應用程式透過 前景服務(持續性通知)維持 Gateway 連線。
  • 開啟 Connect 分頁。
  • 選擇 Setup CodeManual 模式。
  • 若探索遭到阻擋,在 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.subscribeevent:"chat"

7) Canvas + 相機

Gateway Canvas Host(建議用於網頁內容)

若希望節點顯示代理程式可在磁碟上編輯的真實 HTML/CSS/JS,請將節點指向 Gateway canvas host。

注意:節點從 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":"/"} 返回預設佈局)。canvas.snapshot 回傳 { format, base64 }(預設 format="jpeg")。
  • A2UI:canvas.a2ui.pushcanvas.a2ui.resetcanvas.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.statusdevice.infodevice.permissionsdevice.health
    • notifications.listnotifications.actions
    • photos.latest
    • contacts.searchcontacts.add
    • calendar.eventscalendar.add
    • motion.activitymotion.pedometer