Notes de version de l'aperçu du plug-in Android Gradle

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-ins com.android.library et com.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 API androidComponents. Cela peut être plus complexe, car l'API androidComponents 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.
falsetrue 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. falsetrue 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. falsetrue 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.
truefalse 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.
falsetrue 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.
falsetrue 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.
falsetrue 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. falsetrue 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. falsetrue 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>(); }
.
falsetrue 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 truefalse 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. truefalse 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 :

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 et TestExtension.

    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 :

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
  }
}
dans le fichier de compilation Gradle de chaque sous-projet contenant des sources AIDL
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 et FeatureExtension, 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.