Androidアプリ(ノード)

注意: 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が使える同一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.jsongateway.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を使用します:

  1. Gatewayホスト上にDNS-SDゾーン(例:openclaw.internal.)を設定し、_openclaw-gw._tcpレコードを公開。
  2. 選択したドメインに対して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.subscribeevent:"chat"

7) Canvas+カメラ

GatewayのCanvasホスト(Webコンテンツに推奨)

ノードにエージェントがディスク上で編集できるHTML/CSS/JSを表示させたい場合は、GatewayのCanvasホストを使います。

注意:ノードはGateway HTTPサーバー(gateway.portと同じポート、デフォルト18789)からCanvasを読み込みます。

  1. Gatewayホスト上に~/.openclaw/workspace/canvas/index.htmlを作成。

  2. ノードをそこに誘導(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.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ヘルパーについてはカメラノードを参照してください。

8) Voice+Androidの拡張コマンド

  • Voice:AndroidはVoiceタブでマイクのオン/オフ操作に対応し、文字起こしキャプチャとTTS再生(ElevenLabs設定時はElevenLabs、未設定時はシステムTTSにフォールバック)が可能です。アプリがフォアグラウンドから離れるとVoiceは停止します。
  • Voice wake/トークモード切替は現在AndroidのUX/ランタイムから削除されています。
  • Androidの追加コマンド群(端末とパーミッションにより利用可否が異なります):
    • device.statusdevice.infodevice.permissionsdevice.health
    • notifications.listnotifications.actions
    • photos.latest
    • contacts.searchcontacts.add
    • calendar.eventscalendar.add
    • motion.activitymotion.pedometer