Android-App (Node)
Hinweis: Die Android-App wurde noch nicht öffentlich veröffentlicht. Der Quellcode ist im OpenClaw-Repository unterapps/androidverfügbar. Sie können sie selbst mit Java 17 und dem Android SDK bauen (./gradlew :app:assemblePlayDebug). Siehe apps/android/README.md für Build-Anweisungen.
Support-Überblick
- Rolle: begleitende Node-App (Android hostet das Gateway nicht).
- Gateway erforderlich: ja (führen Sie es auf macOS, Linux oder Windows über WSL2 aus).
- Installation: Getting Started + Pairing.
- Gateway: Runbook + Konfiguration.
- Protokolle: Gateway-Protokoll (Nodes + Control Plane).
Systemsteuerung
Die Systemsteuerung (launchd/systemd) befindet sich auf dem Gateway-Host. Siehe Gateway.Verbindungs-Runbook
Android-Node-App ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway Android verbindet sich direkt mit dem Gateway-WebSocket und verwendet Device-Pairing (role: node).
Für Tailscale oder öffentliche Hosts erfordert 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 auf privaten LAN-Adressen /.local-Hosts sowie auflocalhost,127.0.0.1und der Android-Emulator-Bridge (10.0.2.2) unterstützt
Voraussetzungen
- Sie können das Gateway auf dem „Master“-Rechner 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)
- Mobiles Pairing über Tailnet/öffentlich verwendet keine rohen Tailnet-IP-Endpunkte mit
ws://. Verwenden Sie stattdessen Tailscale Serve oder eine anderewss://-URL. - Sie können die CLI (
openclaw) auf dem Gateway-Rechner ausführen (oder per SSH).
1) Das Gateway starten
listening on ws://0.0.0.0:18789
wss:// / https://. Ein einfaches Setup mit gateway.bind: "tailnet" reicht für das erste entfernte Android-Pairing nicht aus, sofern Sie TLS nicht zusätzlich separat terminieren.
2) Discovery verifizieren (optional)
Vom Gateway-Rechner aus:local. plus die konfigurierte Wide-Area-Domain in einem Durchgang und verwendet den aufgelösten
Service-Endpunkt statt nur TXT-Hinweise.
Tailnet-Discovery (Wien ⇄ London) über unicast DNS-SD
Android-NSD-/mDNS-Discovery funktioniert nicht netzwerkübergreifend. Wenn sich Ihr Android-Node und das Gateway in unterschiedlichen Netzwerken befinden, aber über Tailscale verbunden sind, verwenden Sie Wide-Area Bonjour / unicast DNS-SD. Discovery allein reicht für Android-Pairing über Tailnet/öffentlich nicht aus. Die entdeckte 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 aus verbinden
In der Android-App:- Die App hält ihre Gateway-Verbindung über einen Foreground Service (persistente Benachrichtigung) aktiv.
- Öffnen Sie den Tab Connect.
- Verwenden Sie Setup Code oder den Modus Manual.
- Wenn Discovery blockiert ist, verwenden Sie im Bereich Advanced controls manuellen Host/Port. Für private LAN-Hosts funktioniert weiterhin
ws://. Für Tailscale-/öffentliche Hosts aktivieren Sie TLS und verwenden Sie einen Endpunktwss:/// Tailscale Serve.
- manueller Endpunkt (falls aktiviert), andernfalls
- das zuletzt entdeckte Gateway (best effort).
4) Pairing genehmigen (CLI)
Auf dem Gateway-Rechner:5) Verifizieren, dass der Node verbunden ist
-
Über den Node-Status:
-
Über das Gateway:
6) Chat + Verlauf
Der Chat-Tab in Android unterstützt Sitzungsauswahl (standardmäßigmain sowie andere vorhandene Sitzungen):
- Verlauf:
chat.history(anzeigebereinigt normalisiert; Inline-Direktiven-Tags werden aus sichtbarem Text entfernt, Klartext-XML-Payloads für Tool-Aufrufe (einschließlich<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>und abgeschnittener Tool-Call-Blöcke) sowie geleakte ASCII-/vollbreite Modell-Control-Tokens werden entfernt, reine Assistant-Zeilen mit Silent-Token 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 (empfohlen für Web-Inhalte)
Wenn der Node echtes HTML/CSS/JS anzeigen soll, das der Agent auf der Festplatte bearbeiten kann, richten Sie den Node auf den Gateway-Canvas-Host. Hinweis: Nodes laden Canvas vom Gateway-HTTP-Server (derselbe Port wiegateway.port, standardmäßig 18789).
-
Erstellen Sie
~/.openclaw/workspace/canvas/index.htmlauf dem Gateway-Host. - Navigieren Sie den Node dorthin (LAN):
.local, 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 A2UI-Host befindet sich unter http://<gateway-host>:18789/__openclaw__/a2ui/.
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 (standardmäßigformat="jpeg").- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(Legacy-Aliascanvas.a2ui.pushJSONL)
camera.snap(jpg)camera.clip(mp4)
8) Sprache + erweiterte Android-Befehlsoberfläche
- Sprache: Android verwendet im Tab Voice einen einzigen Mikrofon-Ein/Aus-Ablauf mit Transkripterfassung und Wiedergabe über
talk.speak. Lokales System-TTS wird nur verwendet, wenntalk.speaknicht verfügbar ist. Sprache wird beendet, wenn die App den Vordergrund verlässt. - Umschalter für Voice Wake/Talk-Modus sind derzeit aus UX/Laufzeit von Android entfernt.
- Zusätzliche Android-Befehlsfamilien (Verfügbarkeit hängt von Gerät + Berechtigungen ab):
device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actions(siehe Benachrichtigungsweiterleitung unten)photos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
Einstiegspunkte für den Assistenten
Android unterstützt das Starten von OpenClaw über den Trigger des Systemassistenten (Google Assistant). Wenn konfiguriert, öffnet das Halten der Home-Taste oder „Hey Google, ask OpenClaw…“ die App und übergibt den Prompt an den Chat-Composer. Dies verwendet Android-Metadaten für App Actions, die im App-Manifest deklariert sind. Auf Gateway-Seite ist keine zusätzliche Konfiguration erforderlich — der Assistant-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 von Google Play Services
und davon ab, ob der Benutzer OpenClaw als Standard-Assistenten-App festgelegt hat.
Benachrichtigungsweiterleitung
Android kann Gerätebenachrichtigungen als Ereignisse an das Gateway weiterleiten. Mit mehreren Steuerelementen können Sie eingrenzen, 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 in diesem Fenster unterdrückt. |
notifications.quietHours.end | string (HH:mm) | Ende des Ruhezeitenfensters. |
notifications.rateLimit | number | Maximale Anzahl weitergeleiteter Benachrichtigungen pro Paket und Minute. Überschüssige Benachrichtigungen werden verworfen. |
Die Benachrichtigungsweiterleitung erfordert die Android-Berechtigung Notification Listener. Die App fordert diese während der Einrichtung an.