Application Android (nœud)
Remarque : l’application Android n’a pas encore été publiée publiquement. Le code source est disponible dans le dépôt OpenClaw sousapps/android. Vous pouvez la compiler vous-même avec Java 17 et le SDK Android (./gradlew :app:assemblePlayDebug). Voir apps/android/README.md pour les instructions de build.
Instantané de prise en charge
- Rôle : application compagnon de nœud (Android n’héberge pas la Gateway).
- Gateway requise : oui (exécutez-la sur macOS, Linux ou Windows via WSL2).
- Installation : Getting Started + Pairing.
- Gateway : Runbook + Configuration.
- Protocoles : Gateway protocol (nœuds + plan de contrôle).
Contrôle du système
Le contrôle du système (launchd/systemd) se trouve sur l’hôte Gateway. Voir Gateway.Guide de connexion
Application de nœud Android ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway Android se connecte directement au WebSocket Gateway et utilise le pairing d’appareil (role: node).
Pour les hôtes Tailscale ou publics, Android exige un point de terminaison sécurisé :
- Recommandé : Tailscale Serve / Funnel avec
https://<magicdns>/wss://<magicdns> - Également pris en charge : toute autre URL Gateway
wss://avec un vrai point de terminaison TLS - Le
ws://en clair reste pris en charge sur les adresses LAN privées / hôtes.local, ainsi quelocalhost,127.0.0.1et le pont d’émulateur Android (10.0.2.2)
Prérequis
- Vous pouvez exécuter la Gateway sur la machine « maître ».
- L’appareil/l’émulateur Android peut atteindre le WebSocket gateway :
- même LAN avec mDNS/NSD, ou
- même tailnet Tailscale en utilisant Wide-Area Bonjour / unicast DNS-SD (voir ci-dessous), ou
- hôte/port de gateway manuel (solution de repli)
- Le pairing mobile tailnet/public n’utilise pas de points de terminaison
ws://bruts sur IP tailnet. Utilisez plutôt Tailscale Serve ou une autre URLwss://. - Vous pouvez exécuter la CLI (
openclaw) sur la machine gateway (ou via SSH).
1) Démarrer la Gateway
listening on ws://0.0.0.0:18789
wss:// / https://. Une configuration simple avec gateway.bind: "tailnet" ne suffit pas pour un premier pairing Android à distance, sauf si vous terminez aussi TLS séparément.
2) Vérifier la découverte (facultatif)
Depuis la machine gateway :local. plus le domaine étendu configuré en une seule passe et utilise le
point de terminaison de service résolu au lieu de simples indices TXT.
Découverte tailnet (Vienne ⇄ Londres) via DNS-SD en monodiffusion
La découverte Android NSD/mDNS ne traverse pas les réseaux. Si votre nœud Android et la gateway sont sur des réseaux différents mais connectés via Tailscale, utilisez Wide-Area Bonjour / unicast DNS-SD à la place. La découverte seule ne suffit pas pour le pairing Android via tailnet/public. La route découverte exige toujours un point de terminaison sécurisé (wss:// ou Tailscale Serve) :
- Configurez une zone DNS-SD (par exemple
openclaw.internal.) sur l’hôte gateway et publiez les enregistrements_openclaw-gw._tcp. - Configurez le DNS split Tailscale pour le domaine choisi en pointant vers ce serveur DNS.
3) Se connecter depuis Android
Dans l’application Android :- L’application maintient sa connexion gateway active via un service de premier plan (notification persistante).
- Ouvrez l’onglet Connect.
- Utilisez le mode Setup Code ou Manual.
- Si la découverte est bloquée, utilisez l’hôte/port manuel dans Advanced controls. Pour les hôtes LAN privés,
ws://fonctionne toujours. Pour les hôtes Tailscale/publics, activez TLS et utilisez un point de terminaisonwss:/// Tailscale Serve.
- point de terminaison manuel (si activé), sinon
- dernière gateway découverte (au mieux).
4) Approuver le pairing (CLI)
Sur la machine gateway :5) Vérifier que le nœud est connecté
-
Via le statut des nœuds :
-
Via Gateway :
6) Chat + historique
L’onglet Chat Android prend en charge la sélection de session (par défautmain, plus d’autres sessions existantes) :
- Historique :
chat.history(normalisé pour l’affichage ; les balises de directives inline sont supprimées du texte visible, les charges utiles XML d’appels d’outils en texte brut (y compris<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>, et les blocs d’appels d’outils tronqués) ainsi que les jetons de contrôle de modèle ASCII/full-width divulgués sont supprimés, les lignes assistant contenant uniquement un jeton silencieux pur commeNO_REPLY/no_replyexact sont omises, et les lignes surdimensionnées peuvent être remplacées par des placeholders) - Envoi :
chat.send - Mises à jour push (au mieux) :
chat.subscribe→event:"chat"
7) Canvas + caméra
Hôte Gateway Canvas (recommandé pour le contenu web)
Si vous voulez que le nœud affiche un vrai contenu HTML/CSS/JS que l’agent peut modifier sur disque, faites pointer le nœud vers l’hôte canvas de la Gateway. Remarque : les nœuds chargent canvas depuis le serveur HTTP Gateway (même port quegateway.port, par défaut 18789).
-
Créez
~/.openclaw/workspace/canvas/index.htmlsur l’hôte gateway. - Naviguez vers celui-ci depuis le nœud (LAN) :
.local, par exemple http://<gateway-magicdns>:18789/__openclaw__/canvas/.
Ce serveur injecte un client de rechargement en direct dans le HTML et recharge lors des modifications de fichier.
L’hôte A2UI se trouve à http://<gateway-host>:18789/__openclaw__/a2ui/.
Commandes Canvas (premier plan uniquement) :
canvas.eval,canvas.snapshot,canvas.navigate(utilisez{"url":""}ou{"url":"/"}pour revenir au scaffold par défaut).canvas.snapshotrenvoie{ format, base64 }(par défautformat="jpeg").- A2UI :
canvas.a2ui.push,canvas.a2ui.reset(ancien aliascanvas.a2ui.pushJSONL)
camera.snap(jpg)camera.clip(mp4)
8) Voice + surface de commandes Android étendue
- Voice : Android utilise un flux unique micro activé/désactivé dans l’onglet Voice avec capture de transcription et lecture
talk.speak. Le TTS système local n’est utilisé que lorsquetalk.speakn’est pas disponible. Voice s’arrête lorsque l’application quitte le premier plan. - Les bascules de réveil vocal / mode Talk sont actuellement supprimées de l’UX/runtime Android.
- Familles de commandes Android supplémentaires (la disponibilité dépend de l’appareil et des autorisations) :
device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actions(voir Notification forwarding ci-dessous)photos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
Points d’entrée assistant
Android prend en charge le lancement d’OpenClaw à partir du déclencheur d’assistant système (Google Assistant). Lorsqu’il est configuré, maintenir le bouton principal enfoncé ou dire « Hey Google, ask OpenClaw… » ouvre l’application et transmet le prompt au composeur de chat. Cela utilise les métadonnées Android App Actions déclarées dans le manifeste de l’application. Aucune configuration supplémentaire n’est nécessaire côté gateway — l’intention assistant est gérée entièrement par l’application Android et transmise comme un message de chat normal.La disponibilité d’App Actions dépend de l’appareil, de la version de Google Play Services,
et du fait que l’utilisateur a défini OpenClaw comme application d’assistant par défaut.
Notification forwarding
Android peut transférer les notifications de l’appareil vers la gateway en tant qu’événements. Plusieurs contrôles permettent de limiter quelles notifications sont transférées et à quel moment.| Clé | Type | Description |
|---|---|---|
notifications.allowPackages | string[] | Transférer uniquement les notifications provenant de ces noms de package. Si défini, tous les autres packages sont ignorés. |
notifications.denyPackages | string[] | Ne jamais transférer les notifications provenant de ces noms de package. Appliqué après allowPackages. |
notifications.quietHours.start | string (HH:mm) | Début de la fenêtre d’heures silencieuses (heure locale de l’appareil). Les notifications sont supprimées pendant cette fenêtre. |
notifications.quietHours.end | string (HH:mm) | Fin de la fenêtre d’heures silencieuses. |
notifications.rateLimit | number | Nombre maximal de notifications transférées par package et par minute. Les notifications excédentaires sont ignorées. |
Le transfert de notifications nécessite l’autorisation Android Notification Listener. L’application la demande pendant la configuration.