Plug-in Android Gradle 9.2.0 (avril 2026)

Le plug-in Android Gradle 9.2 est une version mineure qui comprend de nombreuses nouvelles fonctionnalités et améliorations.

Compatibilité

Le niveau d'API maximal pris en charge par le plug-in Android Gradle 9.2 est le niveau d'API 37.0. Voici d'autres informations sur la compatibilité :

Version minimale Version par défaut Notes
Gradle 9.4.1 9.4.1 Pour en savoir plus, consultez Mettre à jour Gradle.
Build Tools SDK 36.0.0 36.0.0 Installez ou configurez SDK Build Tools.
NDK N/A 28.2.13676358 Installez ou configurez une autre version du NDK.
JDK 17 17 Pour en savoir plus, consultez Définir la version du JDK.

Rapports de couverture et de test unifiés

AGP 9.2.0-alpha07 introduit des tâches permettant de générer des tableaux de bord HTML qui regroupent les résultats des tests et la couverture de différents types de tests (unitaires et d'instrumentation), de modules et de variantes de compilation, offrant ainsi une vue d'ensemble complète dans un seul tableau de bord. Pour en savoir plus, consultez Générer des rapports unifiés sur la couverture de code et Afficher des rapports de test unifiés.

Modifications apportées à R8

Les modifications R8 suivantes sont incluses dans AGP 9.2.0.

Sémantique -keepattributes plus stricte pour conserver les annotations d'exécution invisibles

Les annotations invisibles au moment de l'exécution ne peuvent pas être lues au moment de l'exécution. D8 supprime donc inconditionnellement les annotations invisibles au moment de l'exécution, sans possibilité de modifier ce comportement.

Pour assurer la compatibilité avec ProGuard, R8 permet de générer des annotations invisibles au moment de l'exécution. Toutefois, lors de la compilation au format DEX, les annotations invisibles au moment de l'exécution ne doivent généralement jamais être conservées. Toutefois, il est courant d'inclure la règle pratique -keepattributes *Annotation* (directement ou indirectement à partir des règles de conservation du consommateur) pour que R8 conserve les annotations visibles au moment de l'exécution. Malheureusement, cela permet également de conserver les annotations invisibles au moment de l'exécution.

Pour atténuer ce problème et mieux correspondre au comportement de D8, les modèles -keepattributes avec des caractères génériques ne correspondent plus à RuntimeInvisibleAnnotations, RuntimeInvisibleParameterAnnotations et RuntimeInvisibleTypeAnnotations. Par conséquent, les annotations invisibles au moment de l'exécution ne seront conservées que si le nom de l'attribut est mentionné explicitement sans caractères génériques.

Aucune des règles suivantes ne conservera les annotations d'exécution invisibles :

-keepattributes *
-keepattributes *Annotation*
-keepattributes *Invisible*

Pour conserver les annotations invisibles au moment de l'exécution, utilisez la règle suivante :

-keepattributes RuntimeInvisibleAnnotations,
                RuntimeInvisibleParameterAnnotations,
                RuntimeInvisibleTypeAnnotations

Prise en charge des noms négatifs dans les règles relatives aux membres

Le langage de configuration a été étendu pour vous permettre de faire correspondre des modèles de noms de membres négatifs.

Par exemple, pour faire correspondre toutes les méthodes qui ne se terminent pas par "ForTesting", utilisez la règle suivante :

-keepclassmembers class com.example.MyClass {
  *** !*ForTesting(...);
}

Les modèles de noms de membres peuvent également être niés dans la condition préalable des règles -if. Si un modèle de nom de membre nié contient des caractères génériques, ces caractères génériques ne peuvent pas être référencés à l'aide d'une référence arrière dans la règle de conséquence -if.

Problèmes résolus

Plug-in Android Gradle 9.2.1

Problèmes résolus
Plug-in Android Gradle
java.lang.ClassNotFoundException : classe "com.android.tools.r8.RecordTag" introuvable après la mise à niveau de Gradle vers la version 9.2.0

Plug-in Android Gradle 9.2.0

Problèmes résolus
Plug-in Android Gradle
Avertir les utilisateurs s'ils ont commonTest, mais qu'ils oublient withHostTestBuilder
[fused lib - public] OkHttp includes sources
Impossible d'exécuter androidDeviceTest avec des espaces réservés de fichier manifeste dans la bibliothèque (AGP 9.0.0 avec le plug-in com.android.kotlin.multiplatform.library)
AGP doit avertir l'utilisateur si src/androidDeviceTest/java est utilisé avec Java désactivé
AGP 9.0 : pas d'équivalent androidComponents.onVariant pour applicationVariants.all.mergeAssetsProvider
Les fichiers `*.xml.flat` contiennent des chemins d'accès absolus
R8D8ThreadPoolBuildService non enregistré
Échec de JdkImageTransform avec JDK 26
Encodage automatique de minAgpVersion dans les métadonnées AAR dans AGP 10.0
Renommer l'APK à l'aide du nouveau DSL AGP
Erreur lors de l'accès (mais pas de l'évaluation) de bootClasspath IllegalStateException : targetCompatibility n'est pas encore finalisé
Le sourceset keepRules ne fonctionne pas pour les bibliothèques
Intégrer la déclaration de compatibilité CC dans AGP
Mise à jour de la dépendance du plug-in Kotlin Gradle vers la version 2.3.10
Autoriser un compileSdk plus élevé pour les tests que pour le principal
Lint
Faute de frappe dans le message
Fenêtre de contexte tronquée dans les rapports Lint SARIF en raison d'un pointeur de décalage bloqué dans `SarifReporter.kt`
Le client Lint Gradle ne comporte pas de fonctionnalité essentielle, ce qui le rend au mieux peu fiable.
Erreur Lint lorsque la réduction des ressources est désactivée
Lint AGP 9 signale WrongConstant lors de l'utilisation de constantes IntDef imbriquées
Erreur Lint lorsque la réduction des ressources est désactivée
Intégration de Lint
Échec d'Android Lint avec des vérifications Lint personnalisées compilées en bytecode Java 21
Les tâches Gradle de lint ignorent l'indicateur --quiet
Réducteur de code (R8)
Cibler Java 11 semble casser d8