Plug-in Android Gradle 8.0.0 (avril 2023)

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

Compatibilité

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

Versions de correctif

Voici une liste des versions de correctif du plug-in Android Gradle 8.0.

Plug-in Android Gradle 8.0.2 (mai 2023)

Pour obtenir la liste des bugs corrigés dans AGP 8.0.2, consultez les problèmes résolus dans Android Studio 2022.2.1.

Plug-in Android Gradle 8.0.1 (mai 2023)

Cette mise à jour mineure inclut les corrections de bugs suivantes :

Problèmes résolus
Erreur : "No VersionRequirement with the given id in the table" (Pas d'exigence de version avec l'identifiant donné dans le tableau) après la mise à niveau d'AGP 7.2.2 vers 7.4.0
R8 NullPointerException à markTypeAsLive AGP 7.4.1
[R8 4.0.53] Échec de la validation en dur sur Android 11

Changement incompatible: espace de noms requis dans le script de compilation au niveau du module

Vous devez définir l'espace de noms dans le fichier build.gradle.kts au niveau du module, et non dans le fichier manifeste. Vous pouvez commencer à utiliser la propriété DSL namespace à partir de la version 7.3 d'AGP. Pour en savoir plus, consultez la section Définir un espace de noms.

Lorsque vous migrez vers le DSL d'espace de noms, tenez compte des problèmes suivants:

  • Dans certains cas, les versions précédentes d'AGP infèrent de manière incorrecte l'espace de noms de test à partir de l'espace de noms principal ou de l'ID d'application. L'assistant de mise à niveau AGP bloque la mise à niveau s'il constate que l'espace de noms principal et l'espace de noms de test de votre projet sont identiques. Si la mise à niveau est bloquée, vous devez modifier manuellement testNamespace et modifier votre code source en conséquence.
  • Une fois que vous avez modifié l'espace de noms des tests, il est possible que votre code soit compilé, mais que vos tests d'instrumentation échouent au moment de l'exécution. Cela peut se produire si votre code source de test instrumenté fait référence à une ressource définie à la fois dans vos sources androidTest et d'application.

Pour en savoir plus, consultez le commentaire 19 du problème 191813691.

Modifications non compatibles: valeurs par défaut des options de compilation

À partir d'AGP 8.0, les valeurs par défaut de ces indicateurs ont changé pour améliorer les performances de compilation. Pour obtenir de l'aide pour adapter votre code à certaines de ces modifications, utilisez l'assistant de mise à niveau AGP (Tools > AGP Upgrade Assistant). L'Assistant de mise à niveau vous guide pour mettre à jour votre code afin de prendre en compte le nouveau comportement ou pour définir des indicateurs afin de conserver le comportement précédent.

Signaler Nouvelle valeur par défaut Valeur par défaut précédente Notes
android.defaults.buildfeatures.buildconfig false true AGP 8.0 ne génère pas BuildConfig par défaut. Vous devez spécifier cette option à l'aide du DSL dans les projets où vous en avez besoin.
android.defaults.buildfeatures.aidl false true AGP 8.0 n'active pas la prise en charge d'AIDL par défaut. Vous devez spécifier cette option à l'aide du DSL dans les projets où vous en avez besoin. Cette option sera supprimée dans AGP 9.0.
android.defaults.buildfeatures.renderscript false true AGP 8.0 n'active pas la compatibilité avec RenderScript par défaut. Vous devez spécifier cette option à l'aide du DSL dans les projets où vous en avez besoin. Cette option sera supprimée dans AGP 9.0.
android.nonFinalResIds true false AGP 8.0 génère des classes R avec des champs non finaux par défaut.
android.nonTransitiveRClass true false AGP 8.0 génère des classes R pour les ressources définies dans le module actuel uniquement.
android.enableR8.fullMode true false AGP 8.0 active le mode complet R8 par défaut. Pour en savoir plus, consultez la section Mode complet R8.

Modifications destructives: valeurs d'option de compilation appliquées

À partir d'AGP 8.0, vous ne pouvez plus modifier les valeurs de ces options. Si vous les spécifiez dans le fichier gradle.properties, la valeur est ignorée et AGP affiche des avertissements.

