Android アプリ(ノード)

サポート状況

  • 役割:コンパニオンノードアプリ(AndroidはGatewayをホストしません)。
  • Gateway必須:はい(macOS、Linux、またはWSL2経由のWindowsで実行してください)。
  • インストール:はじめに + ペアリング
  • Gateway:ランブック + 設定

システム制御

システム制御(launchd/systemd)はGatewayホスト上に存在します。Gatewayを参照してください。

接続手順

Androidノードアプリ ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway

AndroidはGateway WebSocket(デフォルト ws://<host>:18789)に直接接続し、Gateway所有のペアリングを使用します。

前提条件

  • 「マスター」マシンでGatewayを実行できること。
  • AndroidデバイスまたはエミュレーターがGateway WebSocketに到達できること:
    • mDNS/NSDを使用した同一LAN、または
    • Wide-Area Bonjour / unicast DNS-SDを使用した同一Tailscale tailnet(以下を参照)、または
    • 手動ゲートウェイホスト/ポート(フォールバック)
  • Gatewayマシンで(またはSSH経由で)CLI(openclaw)を実行できること。

1) Gatewayを起動

openclaw gateway --port 18789 --verbose

ログで以下のような出力を確認してください:

  • listening on ws://0.0.0.0:18789

tailnetのみのセットアップ(ウィーン ⇄ ロンドンの場合推奨)では、GatewayをtailnetのIPにバインドします:

  • Gatewayホストの~/.openclaw/openclaw.jsongateway.bind: "tailnet"を設定します。
  • Gateway / macOSメニューバーアプリを再起動します。

2) ディスカバリーを確認(オプション)

Gatewayマシンから:

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

デバッグの詳細:Bonjour

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

3) Androidから接続

Androidアプリ内で:

  • アプリはフォアグラウンドサービス(永続的な通知)を介してGateway接続を維持します。
  • Settingsを開きます。
  • Discovered Gatewaysの下で、Gatewayを選択してConnectを押します。
  • mDNSがブロックされている場合は、Advanced → Manual Gateway(ホスト + ポート)を使用して**Connect (Manual)**を押します。

最初のペアリングが成功した後、Android は起動時に自動再接続します:

  • 手動エンドポイント(有効な場合)、それ以外は
  • 最後に発見されたGateway(ベストエフォート)。

4) ペアリングを承認(CLI)

Gatewayマシン上で:

openclaw nodes pending
openclaw nodes approve <requestId>

ペアリングの詳細:Gatewayペアリング

5) ノードが接続されているか確認

  • ノードステータス経由:
    openclaw nodes status
    
  • Gateway経由:
    openclaw gateway call node.list --params "{}"
    

6) チャット + 履歴

AndroidノードのChatシートはGatewayのプライマリセッションキーmain)を使用するため、履歴と返信はWebChatおよび他のクライアントと共有されます:

  • 履歴:chat.history
  • 送信:chat.send
  • プッシュ更新(ベストエフォート):chat.subscribeevent:"chat"

7) Canvas + カメラ

Gateway Canvas Host(Webコンテンツに推奨)

ノードがエージェントがディスク上で編集できる実際のHTML/CSS/JSを表示するようにしたい場合は、ノードをGateway canvas hostに向けます。

注意:ノードはcanvasHost.port(デフォルト 18793)上のスタンドアロンcanvas hostを使用します。

  1. Gatewayホスト上で~/.openclaw/workspace/canvas/index.htmlを作成します。

  2. ノードをナビゲートします(LAN):

openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18793/__openclaw__/canvas/"}'

Tailnet(オプション):両方のデバイスがTailscale上にある場合は、.localの代わりにMagicDNS名またはtailnet IPを使用します。例:http://<gateway-magicdns>:18793/__openclaw__/canvas/

このサーバーはHTMLにライブリロードクライアントを注入し、ファイル変更時にリロードします。 A2UI hostはhttp://<gateway-host>:18793/__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ノードを参照してください。