Apprendre aux agents IA à comprendre votre interface : Guide pratique des Sémantiques Jetpack Compose
Introduction
Si vous voulez que les agents IA et les outils d'automatisation de tests comprennent précisément "ce que fait ce bouton" dans Jetpack Compose, la conception adéquate des Sémantiques est la clé.
Compose maintient un "Arbre Sémantique" interne — une structure sémantique utilisée par les services d'accessibilité, les frameworks de test d'interface et les outils d'automatisation IA comme Appium, UIAutomator et MCP. Considérez-le comme l'équivalent Compose d'ARIA et du DOM sur le web.
Attributs Sémantiques fondamentaux
contentDescription
L'attribut le plus fondamental pour donner du sens aux boutons avec icône uniquement.
IconButton(
onClick = onDelete,
modifier = Modifier.semantics {
contentDescription = "Supprimer"
}
) {
Icon(Icons.Default.Delete, contentDescription = null)
}
Les outils IA et d'accessibilité reconnaîtront ceci comme "bouton Supprimer, cliquable, rôle Bouton."
role
Déclare explicitement le type d'interface pour les composants personnalisés. Un simple Box(clickable) s'enregistre comme "quelque chose de cliquable", mais l'ajout d'un rôle en fait clairement un Bouton, Interrupteur, Case à cocher, Onglet, etc.
Modifier.semantics {
role = Role.Button
}
stateDescription
Communique l'état actuel de l'interface à l'IA.
Modifier.semantics {
stateDescription =
if (subscribed) "Abonné"
else "Non abonné"
}
testTag
L'identifiant le plus important pour MCP, Appium et les agents d'interface automatisés. Il permet une identification stable sans dépendre des coordonnées, de l'OCR ou des changements de texte.
Modifier.testTag("login_button")
Configuration de l'intégration UIAutomator
Étant donné que Compose ne crée pas de hiérarchie de vues natives, les valeurs testTag peuvent être invisibles pour UIAutomator. Ajoutez ceci à votre racine pour corriger cela :
Scaffold(
modifier = Modifier.semantics {
testTagsAsResourceId = true
}
)
Cela rend les valeurs testTag visibles comme IDs de ressources, permettant à UIAutomator de les récupérer directement.
Le meilleur pattern pour la compréhension IA
La combinaison de plusieurs attributs est la meilleure pratique :
Button(
onClick = login,
modifier = Modifier
.testTag("login_button")
.semantics {
contentDescription = "Se connecter"
role = Role.Button
}
) {
Text("Se connecter")
}
| Attribut | Ce que l'IA comprend |
|---|---|
| testTag | Identification unique |
| contentDescription | Signification |
| role | Type d'interface |
| clickable | Actionnable |
Regrouper une interface complexe en une seule signification
Quand vous avez des compositions complexes d'icônes, de texte et de badges qui doivent apparaître comme un seul bouton pour l'IA, utilisez clearAndSetSemantics :
Modifier.clearAndSetSemantics {
contentDescription = "Ajouter l'article au panier"
role = Role.Button
}
Cela vous permet de ne passer que la signification à l'IA, en ignorant l'imbrication interne et la structure des icônes.
Ce que la conception des Sémantiques permet
Automatisation stable
Avec testTag, vous pouvez automatiser les interactions de manière fiable sans coordonnées ni OCR. Si le testTag reste le même après une refonte de l'interface, votre automatisation ne se cassera pas. Cela gère également les applications multilingues proprement.
Réduction des tokens
Les approches uniquement basées sur des captures d'écran nécessitent une analyse d'image, qui consomme beaucoup de tokens. Un Arbre Sémantique est des données structurées — beaucoup plus légères à traiter.
[
{"type": "Button", "label": "Se connecter"},
{"type": "TextField", "label": "Email"},
{"type": "TextField", "label": "Mot de passe"}
]
C'est particulièrement efficace pour les longues sessions d'automatisation et l'analyse d'écran à grande échelle, et aide à prévenir le débordement de contexte.
Conscience d'état IA
stateDescription permet à l'IA de déduire l'état actuel de l'écran, permettant des décisions comme "la lecture est en pause, donc appuyer sur le bouton play." Cela permet de modéliser votre écran comme une machine à états.
Analyse structurée via MCP
En récupérant l'Arbre Sémantique via un Serveur MCP et en le transmettant à un agent LLM, vous pouvez activer la compréhension sémantique complète de l'écran, la prédiction des prochaines actions et l'analyse des transitions d'état.
Compose UI → Arbre Sémantique → Serveur MCP → Agent LLM
Référence des attributs Sémantiques
| Attribut | Objectif |
|---|---|
| testTag | Identification unique |
| contentDescription | Signification |
| role | Type d'interface |
| stateDescription | État |
| collectionInfo | Structure de liste |
| traversalIndex | Ordre de navigation |
| customActions | Actions IA personnalisées |
Résumé
Compose vous permet de séparer "l'apparence" de "la signification". L'essence de la conception des Sémantiques est la capacité à concevoir indépendamment l'interface orientée humain et la structure sémantique orientée IA.
Si vous utilisez des agents IA, MCP, UIAutomator ou des tests E2E automatisés, standardiser le pattern suivant dans vos composants offre un excellent retour sur investissement :
Modifier
.testTag(...)
.semantics {
contentDescription = ...
role = ...
}
La couleur, la position et la taille importent moins que "à quoi sert ce bouton, que se passe-t-il quand on appuie, et quel est son état actuel" — transmettre cela via les Sémantiques est le cœur d'une conception d'interface conviviale pour l'IA.