Signaler Valeur appliquée Notes
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 émet un avertissement s'il détecte une résolution de configuration pendant la phase de configuration, car cela a un impact négatif sur les temps de configuration Gradle.
android.r8.failOnMissingClasses true AGP 8.0 échoue dans les compilations qui utilisent R8 si des classes sont manquantes pour assurer une meilleure optimisation DEX. Pour résoudre ce problème, vous devez ajouter les bibliothèques manquantes ou les règles de conservation -dontwarn. Pour en savoir plus, consultez la section Avertissements de classe manquante dans le réducteur R8.
android.testConfig.useRelativePath true Lorsque la prise en charge de l'utilisation des ressources, des composants et des fichiers manifestes Android dans les tests unitaires est activée, AGP 8.0 génère un fichier test_config.properties qui ne contient que des chemins relatifs. Cela garantit que les tests unitaires Android peuvent toujours utiliser le cache de compilation Gradle.
android.useNewJarCreator true AGP utilise la bibliothèque Zipflinger lors de la création de fichiers JAR pour améliorer les performances de compilation.
android.bundletool.includeRepositoriesInDependencyReport true Lorsque l'ajout d'informations sur les dépendances du SDK dans les AAB et les APK est activé, AGP 8.0 ajoute également une liste de dépôts de projets à ces informations. Pour en savoir plus, consultez la section Informations sur les dépendances pour la Play Console.
android.enableArtProfiles true Les profils de référence sont désormais toujours générés. Pour en savoir plus, consultez la section Profils de référence.
android.enableNewResourceShrinker true Utilisez la nouvelle implémentation de la compression des ressources par défaut. Le nouveau réducteur de ressources est compatible avec les fonctionnalités dynamiques.
android.enableSourceSetPathsMap true Utilisé pour calculer les mappages de chemins de ressources relatifs, afin que les builds Gradle soient à jour plus souvent.
android.cacheCompileLibResources true Les ressources de bibliothèque compilées peuvent désormais être mises en cache par défaut, car Gradle suit les fichiers de ressources par rapport à l'emplacement du projet. Nécessite l'activation de android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true AGP 8.0 ne crée aucun SoftwareComponent par défaut. À la place, AGP ne crée des SoftwareComponents que pour les variantes configurées pour être publiées à l'aide du DSL de publication.

Nouvel indicateur stable pour le profil d'exécution

AGP inclut le nouvel indicateur android.settings.executionProfile. Utilisez cet indicateur pour remplacer le profil d'exécution par défaut de SettingsExtension. Pour en savoir plus, consultez la documentation du plug-in de paramètres.

Pour prévisualiser les indicateurs expérimentaux, consultez les notes de version Preview.

L'attribution de propriété paresseuse Kotlin n'est pas prise en charge

Si vous utilisez le DSL Kotlin de Gradle pour vos scripts de compilation, notez qu'Android Studio et AGP 8.0 ne prennent pas en charge l'attribution expérimentale de propriétés à l'aide de l'opérateur =. Pour en savoir plus sur cette fonctionnalité, consultez les notes de version et la documentation.

Catégories de tâches Build Analyzer

À partir d'Android Studio Flamingo, Build Analyzer propose une nouvelle vue par défaut pour les tâches qui ont un impact sur la durée de la compilation. Si votre projet utilise AGP 8.0 ou une version ultérieure, au lieu d'afficher les tâches individuellement, Build Analyzer les regroupe par catégorie. Par exemple, les tâches spécifiques aux ressources Android, à Kotlin ou au déxing sont regroupées, puis triées par durée de compilation. Vous pouvez ainsi facilement identifier la catégorie qui a le plus d'impact sur le temps de compilation. Développez chaque catégorie pour afficher la liste des tâches correspondantes. Pour afficher les tâches individuellement, sans les regrouper, utilisez la liste déroulante Grouper par.

Catégories de tâches Build Analyzer.

Nouveau plug-in de paramètres

