Introduction
Jetpack Compose dispose d'un mécanisme interne appelé l'Arbre Sémantique — une structure sémantique de votre interface utilisateur que les services d'accessibilité, les outils de test UI et les agents IA d'automatisation utilisent pour comprendre ce qui est affiché à l'écran.
Avec une conception Sémantique appropriée, les agents IA peuvent comprendre les éléments UI non pas comme "couleur, position et taille" mais comme "ce que fait ce bouton, ce qui se passe quand on appuie, et dans quel état il se trouve actuellement."
Attributs Sémantiques clés
contentDescription
Essentiel pour les éléments UI dont la signification ne peut pas être déduite visuellement — comme les 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)."
role
Ajouter un role à l'interface personnalisée permet à l'IA de comprendre clairement le type d'interface.
Modifier.semantics {
role = Role.Button
}
Un simple Box(clickable) s'enregistre comme "quelque chose de cliquable." Avec un role, il devient un type spécifique : Bouton, Interrupteur, Case à cocher, Onglet, etc.
stateDescription
Communique l'état actuel à l'IA.
Modifier.semantics {
stateDescription =
if (subscribed) "Abonné"
else "Non abonné"
}
Au-delà de TalkBack, cela aide les agents IA à prendre des décisions basées sur l'état — comme "la lecture est en pause, donc appuyez sur le bouton play."
testTag
L'un des attributs les plus importants pour l'automatisation IA et les tests UI.
Modifier.testTag("login_button")
Assigner un identifiant unique permet à Compose UI Test, Appium, UIAutomator et les agents basés sur MCP de cibler les éléments de manière fiable.
Configuration pour l'intégration UIAutomator
Parce que Compose ne génère pas une hiérarchie de vues natives, UIAutomator ne peut pas référencer testTag par défaut. Ajoutez ceci à votre racine pour corriger cela :
Scaffold(
modifier = Modifier.semantics {
testTagsAsResourceId = true
}
)
Cela rend les valeurs testTag disponibles comme IDs de ressources dans UIAutomator.
En pratique : La conception la plus lisible pour l'IA
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 | Identifiant unique |
| contentDescription | Signification et objectif |
| role | Type d'interface |
| clickable | Actionnable |
Regrouper une interface complexe en une seule signification
Pour une interface composée de plusieurs éléments — icônes, texte, badges — utilisez clearAndSetSemantics pour la présenter comme une unité cohérente :
Modifier.clearAndSetSemantics {
contentDescription = "Ajouter l'article au panier"
role = Role.Button
}
L'IA reçoit uniquement la signification logique, ignorant la complexité visuelle et la structure d'imbrication.
Ce que la conception Sémantique permet
1. Automatisation qui survit aux changements d'interface
L'identification basée sur testTag ne dépend pas des coordonnées, de l'OCR ou du texte. Si la position ou l'apparence d'un bouton change mais que le tag reste le même, l'automatisation ne se cassera pas.
2. Analyse de la signification de l'écran via MCP
Récupérer l'Arbre Sémantique vous permet de représenter les informations d'écran comme des données structurées légères :
[
{"role": "Button", "label": "Se connecter", "enabled": true, "tag": "login_button"},
{"role": "TextField", "label": "Adresse e-mail"}
]
3. Moins de dépendance aux captures d'écran, moins de tokens
L'analyse d'image consomme beaucoup de tokens. L'Arbre Sémantique transmet les mêmes informations comme données texte ultraléger. Particulièrement précieux pour les sessions d'automatisation longues ou le parcours complet de l'écran où la consommation de contexte importe.
4. L'IA comprend l'écran comme une machine à états
Avec stateDescription, l'IA peut déterminer l'état actuel et prendre des décisions contextuelles — "la lecture est arrêtée, donc appuyer sur play."
5. Génération automatique de cas de test
À partir d'informations Sémantiques comme "le bouton de connexion existe → appuyer dessus → l'écran d'accueil apparaît," vous pouvez dériver des transitions d'état et les utiliser pour générer automatiquement des cas de test.
L'équivalent Android d'ARIA sur le Web
L'Arbre Sémantique Compose est à Android ce que HTML / ARIA / DOM est au développement web. Les agents IA comprennent votre application non pas à travers son "interface visuelle" mais à travers son "DOM sémantique."
La force de Compose est qu'il vous permet de concevoir "l'apparence" et la "signification" séparément. C'est l'essence de la conception Sémantique — et le fondement de l'intégration IA.
Résumé
| Attribut | Utilisation principale |
|---|---|
| testTag | Identification unique, automatisation |
| contentDescription | Communication de la signification |
| role | Déclaration du type d'interface |
| stateDescription | Communication de l'état actuel |
| testTagsAsResourceId | Intégration UIAutomator |
| clearAndSetSemantics | Structuration logique de l'interface complexe |
Si vous utilisez MCP, UIAutomator ou des agents IA, standardiser testTag et semantics dans vos composants est le fondement d'une automatisation fiable.