Androidアプリ(ノード)
注意: 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が使える同一LAN、または
- Wide-Area Bonjour / ユニキャストDNS-SDを使ったTailscaleテールネット(後述)、または
- Gatewayのホスト/ポートを手動指定(フォールバック)
- Gatewayマシン上でCLI(
openclaw)を実行できること(SSH経由も可)。
1) Gatewayを起動する
openclaw gateway --port 18789 --verbose
ログに以下のような出力が表示されることを確認します:
listening on ws://0.0.0.0:18789
テールネット経由の構成(ウィーン⇄ロンドンなど離れた拠点に推奨)の場合、GatewayをテールネットIPにバインドします:
- Gatewayホストの
~/.openclaw/openclaw.jsonでgateway.bind: "tailnet"を設定。 - Gatewayまたはmacosメニューバーアプリを再起動。
2) ディスカバリの確認(任意)
Gatewayマシンから:
dns-sd -B _openclaw-gw._tcp local.
デバッグの詳細:Bonjour。
テールネット(ウィーン⇄ロンドン)でのユニキャストDNS-SDディスカバリ
Android NSD/mDNSディスカバリはネットワークを越えられません。AndroidノードとGatewayが異なるネットワークにあり、Tailscaleで接続されている場合は、Wide-Area Bonjour / ユニキャストDNS-SDを使用します:
- Gatewayホスト上にDNS-SDゾーン(例:
openclaw.internal.)を設定し、_openclaw-gw._tcpレコードを公開。 - 選択したドメインに対してTailscaleのスプリットDNSを設定。
詳細とCoreDNS設定例:Bonjour。
3) Androidから接続する
Androidアプリで:
- アプリはフォアグラウンドサービス(常駐通知)を通じてGateway接続を維持します。
- Connectタブを開きます。
- セットアップコードまたは手動モードを使います。
- ディスカバリがブロックされている場合は、詳細設定でホスト/ポート(必要に応じてTLS/トークン/パスワード)を手動入力します。
初回ペアリング成功後、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ホスト(Webコンテンツに推奨)
ノードにエージェントがディスク上で編集できるHTML/CSS/JSを表示させたい場合は、GatewayのCanvasホストを使います。
注意:ノードはGateway HTTPサーバー(gateway.portと同じポート、デフォルト18789)からCanvasを読み込みます。
-
Gatewayホスト上に
~/.openclaw/workspace/canvas/index.htmlを作成。 -
ノードをそこに誘導(LAN内):
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18789/__openclaw__/canvas/"}'
テールネット(任意):両方のデバイスがTailscale上にある場合は、.localの代わりにMagicDNS名またはテールネットIPを使います。例: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ヘルパーについてはカメラノードを参照してください。
8) Voice+Androidの拡張コマンド
- Voice:AndroidはVoiceタブでマイクのオン/オフ操作に対応し、文字起こしキャプチャとTTS再生(ElevenLabs設定時はElevenLabs、未設定時はシステムTTSにフォールバック)が可能です。アプリがフォアグラウンドから離れるとVoiceは停止します。
- Voice wake/トークモード切替は現在AndroidのUX/ランタイムから削除されています。
- Androidの追加コマンド群(端末とパーミッションにより利用可否が異なります):
device.status、device.info、device.permissions、device.healthnotifications.list、notifications.actionsphotos.latestcontacts.search、contacts.addcalendar.events、calendar.addmotion.activity、motion.pedometer