AGP 8.0.0-alpha09 introduit le nouveau plug-in de paramètres. Le plug-in de paramètres vous permet de centraliser les configurations globales (configurations qui s'appliquent à tous les modules) en un seul endroit, de sorte que vous n'ayez pas besoin de copier-coller les configurations dans plusieurs modules. En outre, vous pouvez utiliser le plug-in de paramètres pour créer des profils d'exécution d'outils ou différentes instructions pour exécuter un outil, et passer de l'un à l'autre.

Pour utiliser le plug-in de paramètres, appliquez-le dans le fichier settings.gradle:

apply plugin 'com.android.settings'

Centraliser les configurations globales

Pour configurer des configurations globales, utilisez le nouveau bloc android dans le fichier settings.gradle. Exemple :

android {
  compileSdk 31
  minSdk 28
  ...
}

Profils d'exécution de l'outil

Le plug-in de paramètres vous permet également de créer des profils d'exécution pour certains outils. Un profil d'exécution détermine la manière dont un outil est exécuté. Vous pouvez sélectionner différents profils d'exécution en fonction de l'environnement. Dans un profil d'exécution, vous pouvez définir des arguments JVM pour un outil et le configurer pour qu'il s'exécute dans un processus distinct. Actuellement, seul l'outil R8 est compatible.

Créez des profils d'exécution et définissez le profil d'exécution par défaut dans le fichier settings.gradle, comme illustré dans l'exemple suivant:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Pour remplacer le profil par défaut, sélectionnez un autre profil à l'aide de la propriété android.experimental.settings.executionProfile dans le fichier gradle.properties:

android.experimental.settings.executionProfile=high

Vous pouvez également définir cette propriété à l'aide de la ligne de commande, ce qui vous permet de configurer différents workflows. Par exemple, si vous disposez d'un workflow d'intégration continue, vous pouvez utiliser la ligne de commande pour modifier le profil d'exécution sans avoir à modifier le fichier settings.gradle:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

JDK 17 est requis pour exécuter AGP 8.0

Si vous utilisez le plug-in Android Gradle 8.0 pour compiler votre application, JDK 17 est désormais nécessaire pour exécuter Gradle. Android Studio Flamingo inclut JDK 17 et configure Gradle pour l'utiliser par défaut. La plupart des utilisateurs d'Android Studio n'ont donc pas besoin de modifier la configuration de leurs projets.

Si vous devez définir manuellement la version de JDK utilisée par l'AGP dans Android Studio, vous devez utiliser JDK 17 ou version ultérieure.

Si vous utilisez l'AGP indépendamment d'Android Studio, mettez à niveau la version de JDK en définissant la variable d'environnement JAVA_HOME ou l'option de ligne de commande -Dorg.gradle.java.home dans votre répertoire d'installation de JDK 17.

Problèmes résolus

Plug-in Android Gradle 8.0.0

Problèmes résolus
Plug-in Android Gradle
Échec de la compilation irrégulière dans la tâche MergeResources
JavaPluginConvention et HasConvention sont obsolètes
Emplacement de fichier incorrect et incohérent pour la nouvelle API Transform
Le plug-in Android Gradle ne doit pas utiliser la fonction obsolète GUtil.toWords(string)
Le plug-in Android Gradle ne doit pas utiliser la fonction obsolète ConfigureUtil.configure(closure, target)
Mettre à jour les tests AGP pour utiliser KGP 1.7.20-bêta
Échec de Gradle 7.4 (impossible de créer une instance d'AnalyticsService)
Nouvelle "constante d'énumération inconnue" de javac sur AGP 7.4.0-alpha09
La configuration de MergeGeneratedProguardFilesCreationAction est lente, même si la mise en cache est activée
[AGP] Ajout du répertoire source généré au modèle IDE (API Variant)
JavaPluginConvention et HasConvention sont obsolètes
Pas d'ajout d'avertissements par défaut à R8
Afficher un avertissement en l'absence de fichiers ProGuard
AGP 7.3.0 bloque la synchronisation de Gradle pour les projets de plate-forme Gradle
Bibliothèque apksig : ApkVerifier$Result.getV4SchemeSigners() est marquée comme privée
Arrêtez de créer une configuration androidJacocoAnt si la couverture n'est pas activée
L'utilisation de @IntDef dans un composant de bibliothèque ne génère pas d'annotations.zip dans l'AAR
Impossible de trouver un super-type commun pour et
Ajout d'une version de propriété Gradle de LINT_PRINT_STACKTRACE=true
Artefacts obsolètes utilisés dans l'AAR
Migration de la propriété de destination vers la propriété outputLocation pour résoudre l'avertissement d'abandon et se préparer à Gradle 9.0
Prise en compte de l'indicateur "--release" lors de la configuration d'une tâche JavaCompile
[AGP-7.3.0-beta03] Échec de ShrinkResourcesNewShrinkerTask lorsqu'il n'y a pas de ligne vide après la déclaration xml
Cible lintVital exécutée par défaut dans une variante de débogage
Afficher un avertissement en l'absence de fichiers ProGuard
AGP tente d'ajouter kotlinOptions.freeCompilerArgs à la phase d'exécution de la tâche
Échec de la synchronisation Gradle : raison inconnue
DependencyReportTask incompatible avec le cache de configuration
Le remplacement de ressources par resValue dans build.gradle entraîne une erreur de ressources en double
Le type de compilation "debug" est associé à une clé de signature par défaut, ce qui n'est pas le cas des autres
L'utilisation de fonctionnalités dynamiques et la réduction des ressources provoquent un plantage lors de l'exécution
Le type de compilation "debug" est associé à une clé de signature par défaut, ce qui n'est pas le cas des autres
Le répertoire source généré est indiqué comme répertoire Java dans le fournisseur source principal du modèle lint.
L'exception Gradle 8.0-milestone-2 entraîne une exception dans le plug-in Android Gradle
Optimiser la fusion des fichiers manifestes pour les applis et la bibliothèque
Ajout de gradle-settings-api à la génération javadoc
Nouvelle "constante d'énumération inconnue" de javac sur AGP 7.4.0-alpha09
Le plug-in Android Gradle 7.4.0-alpha09 génère des builds qui ne s'importent pas dans Firebase App Distribution
lint.xml dans les modules n'est pas pris en compte pour le contrôle UP-TO-DATE des tâches lint
Problème lié au plug-in Android Gradle 7.0 et aux tests Android : ressource introuvable : ID
La fonction configureCMakeDebug plante de manière intempestive avec une exception de pointeur nul
IllegalAccessError lors de la mise à niveau d'un projet vers AS2022.2.1.5, FireBasePerfPlugin
Échec de la synchronisation avec erreur de chiffrement "La collection ne contient aucun élément correspondant au prédicat."
L'API Instrumentation ne transforme pas les dépendances des fichiers locaux
Erreur "AnnotationProcessorOptions.arguments are queried" lors de la mise à jour vers la version 7.4 bêta 1
Migration des plug-ins Gradle publics vers gradle-api et suppression de BasePlugin.getExtension
r8.jvmArgs n'est pas utilisé
JDK17 est la version minimale requise pour l'AGP
L'AGP 8.0.0 A8 fait planter les profils de référence
Remplacement de "compileSdkVersion" par "compileSdk" dans le message CheckAarMetadataTask dans l'AGP 8.0
AGP 7.4.0-rc01 fait planter l'API Variant avec le message "Querying the mapped value of map(provider(java.util.Set)) before task '…' has completed is not supported"
Problèmes "com.android.build.gradle.tasks.ShaderCompile" avec le cache de configuration
L'ajout de ressources Java à l'aide d'API AGP entraîne un dysfonctionnement du cache de configuration
Le plug-in Lint ne fait pas partie de gradle-api
DexingFileDependenciesTask.outputKeepRules est un répertoire, mais est marqué comme OutputFile
La mise à niveau vers AGP 7.4 génère une erreur StackOverflowError
processDebugUnitTestManifest échoue avec des espaces réservés de manifeste pour les variantes de test
Lint accède aux informations sur les ensembles de sources sans dépendances
L'erreur de génération fait référence au niveau d'API 34, qui n'existe pas
Nous vous recommandons d'utiliser un plug-in Android Gradle plus récent, le cas échéant
android.injected.testOnly=false ne fonctionne pas
Compilateur DEX (D8)
Erreur de fusion DEX liée aux synthétiques globaux après le passage d'AS Canary 6 à AS Canary 7
Mettre à jour la bibliothèque de métadonnées Kotlin vers la version 0.6.0
Une solution de contournement pour JDK-8272564 semble être requise pour les niveaux d'API 28 à 30
Lint
La vérification d'analyse lint pour ResourceType ne fonctionne pas pour les sources kotlin
VersionChecks ne gère pas les vérifications de plage Kotlin
Faux positif pour InliningApi encapsulé
Faux positif lors du recyclage de Lint concernant openInputStream
[Outil de création/Lint] Propriété du constructeur ChecksSdkIntAtLeast
Lint : la fusion de PartialResults ne fonctionne pas correctement
Android Studio indique à tort que la version spécifiée est obsolète.
AndroidDeprecationInspection.DeprecationFilter EP n'est jamais enregistré dans le fichier android-plugin.xml
L'explication de la vérification lint d'AccessibilityDetector est obsolète
Les vérifications SDK_INT lint doivent comprendre les variables locales temporaires
Erreur lorsque TestMode.TYPE_ALIAS remplace le type Function par typealias
Bug : lorsqu'ObjectAnimator est créé en dehors du bloc de code actuel, des avertissements de faux positifs peuvent se déclencher si vous ne le démarrez pas #38
Lint : exception NPE en raison d'une requête sur une instance d'application en mode mergeOnly
La règle lint NonConstantResourceId ne parvient pas à détecter l'attribution de valeurs constantes à partir de l'ID de ressource
Erreur de non-affichage au niveau de l'ID de la vue
L'échec de la désérialisation du cache des ressources lint entraîne une erreur lint (au lieu d'un avertissement)
Régression du désucrage lint NewApi pour l'AGP Flamingo Alpha 8
TypedArray#close (API 31) non désucré, mais AS n'affiche pas d'avertissement en cas d'utilisation avec try-with-resources
Lint ne vérifie pas les diffusions valides pour les destinataires d'appels
Lint ne vérifie les diffusions sécurisées que pour les interfaces implémentées directement, pas pour les interfaces héritées
Intégration de Lint
Le fichier de référence est actuellement une entrée et une sortie des tâches lint
Réducteur de code (R8)
Erreur NPE/assertion dans l'outil de vérification de frame CF
Régression après suppression du cache de recherche de champ
`:app:minifyVariantWithR8` génère une NullPointerException dans AGP 7.4.0-beta02
R8 : ClassNotFoundException quand -allowaccessmodification
Prise en charge des récepteurs de contexte dans les métadonnées
java.lang.VerifyError : le vérificateur a rejeté la classe androidx.compose.ui.graphics.colorspace.o : void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) n'a pas réussi à vérifier : void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) : [0x0] ne parvient pas à accéder au champ d'instance java.lang.Object androidx.compose.ui.graphics.colorspace.n.a à partir d'un objet de type Référence précise : androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1 - Tentative de mise en file d'attente d'une action dans une liste de travail de file d'attente non push
Minification du code Renderscript lors de la mise à niveau de la version 7.3.1 vers la version 7.4.0

Plug-in Android Gradle 8.0.1

Problèmes résolus
Réducteur (R8)
Erreur : "No VersionRequirement with the given id in the table" (Pas d'exigence de version avec l'identifiant donné dans le tableau) après la mise à niveau d'AGP 7.2.2 vers 7.4.0
R8 NullPointerException à markTypeAsLive AGP 7.4.1
[R8 4.0.53] Échec de la validation en dur sur Android 11

Plug-in Android Gradle 8.0.2

Problèmes résolus
Réducteur de code (R8)
R8 échoue lors de la compilation de Compose avec ArrayIndexOutOfBoundsException
VerifyError : le vérificateur a rejeté la classe lors de l'utilisation de R8 avec Kotlin 1.8.20
R8 sur AGP 8 fait planter le service Google Fit
L'inclusion d'informations sur le fichier source avec des noms résiduels et des noms d'entrée qui se chevauchent n'est pas représentée correctement