跳到內容

部署 OpenClaw Android 節點:快速連接 Gateway 指南

想要讓你的 Android 裝置變成強大的 AI 節點,但總是被網路設定和配對搞得頭大嗎?要把行動裝置整合進自動化流程中,穩定性跟連線機制通常是最難搞的部分。

如果你正打算把 Android 裝置變成你系統的一部分,這篇指南會幫你快速搞定連線與設定,讓你的裝置乖乖聽話。

注意: Android App 尚未正式公開發布。原始碼可以在 OpenClaw repository 的 apps/android 目錄下找到。你可以使用 Java 17 和 Android SDK 自行編譯 (./gradlew :app:assembleDebug)。編譯說明請參考 apps/android/README.md。

系統控制 (launchd/systemd) 位於 Gateway 主機上。請參閱 Gateway。

Android 節點 App ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway

Android 會直接連線到 Gateway WebSocket(預設為 ws://<host>:18789)並使用裝置配對 (role: node)。

  • 你可以在「主要」機器上執行 Gateway。
  • Android 裝置或模擬器可以連線到 Gateway 的 WebSocket:
    • 在同一個區域網路 (LAN) 並使用 mDNS/NSD,或者
    • 使用 Tailscale tailnet 並搭配 Wide-Area Bonjour / unicast DNS-SD(見下文),或者
    • 手動輸入 Gateway 主機/連接埠(備用方案)
  • 你可以在 Gateway 機器上(或透過 SSH)執行 CLI (openclaw)。
Terminal window
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 選單列 App。

在 Gateway 機器上執行:

Terminal window
dns-sd -B _openclaw-gw._tcp local.

更多除錯筆記:Bonjour。

透過 unicast DNS-SD 進行 Tailnet (維也納 ⇄ 倫敦) 發現

Section titled “透過 unicast DNS-SD 進行 Tailnet (維也納 ⇄ 倫敦) 發現”

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。

在 Android App 中:

  • App 會透過 前景服務 (foreground service)(持續性通知)來保持與 Gateway 的連線。
  • 開啟 Connect 分頁。
  • 使用 Setup Code 或 Manual 模式。
  • 如果發現機制被阻擋,請在 Advanced controls 中使用手動輸入主機/連接埠(以及需要的 TLS/token/密碼)。

第一次成功配對後,Android 會在啟動時自動重新連線:

  • 手動端點(如果已啟用),否則
  • 使用最後一次發現的 Gateway(盡力而為)。

在 Gateway 機器上執行:

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

配對細節:Pairing。

  • 透過節點狀態:

    Terminal window
    openclaw nodes status
  • 透過 Gateway:

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

Android 的 Chat 分頁支援選取工作階段(預設為 main,以及其他現有的工作階段):

  • 紀錄:chat.history
  • 發送:chat.send
  • 推送更新(盡力而為):chat.subscribe → event:"chat"

Gateway Canvas 主機(推薦用於網頁內容)

Section titled “Gateway Canvas 主機(推薦用於網頁內容)”

如果你想讓節點顯示 Agent 可以在磁碟上編輯的真實 HTML/CSS/JS,請將節點指向 Gateway 的 canvas 主機。

注意:節點會從 Gateway HTTP 伺服器載入畫布(連接埠與 gateway.port 相同,預設為 18789)。

  1. 在 Gateway 主機上建立 ~/.openclaw/workspace/canvas/index.html。

  2. 將節點導向該位址 (LAN):

Terminal window
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/。

此伺服器會將 live-reload 用戶端植入 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。

  • 語音:Android 在 Voice 分頁中使用單一的麥克風開關流程,具備逐字稿擷取與 TTS 播放功能(設定後使用 ElevenLabs,否則回退至系統 TTS)。當 App 離開前景時,語音會停止。
  • 語音喚醒/對話模式切換目前已從 Android 的使用者體驗與執行環境中移除。
  • 額外的 Android 指令家族(可用性取決於裝置與權限):
    • device.status, device.info, device.permissions, device.health
    • notifications.list, notifications.actions
    • photos.latest
    • contacts.search, contacts.add
    • calendar.events, calendar.add
    • callLog.search
    • motion.activity, motion.pedometer

有任何設定上的問題嗎?試試我們的 AI Setup Assistant。

OpenClaw

OpenClaw Expert

還是卡住了?

如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。