Cette page contient les notes de version des versions Preview du plug-in Android Gradle (AGP).
Plug-in Android Gradle 9.0
Le plug-in Android Gradle 9.0 est une nouvelle version majeure d'AGP qui apporte des modifications à l'API et au comportement.
Pour passer au plug-in Android Gradle 9.0.0-alpha05, utilisez l'assistant de mise à niveau du plug-in Android Gradle dans Android Studio Narwhal 4 Feature Drop | 2025.1.4.
L'assistant de mise à niveau AGP vous aide à préserver les comportements existants lors de la mise à niveau de votre projet, le cas échéant. Vous pouvez ainsi mettre à niveau votre projet pour utiliser AGP 9.0, même si vous n'êtes pas prêt à adopter toutes les nouvelles valeurs par défaut d'AGP 9.0.
Compatibilité
Le niveau d'API Android maximal compatible avec le plug-in Android Gradle 9.0.0-alpha05 est le niveau d'API 36.
Le plug-in Android Gradle 9.0.0-alpha05 nécessite Gradle 9.0.0.
Version minimale | Version par défaut | Notes | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | Pour en savoir plus, consultez Mettre à jour Gradle. |
Build Tools SDK | 36.0.0 | 36.0.0 | Installez ou configurez des Build Tools SDK. |
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. |
Les classes DSL android
n'implémentent désormais que les nouvelles interfaces publiques.
Au cours des dernières années, nous avons introduit de nouvelles interfaces pour notre DSL et notre API afin de mieux contrôler les API publiques. Les versions 7.x et 8.x d'AGP utilisaient encore les anciens types DSL (par exemple, BaseExtension
), qui implémentaient également les nouvelles interfaces publiques, afin de maintenir la compatibilité à mesure que les interfaces étaient développées.
AGP 9.0 utilise exclusivement nos nouvelles interfaces DSL, et les implémentations ont été remplacées par de nouveaux types entièrement masqués. Cette modification supprime également l'accès à l'ancienne API Variant obsolète.
Pour passer à AGP 9.0, vous devrez peut-être effectuer les opérations suivantes :
- Passez à Kotlin intégré : le plug-in
org.jetbrains.kotlin.android
n'est pas compatible avec le nouveau DSL. Migrez les projets KMP vers le plug-in Android Gradle Library pour KMP : l'utilisation du plug-in
org.jetbrains.kotlin.multiplatform
dans le même sous-projet Gradle que les plug-inscom.android.library
etcom.android.application
n'est pas compatible avec le nouveau DSL.Mettez à jour vos fichiers de compilation : bien que le changement d'interfaces soit destiné à maintenir le DSL aussi similaire que possible, il peut y avoir quelques petites modifications.
Mettez à jour votre logique de compilation personnalisée pour référencer le nouveau DSL et la nouvelle API : remplacez toutes les références au DSL interne par les interfaces DSL publiques. Dans la plupart des cas, il s'agit d'un remplacement à l'identique. Remplacez toute utilisation de l'API
applicationVariants
et des API similaires par la nouvelle APIandroidComponents
. Cela peut être plus complexe, car l'APIandroidComponents
est conçue pour être plus stable afin de maintenir la compatibilité des plug-ins plus longtemps. Pour obtenir des exemples, consultez nos recettes Gradle.Mettez à jour les plug-ins tiers : certains plug-ins tiers peuvent encore dépendre d'interfaces ou d'API qui ne sont plus exposées. Migrez vers des versions de ces plug-ins compatibles avec AGP 9.0.
Si vous passez à AGP 9.0 et que le message d'erreur suivant s'affiche, cela signifie que votre projet fait toujours référence à certains des anciens types :
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
Si vous êtes bloqué par des plug-ins tiers incompatibles, vous pouvez désactiver les nouvelles implémentations et récupérer les anciennes pour le DSL et l'ancienne API de variante.
Pendant ce temps, les nouvelles interfaces sont également disponibles et vous pouvez toujours mettre à jour votre propre logique de compilation vers la nouvelle API. Pour désactiver le cookie, ajoutez la ligne suivante à votre fichier gradle.properties
:
android.newDsl=false
Vous pouvez également commencer à migrer vers les nouvelles API avant de passer à AGP 9.0. Les nouvelles interfaces sont disponibles depuis de nombreuses versions d'AGP. Vous pouvez donc utiliser un mélange d'anciennes et de nouvelles interfaces. La documentation de référence de l'API AGP présente la surface de l'API pour chaque version d'AGP, ainsi que la date d'ajout de chaque classe, méthode et champ.
Au cours de la phase alpha 9.0, nous contacterons les auteurs de plug-ins pour les aider à adapter et à publier des plug-ins entièrement compatibles avec les nouveaux modes. Nous améliorerons également l'assistant de mise à niveau AGP dans Android Studio pour vous guider tout au long de la migration.
Si vous constatez que le nouveau DSL ou l'API Variant manquent de fonctionnalités, veuillez signaler un problème dès que possible.
Kotlin intégré
Le plug-in Android Gradle 9.0 inclut une compatibilité intégrée pour la compilation de Kotlin, ce qui remplace le plug-in Kotlin appliqué séparément. Cela simplifie l'intégration à AGP, en évitant l'utilisation des API obsolètes et en améliorant les performances dans certains cas.
Le plug-in Android Gradle 9.0 a une dépendance d'exécution sur le plug-in Kotlin Gradle 2.2.10, qui est la version minimale requise pour la compatibilité Kotlin intégrée.
Vous pouvez désactiver Kotlin intégré en définissant android.builtInKotlin=false
.
Si vous avez désactivé Kotlin intégré et que vous devez également utiliser une ancienne version du plug-in Kotlin Gradle, vous pouvez forcer la rétrogradation :
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
Changements de comportement
Le plug-in Android Gradle 9.0 présente les nouveaux comportements suivants :
Comportement | Recommandation |
---|---|
Le plug-in Android Gradle 9.0 utilise la version r28c du NDK par défaut.
|
Envisagez de spécifier explicitement la version du NDK que vous souhaitez utiliser. |
Le plug-in Android Gradle 9.0 exige par défaut que les consommateurs d'une bibliothèque utilisent la même version du SDK de compilation ou une version ultérieure. |
Utilisez le même SDK de compilation ou un SDK de compilation plus récent lorsque vous consommez une bibliothèque.
Si cela n'est pas possible ou si vous souhaitez donner plus de temps aux consommateurs d'une bibliothèque que vous publiez pour effectuer la transition, définissez explicitement AarMetadata.minCompileSdk .
|
AGP 9.0 inclut des mises à jour des valeurs par défaut des propriétés Gradle suivantes. Vous pouvez ainsi choisir de conserver le comportement de l'AGP 8.13 lors de la mise à niveau :
Propriété | Fonction | Passer d'AGP 8.13 à AGP 9.0 | Recommandation |
---|---|---|---|
android.newDsl |
Utilisez les nouvelles interfaces DSL sans exposer les anciennes implémentations du bloc android .Cela signifie également que l'ancienne API des variantes, telle que android.applicationVariants
n'est plus accessible.
|
false → true |
Vous pouvez désactiver cette option en définissant android.newDsl=false .Une fois que tous les plug-ins et la logique de compilation utilisés par votre projet sont compatibles, supprimez la désactivation. |
android.builtInKotlin |
Prise en charge de la compilation du code Kotlin directement dans le plug-in Android Gradle, sans le plug-in org.jetbrains.kotlin.android .
|
false → true |
Adoptez Kotlin intégré en supprimant l'utilisation du plug-in org.jetbrains.kotlin.android si vous le pouvez.
Sinon, désactivez-le en définissant android.builtInKotlin=false .
|
android.uniquePackageNames |
Garantit que chaque bibliothèque possède un nom de package distinct. | false → true |
Spécifiez des noms de packages uniques pour toutes les bibliothèques de votre projet. Si ce n'est pas possible, vous pouvez désactiver ce signal pendant la migration. |
android.dependency.useConstraints |
Contrôle l'utilisation des contraintes de dépendance entre les configurations. La valeur par défaut dans AGP 9.0 est false , qui n'utilise que des contraintes dans les tests d'appareil d'application (AndroidTest).
Si vous définissez cette valeur sur true , vous rétablirez le comportement de la version 8.13.
|
true → false |
N'utilisez pas de contraintes de dépendance partout, sauf si vous en avez besoin. Accepter la nouvelle valeur par défaut de cet indicateur permet également d'activer des optimisations dans le processus d'importation de projet, ce qui devrait réduire le temps d'importation pour les compilations comportant de nombreux sous-projets de bibliothèque Android. |
aandroid.enableAppCompileTimeRClass |
Compiler le code dans les applications par rapport à une classe R non finale, ce qui permet d'aligner la compilation des applications sur celle des bibliothèques. Cela améliore l'incrémentalité et ouvre la voie à de futures optimisations des performances du flux de traitement des ressources. |
false → true |
De nombreux projets peuvent simplement adopter le nouveau comportement sans modifier le code source. Si les champs de la classe R sont utilisés dans un emplacement nécessitant une constante, comme les cas de switch, refactorisez-les pour utiliser des instructions if chaînées. |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
Utilise la version du SDK de compilation comme valeur par défaut pour la version du SDK cible dans les applications et les tests. Avant cette modification, la version du SDK cible était définie par défaut sur la version minimale du SDK. |
false → true |
Spécifiez explicitement la version du SDK cible pour les applications et les tests. |
android.onlyEnableUnitTestForTheTestedBuildType |
Ne crée que des composants de test unitaire pour le type de compilation testé. Dans le projet par défaut, cela se traduit par un seul test unitaire pour le débogage, alors que le comportement précédent consistait à exécuter des tests unitaires pour le débogage ou la version. |
false → true |
Si votre projet n'exige pas l'exécution de tests pour le débogage et la version Release, aucune modification n'est requise. |
android.proguard.failOnMissingFiles |
Échec de la compilation avec une erreur si l'un des fichiers de conservation spécifiés dans le DSL AGP n'existe pas sur le disque. Avant cette modification, les fautes de frappe dans les noms de fichiers entraînaient l'ignorance silencieuse des fichiers. | false → true |
Supprimez toutes les déclarations de fichiers ProGuard non valides. |
android.r8.optimizedResourceShrinking |
Permet à R8 de conserver moins de ressources Android en considérant les classes et les ressources Android ensemble. | false → true |
Si les règles de conservation de votre projet sont déjà complètes, aucune modification n'est requise. |
android.r8.strictFullModeForKeepRules |
Permet à R8 de conserver moins d'éléments en ne conservant pas implicitement le constructeur par défaut lorsqu'une classe est conservée.
En d'autres termes, -keep class A n'implique plus -keep class A { <init>(); } . |
false → true |
Si les règles de conservation de votre projet sont déjà complètes, aucune modification n'est requise.
Remplacez -keep class A
par
-keep class A { <init>(); }
dans les règles de conservation de votre projet pour tous les cas où vous avez besoin de conserver le constructeur par défaut.
|
android.defaults.buildfeatures.resvalues |
Active
resValues
dans tous les sous-projets
|
true → false |
Activez resValues uniquement dans les sous-projets qui en ont besoin en définissant les éléments suivants dans les fichiers de compilation Gradle de ces projets :
android { buildFeatures { resValues = true } } |
android.defaults.buildfeatures.shaders |
Active la compilation des nuanceurs dans tous les sous-projets. | true → false |
Activez la compilation des nuanceurs uniquement dans les sous-projets qui contiennent des nuanceurs à compiler en définissant les éléments suivants dans les fichiers de compilation Gradle de ces projets :
android { buildFeatures { shaders = true } } |
Fonctionnalités supprimées
Le plug-in Android Gradle 9.0 supprime les fonctionnalités suivantes :
- Compatibilité avec les applications Wear OS intégrées
AGP 9.0 supprime la compatibilité avec l'intégration d'applications Wear OS, qui n'est plus prise en charge dans Play. Cela inclut la suppression des configurationswearApp
et du DSLAndroidSourceSet.wearAppConfigurationName
. Pour savoir comment publier votre application sur Wear OS, consultez Distribuer votre application sur Wear OS. - Tâche de création de rapports
androidDependencies
etsourceSets
DSL modifiée
Le plug-in Android Gradle 9.0 présente les modifications importantes suivantes dans le DSL :
La paramétrisation de
CommonExtension
a été supprimée.En soi, il ne s'agit que d'un changement cassant au niveau de la source pour éviter de futurs changements cassants au niveau de la source, mais cela signifie également que les méthodes de blocage doivent passer de
CommonExtension
àApplicationExtension
,LibraryExension
,DynamicFeatureExtension
etTestExtension
.Lorsque vous mettez à niveau votre projet vers AGP 9.0, refactorisez le code du plug-in Gradle qui utilise ces paramètres ou les méthodes de bloc. Par exemple, le plug-in suivant est mis à jour pour supprimer le paramètre de type et ne pas s'appuyer sur les méthodes de bloc supprimées :
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }
AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }
Pour les plug-ins qui ciblent une plage de versions AGP, l'utilisation directe du getter est compatible au niveau binaire avec les versions AGP antérieures à 9.0.
DSL supprimée
Le plug-in Android Gradle 9.0 supprime les éléments suivants :
AndroidComponentsExtension.finalizeDSl
a été remplacé parfinalizeDsl
.AndroidSourceSet.jni
, car il ne fonctionnait pas.AndroidSourceSet.wearAppConfigurationName
, en ce qui concerne la suppression de la compatibilité avec l'application Wear OS intégrée.BuildType.isRenderscriptDebuggable
, car il ne fonctionnait pas.Component.transformClassesWith
a été remplacé parInstrumentation.transformClassesWith
.Component.setAsmFramesComputationMode
a été remplacé parInstrumentation.setAsmFramesComputationMode
.DependenciesInfoBuilder.includedInApk
a été remplacé parincludeInApk
.DependenciesInfoBuilder.includedInBundle
a été remplacé parincludeInBundle
.ComponentBuilder.enabled
a été remplacé parComponentBuilder.enable
.DependencyVariantSelection
a été remplacé parDependencySelection
, qui est exposé en tant quekotlin.android
.GeneratesApk.targetSdkVersion
a été remplacé partargetSdk
.Installation.installOptions(String)
. Elle est remplacée par la propriété mutable deInstallation.installOptions
.Variant.minSdkVersion
a été remplacé parminSdk
.Variant.maxSdkVersion
a été remplacé parmaxSdk
.Variant.targetSdkVersion
a été remplacé partargetSdk
.VariantBuilder.targetSdk
ettargetSdkPreview
, car elles n'avaient pas de sens dans les bibliothèques. Utilisez plutôtGeneratesApkBuilder.targetSdk
ouGeneratesApkBuilder.targetSdkPreview
.VariantOutput.enable
a été remplacé parenabled
.Bloc
PostProcessing
expérimental, mais jamais stabilisé.ProductFlavor.setDimension
, qui est remplacé par la propriétédimension
LanguageSplitOptions
, qui n'était utile que pour Google Play Instant, qui est obsolète.Variant.unitTest
, car il n'était pas applicable au plug-incom.android.test
.unitTest
est disponible sur les sous-typesVariantBuilder
étendantHasUnitTest
.VariantBuilder.enableUnitTest
, car il n'était pas applicable au plug-incom.android.test
.enableUnitTest
est disponible sur les sous-typesVariantBuilder
étendantHasUnitTestBuilder
.VariantBuilder.unitTestEnabled
est supprimé au profit deenableUnitTest
, dont le nom est plus cohérent, sur les sous-typesVariantBuilder
étendantHasUnitTestBuilder
.
Propriétés Gradle supprimées
Les propriétés Gradle suivantes ont été ajoutées à l'origine pour désactiver globalement les fonctionnalités activées par défaut.
Ces fonctionnalités sont désactivées par défaut depuis AGP 8.0 ou version antérieure. Activez ces fonctionnalités uniquement dans les sous-projets qui les utilisent pour une compilation plus efficace.
Propriété | Fonction | Remplacement |
---|---|---|
android.defaults.buildfeatures.aidl |
Active la compilation AIDL dans tous les sous-projets. |
Activez la compilation AIDL uniquement dans les sous-projets où se trouvent des sources AIDL en définissant la propriété suivante dans les fichiers de compilation Gradle de ces projets :
android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript |
Active la compilation RenderScript dans tous les sous-projets. |
Activez la compilation Renderscript uniquement dans les sous-projets où se trouvent des sources Renderscript en définissant la propriété suivante dans les fichiers de compilation Gradle de ces projets :
android { buildFeatures { renderScript = true } } |
API supprimées
Le plug-in Android Gradle 9.0 supprime les éléments suivants :
Les API
BaseExtension.registerTransform
obsolètes et désactivées, qui n'étaient conservées que pour permettre la compilation avec la dernière version d'AGP tout en ciblant l'exécution sur AGP 4.2 ou version antérieure.FeaturePlugin
etFeatureExtension
, qui sont obsolètes et désactivés.
Propriétés Gradle appliquées
AGP 9.0 génère une erreur si vous définissez les propriétés Gradle suivantes.
L'assistant de mise à niveau du plug-in Android Gradle ne mettra pas à niveau les projets vers AGP 9.0 qui utilisent ces propriétés.
Propriété | Fonction |
---|---|
android.r8.integratedResourceShrinking |
La réduction des ressources est désormais toujours exécutée dans le cadre de R8. L'implémentation précédente a été supprimée. |