OpenClaw Androidアプリ構築ガイド:ソースからビルドする方法
開発を進める中で、デスクトップの強力なツールをモバイルデバイスと連携させたい場面は多いですよね。しかし、モバイル特有のネットワーク制限やセンサーへのアクセスを統合するのは、意外と手間がかかるものです。
OpenClaw を使えば、Android デバイスを一つの Node として扱い、Gateway 経由でコントロールできるようになります。今回はそのセットアップ方法と活用術について解説します。
注意: Android アプリはまだ一般公開されていません。ソースコードは OpenClaw リポジトリ の
apps/androidで公開されています。Java 17 と Android SDK を使用して、自分でビルドすることが可能です (./gradlew :app:assembleDebug)。ビルド手順については apps/android/README.md を参照してください。
サポートの概要
Section titled “サポートの概要”- 役割: コンパニオン Node アプリ(Android は Gateway をホストしません)。
- Gateway の要否: 必要です(macOS、Linux、または WSL2 上の Windows で実行してください)。
- インストール: Getting Started + Pairing。
- Gateway: Runbook + Configuration。
- プロトコル: Gateway protocol (nodes + control plane)。
システム制御
Section titled “システム制御”システム制御(launchd/systemd)は Gateway ホスト上で行います。詳細は Gateway を参照してください。
接続ランブック
Section titled “接続ランブック”Android node アプリ ⇄ (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 tailnet(詳細は後述)。
- または、手動での Gateway ホスト/ポート指定(フォールバック)。
- Gateway マシン上(または SSH 経由)で CLI (
openclaw) を実行できること。
1) Gateway を起動する
Section titled “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) ディスカバリの確認(任意)
Section titled “2) ディスカバリの確認(任意)”Gateway マシンから以下を実行します:
dns-sd -B _openclaw-gw._tcp local.デバッグに関する詳細はこちら:Bonjour。
ユニキャスト DNS-SD による Tailnet (ウィーン ⇄ ロンドン) ディスカバリ
Section titled “ユニキャスト DNS-SD による Tailnet (ウィーン ⇄ ロンドン) ディスカバリ”Android の NSD/mDNS ディスカバリはネットワークを越えることができません。Android Node と Gateway が異なるネットワークにあり、Tailscale で接続されている場合は、代わりに Wide-Area Bonjour / ユニキャスト DNS-SD を使用してください:
- Gateway ホストで DNS-SD ゾーン(例:
openclaw.internal.)をセットアップし、_openclaw-gw._tcpレコードを公開します。 - Tailscale の Split DNS を設定し、選択したドメインがその DNS サーバーを指すようにします。
詳細と CoreDNS の設定例はこちら:Bonjour。
3) Android から接続する
Section titled “3) Android から接続する”Android アプリでの操作:
- アプリは Foreground Service(常駐通知)を介して Gateway 接続を維持します。
- Connect タブを開きます。
- Setup Code または Manual モードを使用します。
- ディスカバリがブロックされている場合は、Advanced controls で手動のホスト/ポート(および必要に応じて TLS/トークン/パスワード)を使用してください。
最初のペアリングに成功すると、次回以降アプリ起動時に自動再接続されます:
- 手動エンドポイント(有効な場合)。
- または、最後に検出された Gateway(ベストエフォート)。
4) ペアリングを承認する (CLI)
Section titled “4) ペアリングを承認する (CLI)”Gateway マシンで以下を実行します:
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>ペアリングの詳細はこちら:Pairing。
5) Node の接続を確認する
Section titled “5) Node の接続を確認する”-
Node のステータス経由:
Terminal window openclaw nodes status -
Gateway 経由:
Terminal window openclaw gateway call node.list --params "{}"
6) Chat + 履歴
Section titled “6) Chat + 履歴”Android の Chat タブはセッション選択(デフォルトは main、その他既存のセッションも可)をサポートしています:
- 履歴:
chat.history - 送信:
chat.send - プッシュ更新(ベストエフォート):
chat.subscribe→event:"chat"
7) Canvas + カメラ
Section titled “7) Canvas + カメラ”Gateway Canvas Host (Web コンテンツにおすすめ)
Section titled “Gateway Canvas Host (Web コンテンツにおすすめ)”Node に、エージェントがディスク上で編集できる実際の HTML/CSS/JS を表示させたい場合は、Node を Gateway の Canvas ホストに向けます。
注意: Node は Gateway の HTTP サーバー(gateway.port と同じポート、デフォルトは 18789)から Canvas を読み込みます。
-
Gateway ホストに
~/.openclaw/workspace/canvas/index.htmlを作成します。 -
Node をその URL に移動させます(LAN 内):
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18789/__openclaw__/canvas/"}'Tailnet(任意): 両方のデバイスが Tailscale 上にある場合は、.local の代わりに MagicDNS 名または Tailnet 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 ヘルパーについては Camera node を参照してください。
8) Voice + Android コマンドサーフェスの拡張
Section titled “8) Voice + Android コマンドサーフェスの拡張”- Voice: Android は Voice タブでマイクのオン/オフを切り替えるフローを使用し、文字起こしと TTS 再生(設定時は ElevenLabs、フォールバックとしてシステム TTS)を行います。アプリがフォアグラウンドから外れると Voice は停止します。
- Voice のウェイクワードやトークモードの切り替え機能は、現在 Android の UX/ランタイムから削除されています。
- その他の Android コマンドファミリー(デバイスや権限によって利用可否が異なります):
device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchmotion.activity,motion.pedometer
困ったことがあれば、AI Setup Assistant に聞いてみてくださいね。
次のステップ
Section titled “次のステップ”OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。