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 compatible avec 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 de couverture de code unifiés et Afficher des rapports de test unifiés.

Modifications apportées à R8

Les modifications suivantes ont été apportées à R8 dans AGP 9.2.0.

Sémantique -keepattributes plus stricte pour conserver les annotations invisibles au moment de l'exécution

Les annotations invisibles au moment de l'exécution ne peuvent pas être lues à ce moment-là. 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. Cependant, 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 désormais les annotations invisibles au moment de l'exécution :

-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 de membre

Le langage de configuration a été étendu afin que vous puissiez désormais 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 précondition 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 dans la règle consécutive -if.

Problèmes résolus

Plug-in Android Gradle 9.2.1

Problèmes résolus
Plug-in Android Gradle
java.lang.ClassNotFoundException: Didn't find class "com.android.tools.r8.RecordTag" after upgrading gradle to 9.2.0

Plug-in Android Gradle 9.2.0

Problèmes résolus
Plug-in Android Gradle
Warn users if they have commonTest but forget withHostTestBuilder
[fused lib - public] OkHttp includes sources
Cannot run androidDeviceTest with manifest placeholders in library (AGP 9.0.0 with com.android.kotlin.multiplatform.library plugin)
AGP should warn if user has src/androidDeviceTest/java with java disabled
AGP 9.0 No androidComponents.onVariant equivalent for applicationVariants.all.mergeAssetsProvider
`*.xml.flat` files contain absolute file paths
R8D8ThreadPoolBuildService not registered
JdkImageTransform failure with JDK 26
Automatically encode minAgpVersion in the AAR metadata in AGP 10.0
Renaming APK using new AGP DSL
Error when accessing (but not evaluating) bootClasspath IllegalStateException: targetCompatibility is not yet finalized
keepRules sourceset not working for libraries
Embed CC compatibility declaration in AGP
Update Kotlin Gradle plugin dependency to 2.3.10
Allow higher compileSdk for tests than main
Lint
Lint typo in message
Truncated context window in Lint SARIF reports due to stuck offset pointer in `SarifReporter.kt`
Lint Gradle client is missing a critical feature making it unreliable at best
Lint error when resource shrinking is disabled
AGP 9 Lint reports WrongConstant when using nested IntDef constants
Lint error when resource shrinking is disabled
Intégration de Lint
Android Lint fails with custom lint checks compiled to Java 21 bytecode
Lint Gradle tasks ignore --quiet flag
Réducteur de code (R8)
Targeting Java 11 seems to break d8