Die offizielle Android-App ist auf Google Play verfügbar. Sie ist ein Begleitknoten und erfordert einen laufenden OpenClaw Gateway. Der Quellcode ist ebenfalls im OpenClaw-Repository unter
apps/android verfügbar; Build-Anweisungen finden Sie unter apps/android/README.md.Support-Momentaufnahme
- Rolle: Begleitknoten-App (Android hostet den Gateway nicht).
- Gateway erforderlich: ja (führen Sie ihn unter macOS, Linux oder Windows über WSL2 aus).
- Installation: Google Play für die App, Erste Schritte für den Gateway, dann Kopplung.
- Gateway: Runbook + Konfiguration.
- Protokolle: Gateway-Protokoll (Knoten + Steuerungsebene).
Systemsteuerung
Die Systemsteuerung (launchd/systemd) befindet sich auf dem Gateway-Host. Siehe Gateway.Verbindungs-Runbook
Android-Knoten-App ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway Android verbindet sich direkt mit dem Gateway-WebSocket und verwendet die Gerätekopplung (role: node).
Für Tailscale oder öffentliche Hosts benötigt Android einen sicheren Endpunkt:
- Bevorzugt: Tailscale Serve / Funnel mit
https://<magicdns>/wss://<magicdns> - Ebenfalls unterstützt: jede andere
wss://-Gateway-URL mit einem echten TLS-Endpunkt - Klartext-
ws://wird weiterhin für private LAN-Adressen /.local-Hosts sowielocalhost,127.0.0.1und die Android-Emulator-Bridge (10.0.2.2) unterstützt
Voraussetzungen
- Sie können den Gateway auf dem „Master“-Computer ausführen.
- Android-Gerät/-Emulator kann den Gateway-WebSocket erreichen:
- Gleiches LAN mit mDNS/NSD, oder
- Gleiches Tailscale-Tailnet mit Wide-Area Bonjour / Unicast-DNS-SD (siehe unten), oder
- Manueller Gateway-Host/-Port (Fallback)
- Tailnet-/öffentliche mobile Kopplung verwendet keine rohen Tailnet-IP-
ws://-Endpunkte. Verwenden Sie stattdessen Tailscale Serve oder eine anderewss://-URL. - Sie können die CLI (
openclaw) auf dem Gateway-Computer ausführen (oder per SSH).
1) Gateway starten
listening on ws://0.0.0.0:18789
wss://- / https://-Endpunkt. Eine einfache gateway.bind: "tailnet"-Einrichtung reicht für die erstmalige Remote-Android-Kopplung nicht aus, es sei denn, Sie terminieren TLS zusätzlich separat.
2) Discovery überprüfen (optional)
Vom Gateway-Computer aus:local. plus die konfigurierte Wide-Area-Domain in einem Durchlauf und verwendet den aufgelösten
Dienstendpunkt statt reiner TXT-Hinweise.
Tailnet-Discovery (Wien ⇄ London) über Unicast-DNS-SD
Android-NSD-/mDNS-Discovery überschreitet keine Netzwerke. Wenn Ihr Android-Knoten und der Gateway in unterschiedlichen Netzwerken sind, aber über Tailscale verbunden sind, verwenden Sie stattdessen Wide-Area Bonjour / Unicast-DNS-SD. Discovery allein reicht für Tailnet-/öffentliche Android-Kopplung nicht aus. Die erkannte Route benötigt weiterhin einen sicheren Endpunkt (wss:// oder Tailscale Serve):
- Richten Sie eine DNS-SD-Zone (Beispiel
openclaw.internal.) auf dem Gateway-Host ein und veröffentlichen Sie_openclaw-gw._tcp-Einträge. - Konfigurieren Sie Tailscale Split-DNS für Ihre gewählte Domain, die auf diesen DNS-Server zeigt.
3) Von Android verbinden
In der Android-App:- Die App hält ihre Gateway-Verbindung über einen Vordergrunddienst (dauerhafte Benachrichtigung) aktiv.
- Öffnen Sie den Tab Connect.
- Verwenden Sie den Modus Setup Code oder Manual.
- Wenn Discovery blockiert ist, verwenden Sie manuellen Host/Port in Advanced controls. Für private LAN-Hosts funktioniert
ws://weiterhin. Für Tailscale-/öffentliche Hosts aktivieren Sie TLS und verwenden Sie einenwss://- / Tailscale-Serve-Endpunkt.
- Manueller Endpunkt (falls aktiviert), andernfalls
- Der zuletzt erkannte Gateway (Best-Effort).
Presence-Alive-Beacons
Nachdem die authentifizierte Knotensitzung verbunden ist und wenn die App in den Hintergrund wechselt, während der Vordergrunddienst weiterhin verbunden ist, ruft Androidnode.event mit
event: "node.presence.alive" auf. Der Gateway speichert dies erst dann als lastSeenAtMs/lastSeenReason in den
gekoppelten Knoten-/Gerätemetadaten, nachdem die authentifizierte Knotengeräteidentität bekannt ist.
Die App zählt den Beacon nur dann als erfolgreich gespeichert, wenn die Gateway-Antwort
handled: true enthält. Ältere Gateways können node.event mit { "ok": true } bestätigen; diese Antwort ist
kompatibel, zählt jedoch nicht als dauerhaftes Last-Seen-Update.
4) Kopplung genehmigen (CLI)
Auf dem Gateway-Computer:role: node-Kopplungen ohne
angeforderte Scopes. Operator-/Browser-Kopplung sowie jede Rollen-, Scope-, Metadaten- oder
Public-Key-Änderung erfordern weiterhin manuelle Genehmigung.
5) Überprüfen, ob der Knoten verbunden ist
-
Über Knotenstatus:
-
Über Gateway:
6) Chat + Verlauf
Der Android-Chat-Tab unterstützt Sitzungsauswahl (Standardmain, plus andere vorhandene Sitzungen):
- Verlauf:
chat.history(anzeige-normalisiert; Inline-Direktiv-Tags werden aus sichtbarem Text entfernt, Plain-Text-XML-Nutzdaten von Tool-Aufrufen (einschließlich<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>und gekürzten Tool-Aufrufblöcken) sowie geleakte ASCII-/Vollbreiten-Modellsteuerungstoken werden entfernt, reine Silent-Token-Assistentenzeilen wie exaktNO_REPLY/no_replywerden ausgelassen, und übergroße Zeilen können durch Platzhalter ersetzt werden) - Senden:
chat.send - Push-Updates (Best-Effort):
chat.subscribe→event:"chat"
7) Canvas + Kamera
Gateway Canvas Host (für Webinhalte empfohlen)
Wenn der Knoten echtes HTML/CSS/JS anzeigen soll, das der Agent auf der Festplatte bearbeiten kann, richten Sie den Knoten auf den Gateway-Canvas-Host.Knoten laden Canvas vom Gateway-HTTP-Server (derselbe Port wie
gateway.port, Standard 18789).-
Erstellen Sie
~/.openclaw/workspace/canvas/index.htmlauf dem Gateway-Host. - Navigieren Sie den Knoten dorthin (LAN):
.local einen MagicDNS-Namen oder eine Tailnet-IP, z. B. http://<gateway-magicdns>:18789/__openclaw__/canvas/.
Dieser Server injiziert einen Live-Reload-Client in HTML und lädt bei Dateiänderungen neu.
Der Gateway stellt auch /__openclaw__/a2ui/ bereit, aber die Android-App behandelt Remote-A2UI-Seiten als reines Rendering. Aktionsfähige A2UI-Befehle verwenden die gebündelte app-eigene A2UI-Seite, bevor Nachrichten angewendet werden.
Canvas-Befehle (nur im Vordergrund):
canvas.eval,canvas.snapshot,canvas.navigate(verwenden Sie{"url":""}oder{"url":"/"}, um zum Standardgerüst zurückzukehren).canvas.snapshotgibt{ format, base64 }zurück (Standardformat="jpeg").- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(canvas.a2ui.pushJSONLLegacy-Alias). Diese Befehle verwenden die gebündelte app-eigene A2UI-Seite für aktionsfähiges Rendering.
camera.snap(jpg)camera.clip(mp4)
8) Sprache + erweiterte Android-Befehlsoberfläche
- Voice-Tab: Android hat zwei explizite Aufnahmemodi. Mic ist eine manuelle Voice-Tab-Sitzung, die jede Pause als Chat-Turn sendet und stoppt, wenn die App den Vordergrund verlässt oder der Benutzer den Voice-Tab verlässt. Talk ist der kontinuierliche Talk Mode und hört weiter zu, bis er ausgeschaltet wird oder der Knoten die Verbindung trennt.
- Talk Mode stuft den vorhandenen Vordergrunddienst vor Beginn der Aufnahme von
connectedDeviceaufconnectedDevice|microphonehoch und stuft ihn wieder herab, wenn Talk Mode stoppt. Der Knotendienst deklariertFOREGROUND_SERVICE_CONNECTED_DEVICEmitCHANGE_NETWORK_STATE; Android 14+ erfordert außerdem die DeklarationFOREGROUND_SERVICE_MICROPHONE, die LaufzeitberechtigungRECORD_AUDIOund den Mikrofon-Diensttyp zur Laufzeit. - Standardmäßig verwendet Android Talk native Spracherkennung, Gateway-Chat und
talk.speaküber den konfigurierten Gateway-Talk-Provider. Lokales System-TTS wird nur verwendet, wenntalk.speaknicht verfügbar ist. - Android Talk verwendet den Echtzeit-Gateway-Relay nur, wenn
talk.realtime.moderealtimeist undtalk.realtime.transportgateway-relayist. - Voice Wake bleibt in der Android-UX/-Laufzeit deaktiviert.
- Zusätzliche Android-Befehlsfamilien (Verfügbarkeit hängt von Gerät, Berechtigungen und Benutzereinstellungen ab):
device.status,device.info,device.permissions,device.healthdevice.appsnur, wenn Settings > Phone Capabilities > Installed Apps aktiviert ist; es listet standardmäßig launcher-sichtbare Apps auf.notifications.list,notifications.actions(siehe Benachrichtigungsweiterleitung unten)photos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
Assistenten-Einstiegspunkte
Android unterstützt das Starten von OpenClaw über den Systemassistenten-Trigger (Google Assistant). Wenn konfiguriert, öffnet das Halten der Home-Taste oder das Sagen von „Hey Google, frag OpenClaw…“ die App und übergibt den Prompt an den Chat-Composer. Dies verwendet Android-App Actions-Metadaten, die im App-Manifest deklariert sind. Auf Gateway-Seite ist keine zusätzliche Konfiguration erforderlich — der Assistenten-Intent wird vollständig von der Android-App verarbeitet und als normale Chat-Nachricht weitergeleitet.Die Verfügbarkeit von App Actions hängt vom Gerät, der Version der Google Play Services
und davon ab, ob der Benutzer OpenClaw als Standard-Assistenten-App festgelegt hat.
Benachrichtigungsweiterleitung
Android kann Gerätebenachrichtigungen als Ereignisse an den Gateway weiterleiten. Mehrere Steuerelemente erlauben es Ihnen, festzulegen, welche Benachrichtigungen weitergeleitet werden und wann.| Schlüssel | Typ | Beschreibung |
|---|---|---|
notifications.allowPackages | string[] | Nur Benachrichtigungen von diesen Paketnamen weiterleiten. Wenn gesetzt, werden alle anderen Pakete ignoriert. |
notifications.denyPackages | string[] | Benachrichtigungen von diesen Paketnamen niemals weiterleiten. Wird nach allowPackages angewendet. |
notifications.quietHours.start | string (HH:mm) | Beginn des Ruhezeitenfensters (lokale Gerätezeit). Benachrichtigungen werden während dieses Fensters unterdrückt. |
notifications.quietHours.end | string (HH:mm) | Ende des Ruhezeitenfensters. |
notifications.rateLimit | number | Maximale weitergeleitete Benachrichtigungen pro Paket pro Minute. Überschüssige Benachrichtigungen werden verworfen. |
Die Weiterleitung von Benachrichtigungen erfordert die Android-Berechtigung für den Notification Listener. Die App fordert Sie während der Einrichtung dazu auf.