Android-App (Node)
Hinweis: Die Android-App wurde noch nicht öffentlich veröffentlicht. Der Quellcode ist im OpenClaw-Repository unter
apps/androidverfügbar. Du kannst sie selbst mit Java 17 und dem Android SDK bauen (./gradlew :app:assembleDebug). Build-Anleitung: apps/android/README.md.
Support-Übersicht
- Rolle: Companion-Node-App (Android hostet das Gateway nicht).
- Gateway erforderlich: ja (betreibe es auf macOS, Linux oder Windows via WSL2).
- Installation: Erste Schritte + 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 (Standard ws://<host>:18789) und nutzt Device-Pairing (role: node).
Voraussetzungen
- Du kannst das Gateway auf dem „Master”-Gerät 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)
- Du kannst die CLI (
openclaw) auf dem Gateway-Gerät ausführen (oder via SSH).
1) Gateway starten
openclaw gateway --port 18789 --verbose
Stelle in den Logs sicher, dass du so etwas siehst:
listening on ws://0.0.0.0:18789
Für reine Tailnet-Setups (empfohlen für Wien ⇄ London), binde das Gateway an die Tailnet-IP:
- Setze
gateway.bind: "tailnet"in~/.openclaw/openclaw.jsonauf dem Gateway-Host. - Starte das Gateway / die macOS-Menüleisten-App neu.
2) Discovery prüfen (optional)
Vom Gateway-Gerät aus:
dns-sd -B _openclaw-gw._tcp local.
Weitere Debugging-Hinweise: Bonjour.
Tailnet-Discovery (Wien ⇄ London) via Unicast DNS-SD
Android NSD/mDNS-Discovery funktioniert nicht netzwerkübergreifend. Wenn dein Android-Node und das Gateway in verschiedenen Netzwerken sind, aber über Tailscale verbunden, nutze stattdessen Wide-Area Bonjour / Unicast DNS-SD:
- Richte eine DNS-SD-Zone (z. B.
openclaw.internal.) auf dem Gateway-Host ein und veröffentliche_openclaw-gw._tcp-Records. - Konfiguriere Tailscale Split DNS für deine gewählte Domain, die auf diesen DNS-Server zeigt.
Details und CoreDNS-Beispielkonfiguration: Bonjour.
3) Von Android verbinden
In der Android-App:
- Die App hält ihre Gateway-Verbindung über einen Vordergrund-Service (permanente Benachrichtigung) aufrecht.
- Öffne den Connect-Tab.
- Verwende den Setup Code oder den Manual-Modus.
- Falls die Discovery blockiert ist, verwende manuellen Host/Port (und TLS/Token/Passwort falls nötig) unter Erweiterte Einstellungen.
Nach dem ersten erfolgreichen Pairing verbindet sich Android beim Start automatisch wieder:
- Manueller Endpunkt (falls aktiviert), ansonsten
- Das zuletzt entdeckte Gateway (Best-Effort).
4) Pairing genehmigen (CLI)
Auf dem Gateway-Gerät:
openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>
Pairing-Details: Pairing.
5) Prüfen, ob der Node verbunden ist
-
Via Node-Status:
openclaw nodes status -
Via Gateway:
openclaw gateway call node.list --params "{}"
6) Chat + Verlauf
Der Android-Chat-Tab unterstützt Sitzungsauswahl (Standard main, plus weitere vorhandene Sitzungen):
- Verlauf:
chat.history - 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, richte den Node auf den Gateway Canvas Host.
Hinweis: Nodes laden Canvas vom Gateway HTTP-Server (gleicher Port wie gateway.port, Standard 18789).
-
Erstelle
~/.openclaw/workspace/canvas/index.htmlauf dem Gateway-Host. -
Navigiere den Node dorthin (LAN):
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18789/__openclaw__/canvas/"}'
Tailnet (optional): Wenn beide Geräte im Tailscale sind, verwende einen MagicDNS-Namen oder die Tailnet-IP statt .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(verwende{"url":""}oder{"url":"/"}um zum Standard-Scaffold zurückzukehren).canvas.snapshotgibt{ format, base64 }zurück (Standardformat="jpeg").- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(canvas.a2ui.pushJSONLLegacy-Alias)
Kamera-Befehle (nur im Vordergrund; berechtigungsgesteuert):
camera.snap(jpg)camera.clip(mp4)
Siehe Kamera-Node für Parameter und CLI-Helfer.
8) Voice + erweiterte Android-Befehlsoberfläche
- Voice: Android nutzt einen einfachen Mikrofon-An/Aus-Flow im Voice-Tab mit Transkript-Erfassung und TTS-Wiedergabe (ElevenLabs wenn konfiguriert, System-TTS als Fallback). Voice stoppt, wenn die App den Vordergrund verlässt.
- Voice Wake/Talk-Mode-Toggles sind derzeit aus der Android-UX/Runtime entfernt.
- Weitere Android-Befehlsfamilien (Verfügbarkeit hängt vom Gerät + Berechtigungen ab):
device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addmotion.activity,motion.pedometer