Android アプリ(ノード)
サポート状況
- 役割:コンパニオンノードアプリ(AndroidはGatewayをホストしません)。
- Gateway必須:はい(macOS、Linux、またはWSL2経由のWindowsで実行してください)。
- インストール:はじめに + ペアリング。
- Gateway:ランブック + 設定。
- プロトコル: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.jsonにgateway.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を使用してください:
- Gatewayホスト上にDNS-SDゾーン(例:openclaw.internal.)を設定し、_openclaw-gw._tcpレコードを公開します。
- 選択したドメインの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.subscribe → event:"chat"
7) Canvas + カメラ
Gateway Canvas Host(Webコンテンツに推奨)
ノードがエージェントがディスク上で編集できる実際のHTML/CSS/JSを表示するようにしたい場合は、ノードをGateway canvas hostに向けます。
注意:ノードはcanvasHost.port(デフォルト 18793)上のスタンドアロンcanvas hostを使用します。
-
Gatewayホスト上で~/.openclaw/workspace/canvas/index.htmlを作成します。
-
ノードをナビゲートします(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.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ノードを参照してください。