Plug-in Android Gradle 8.3.0 (février 2024)

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

Compatibilité

Le niveau d'API maximal compatible avec le plug-in Android Gradle 8.3 est le niveau d'API 34. Voici d'autres informations sur la compatibilité:

Version minimale Version par défaut Notes
Gradle 8,4 8,4 Pour en savoir plus, consultez Mettre à jour Gradle.
Build Tools SDK 34.0.0 34.0.0 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.

Voici les nouvelles fonctionnalités du plug-in Android Gradle 8.3.

Versions de correctif

Voici une liste des versions de correctif dans Android Studio Iguana et dans le plug-in Android Gradle 8.3.

Android Studio Iguana | 2023.2.1 Correctif 2 et AGP 8.3.2 (avril 2024)

Cette mise à jour mineure inclut ces corrections de bugs.

Android Studio Iguana | 2023.2.1 Correctif 1 et AGP 8.3.1 (mars 2024)

Cette mise à jour mineure inclut ces corrections de bugs.

Compatibilité avec les catalogues de versions Gradle

Android Studio est compatible avec les catalogues de versions Gradle basés sur TOML, une fonctionnalité qui vous permet de gérer les dépendances dans un emplacement central et de les partager entre les modules ou les projets. Android Studio facilite désormais la configuration des catalogues de versions grâce aux suggestions de l'éditeur et à l'intégration à la boîte de dialogue Project Structure (Structure du projet). Découvrez comment configurer et configurer des catalogues de versions Gradle ou comment migrer votre build vers des catalogues de versions.

Complétion et navigation dans le code

Android Studio propose la saisie semi-automatique du code lorsque vous modifiez un catalogue de versions au format de fichier TOML ou ajoutez une dépendance à partir d'un catalogue de versions à un fichier de compilation. Pour utiliser la saisie semi-automatique, appuyez sur Ctrl+Espace (Command+Espace sur macOS). En outre, vous pouvez passer rapidement d'une référence de dépendance dans le fichier build.gradle de votre application à l'endroit où elle est déclarée dans le catalogue de versions en appuyant sur Ctrl+b (Commande+b sur macOS).

Complétion de code lors de l'ajout d'une dépendance

Intégration à la boîte de dialogue "Structure du projet"

Si votre projet utilise un catalogue de versions défini au format de fichier TOML, vous pouvez modifier les variables que vous y avez définies via la vue Variables (Variables) de la boîte de dialogue Project Structure (Structure du projet) (File > Project Structure > Variables [Fichier > Structure du projet > Variables]) d'Android Studio. Pour chaque catalogue de versions, une liste déroulante liste les variables de ce catalogue. Pour modifier une variable, cliquez sur sa valeur et remplacez-la. Lorsque vous enregistrez ces modifications, le fichier TOML est mis à jour en conséquence.

Variables d'un catalogue de versions dans la boîte de dialogue "Structure du projet"

Vous pouvez également mettre à jour les dépendances dans la vue Dependencies (Dépendances) de la boîte de dialogue Project Structure (Structure du projet) (File > Project Structure > Dependencies [Fichier > Structure du projet > Dépendances]). Pour mettre à jour les versions à l'aide de la boîte de dialogue Project Structure (Structure du projet), accédez au module et à la dépendance que vous souhaitez modifier, puis mettez à jour le champ Requested Version (Version demandée). Lorsque vous enregistrez ces modifications, le fichier TOML est mis à jour en conséquence. Notez que si la version de la dépendance a été définie à l'aide d'une variable, la mise à jour de la version directement de cette manière remplace la variable par une valeur codée en dur. Notez également que la suppression d'une dépendance d'un fichier de compilation, que vous utilisiez la boîte de dialogue Project Structure (Structure du projet) ou non, ne la supprime pas du catalogue de versions.

Dépendances d'un catalogue de versions dans la boîte de dialogue "Structure du projet"

Limites et problèmes connus

Vous trouverez ci-dessous les problèmes ou limites connus liés à la prise en charge des catalogues de versions Gradle dans Android Studio.

  • Mise en surbrillance des déclarations d'alias de plug-in en cas d'erreur dans les fichiers de script Kotlin: lorsque vous ajoutez une déclaration de plug-in de la forme alias(libs.plugins.example), l'éditeur ajoute une ligne rouge sous la partie libs. Il s'agit d'un problème connu dans les versions Gradle 8.0 et antérieures. Il sera résolu dans une prochaine version de Gradle.

  • Android Studio n'est compatible qu'avec les catalogues de versions au format TOML: actuellement, la saisie semi-automatique du code, la navigation et la boîte de dialogue "Project Structure" (Structure du projet) d'Android Studio ne sont disponibles que pour les catalogues de versions définis au format de fichier TOML. Toutefois, vous pouvez toujours ajouter un catalogue de versions directement dans le fichier settings.gradle et utiliser ses dépendances dans votre projet.

  • Navigation pour les fichiers de compilation KTS non prise en charge: la navigation vers une définition de dépendance dans un catalogue de versions à l'aide de Ctrl+clic (Cmd+clic sur macOS) n'est pas encore prise en charge pour les fichiers de compilation écrits à l'aide du script Kotlin.

  • Firebase Assistant ajoute des dépendances directement dans les scripts de compilation: Firebase Assistant ajoute des dépendances directement à vos scripts de compilation au lieu de le faire via des catalogues de versions.

  • La fonctionnalité "Rechercher des utilisations" n'est pas prise en charge: la recherche d'utilisations d'une variable de catalogue de versions dans d'autres fichiers de compilation n'est pas encore prise en charge, que le fichier de compilation soit au format KTS ou Groovy. Autrement dit, l'utilisation de Ctrl+clic (Commande+clic sur macOS) sur une définition de variable dans un catalogue de versions ne permet pas d'accéder aux fichiers de compilation dans lesquels la variable est utilisée.

  • La boîte de dialogue "Project Structure" (Structure du projet) d'Android Studio affiche plusieurs fichiers de catalogue s'ils se trouvent dans le dossier racine gradle, mais n'affiche pas de catalogues pour une compilation composite. Par exemple, si vous disposez de deux fichiers de catalogue (un pour votre application et un pour un build composite), la boîte de dialogue "Structure du projet" n'affiche que le fichier de catalogue de l'application. Vous pouvez utiliser un build composite, mais vous devez modifier directement son fichier TOML.

Informations supplémentaires sur les SDK: problèmes liés aux règles

Android Studio affiche des avertissements d'analyse lint dans les fichiers build.gradle.kts et build.gradle, ainsi que dans la boîte de dialogue "Project Structure" (Structure du projet) pour les SDK publics non conformes aux règles Play dans le Google Play SDK Index. Vous devez mettre à jour toutes les dépendances qui ne respectent pas les règles Play, car ces cas de non-respect pourraient vous empêcher de publier dans la Google Play Console à l'avenir. Les avertissements pour non-respect des règles complètent les avertissements pour version obsolète affichés par Android Studio.

Compatibilité avec les versions de compileSdk d'Android Studio

Android Studio affiche un avertissement si votre projet utilise un compileSdk qui n'est pas compatible avec la version actuelle d'Android Studio. Le cas échéant, il suggère également de passer à une version d'Android Studio compatible avec l'compileSdk utilisée par votre projet. N'oubliez pas que la mise à niveau d'Android Studio peut également nécessiter la mise à niveau d'AGP. AGP affiche également un avertissement dans la fenêtre d'outil Build (Compilation) si le compileSdk utilisé par votre projet n'est pas compatible avec la version actuelle d'AGP.

Changements de comportement de lint

À partir du plug-in Android Gradle 8.3.0-alpha02, lorsque vous exécutez lint sur un module, des tâches d'analyse lint distinctes sont exécutées pour les composants principaux et de test du module. Cette modification vise à améliorer les performances. Pour revenir au comportement précédent, définissez android.experimental.lint.analysisPerComponent=false dans votre fichier gradle.properties.

Réduction précise des ressources activée par défaut

La réduction précise des ressources, qui supprime les entrées inutilisées du fichier resources.arsc et élimine les fichiers de ressources inutilisés, est activée par défaut. Lorsque cette réduction est activée, votre table de ressources est réduite et seules les entrées de dossier res référencées sont incluses dans l'APK.

Pour désactiver la réduction précise des ressources, définissez android.enableNewResourceShrinker.preciseShrinking sur false dans le fichier gradle.properties de votre projet.

Problèmes résolus

Plug-in Android Gradle 8.3.0

Problèmes résolus
Plug-in Android Gradle
Le cache de build est redondant pour la tâche PackageForUnitTest.
[AGP 8.1.0] Le test ./gradlew échoue avec le message "Unable to find manifest output" (Impossible de trouver la sortie du fichier manifeste) si les valeurs splits.abi.isEnable et testOptions.unitTests.isIncludeAndroidResources sont définies sur true.
La compilation du modèle AGP échoue avec des compilations composites Gradle imbriquées.
Le réducteur de ressources modifie les ID de ressource, ce qui entraîne des plantages au moment de l'exécution.
La vérification de la version minimale de Gradle ne s'exécute pas lors de la deuxième compilation ni après.
L'exécution de la tâche ':app:mergeReleaseClasses' a échoué après la mise à jour d'AGP de la version 8.0.2 à la version 8.1.0
[Gradle 8.4][Mise à niveau] Échec du test d'intégration après la mise à niveau en raison de l'utilisation d'une fonctionnalité obsolète dans le plug-in Kotlin Gradle
Absence de vérification de l'existence de fichiers manifestes en superposition pendant la phase de configuration
Erreur de lien non fonctionnel vers le document Gradle lors de l'exécution de MergeJavaResWorkAction
Gradle 8.1 interrompt la mise en cache de la configuration en raison de .gradle/.android/analytics.settings
AGP ne doit pas utiliser ProjectComponentIdentifier.projectPath sans ProjectComponentIdentifier.build.
Veuillez réduire/supprimer la journalisation au niveau des informations pour AGP "Analytics other plugin to proto: ..."
[Gradle 8.4][Mise à niveau] L'opération de fichier lors de la configuration dans ProcessJavaResTask entraîne l'interruption de la mise en cache de la configuration.
Variante d'API pour obtenir une table de symboles (R.txt)
Le plug-in autonome lint ne gère pas correctement la dépendance gradleApi().
kDocs de mauvaise qualité sur les classes/propriétés AGP. "VariantOutput.enable" suggère qu'il doit être remplacé par "VariantOutput.enable".
AGP 8.3.0-alpha02 ne peut pas installer de profils de publication sur les hôtes Windows.
Application de "android.enableDexingArtifactTransform=true"
[Gradle 8.4][Mise à niveau] Échec du test d'intégration après la mise à niveau en raison de la gestion de fichiers pendant la phase de configuration
AGP 8.3.0-alpha-02 - "Erreur : Échec de la désérialisation du dépôt de ressources mis en cache"
[Gradle 8.4][Mise à niveau] Échec du test d'intégration après la mise à niveau en raison de la gestion de fichiers pendant la phase de configuration de TestLabBuildService
AGP 8.1.0 désinstalle l'application après avoir exécuté des tests d'instrumentation, ce qui n'est pas le cas de la version 7.4.2.
La transformation d'un APK génère une erreur avec ListingFileRedirectTask.
La transformation de l'artefact ASSETS donne des emplacements d'entrée/sortie incorrects.
Promouvoir android.experimental.r8.dex-startup-optimization=true comme valeur par défaut
Migrer vers la nouvelle API d'alignement de la configuration Gradle
La compilation des ressources échoue lorsque le compilateur Kotlin tente de passer à IDEA 21.3
Fonction get() réactive avec l'API d'artefacts
Reclassement de la propriété AGP "android.lint.printStackTrace" en version stable.
AGP 8.1.0 : fonctionnalité dynamique : la dépendance implicite entre exportReleaseConsumerProguardFiles et extractProguardFiles provoque des erreurs de compilation
"variant.unitTest.jniLibs.addGeneratedSourceDirectory" ne semble rien faire
Mettre à jour l'analyseur XML utilisé dans AGP pour assurer la compatibilité avec Gradle 8.4
L'instrument JaCoCo pour le package de version d'AGP 8.0.1 ne prend pas effet
RÉGRESSION HEDGEHOG : le bouton "Run" (Exécuter) est retardé de quelques secondes (création d'une spécification)
AGP 8.3.0-alpha11 génère un APK de version qui plante au démarrage avec android.content.res.Resources$NotFoundException
Reclassement de la propriété AGP "android.lint.printStackTrace" en version stable.
Demande de fonctionnalité : promouvoir com.android.build.api.extension.impl.CURRENT_AGP_VERSION en API publique
SDK Manager ne doit plus envoyer de données de spam à stdout
Échec de DexArchiveBuilderTaskMetadata avec le module de bibliothèque de ressources uniquement
Variante de plug-in personnalisée AGP7.4 toTransform pour tous les doublons d'entrée générés : Exception META-INF/MANIFEST.MF
Prise en charge de nouvelles balises de fichier manifeste,
Le lien "Projets dissociés" dans les paramètres de Studio ne va pas.
Veuillez indiquer des options pour inclure les sources générées sur Javadoc et SourceJar
Besoin d'une correction rapide pour les différences entre compileSdk et la dépendance avec minCompileSdkVersion
[Gradle] tools:overrideLibrary devrait être compatible avec l'astérisque (*)
L'UI se fige lors de la modification du fichier manifeste
Impossible de définir la version de JaCoCo dans AGP 8.2.0
Échec de la tâche d'installation du plug-in Android Gradle 8.2.0 dans le projet qui utilise des fonctionnalités dynamiques
Échec de la tâche d'installation du plug-in Android Gradle 8.2.0 dans le projet qui utilise des fonctionnalités dynamiques
Compilateur DEX (D8)
[Bibliothèque désucrée] La version 2.1 de la bibliothèque désucrée n'est pas compatible avec les versions précédentes de R8
Optimisations fonctionnent, même avec D8 uniquement ?
Lint
[Lint] TranslucentViewDetector plante dans la fonction filterIncident et provoque la génération d'un résultat incorrect par lint.
TranslucentViewDetector doit accepter la valeur "behind".
Android Lint échoue sur une bibliothèque KMP quand la propriété "variantInputs.name" n'a pas de valeur configurée.
TranslucentViewDetector signale une ligne incorrecte dans le fichier manifeste.
lintDebug signale à tort des avertissements UseTomlInstead lors de l'utilisation de dépendances de projet.
Problèmes inattendus provenant d'un autre projet signalé par Android Lint
lint vérifie la détection des faux positifs pour les ressources inutilisées dans la liaison et l'écouteur de clics.
Impossible de charger le fichier JAR personnalisé de vérification lint : le nœud ne peut pas être diffusé vers TreeNode.
lint visitAnnotationUsage n'est pas appelé pour les utilisations de classes annotées dans les déclarations de variable.
Échec de lint 31.0.2 avec java.util.NoSuchElementException : le tableau est vide.
Aucun avertissement lint concernant kotlin.text.MatchNamedGroupCollection#get(String) nécessitant l'API 26
Faux négatifs lint:TypographyQuotes : plusieurs apostrophes échappées sont ignorées.
Faux positif du détecteur lint InvalidId d'AGP 8.0.2
Problèmes LintError ajoutés aux références lint
L'outil QuickFix Lint ne fonctionne pas et génère une erreur d'IDE
Échec du test incohérent en raison d'une analyse partielle
Mise en surbrillance incorrecte d'un avertissement (faux positif)
lint visitAnnotationUsage n'est pas appelé pour les utilisations de classes annotées dans les déclarations de variable.
Le processeur de ressources non utilisé peut supprimer le fichier de compilation Gradle
La vérification lint de NewApi ne comprend pas le champ final "isAtleastU() && otherCondition()".
StackOverflow depuis "LintClient.getSdkHome"
Android Studio / Lint ne vous indique pas quand les dépendances de "plate-forme" sont obsolètes
Bug : Aucune suggestion de mise à jour de la dépendance de la nomenclature Firebase
La structure du projet (et Gradle (?)) ne détecte pas les dépendances de la nomenclature Firebase à mettre à niveau vers une version plus récente.
Intégration de Lint
Erreur lint DuplicatePlatformClasses liée à la dépendance testImplementation
Réducteur de code (R8)
R8 ne fonctionne pas après la mise à niveau d'AGP depuis la version 8.0.2 vers la version 8.1.0.
ShrinkResources est-il suroptimisé dans les versions 8.3.0-alpha11 à alpha14
Plantage du SDK R8 Flurry avec AGP 8.2.0
Android : R8 provoque le plantage de la sous-classe de LinearLayoutManager
R8 v8.2.33, plantage de l'exécution après la mise à niveau "java.lang.VerifyError: type incorrect dans la pile d'opérande"
[R8 8.3.21] R8 8.3.21 dépasse 1,57 Mo par rapport à R8 8.1.56
[R8 8.3.21] R8 8.3.21 dépasse 1,57 Mo par rapport à R8 8.1.56
class.getInterfaces() renvoie un résultat vide
Échec du test de SimpleKotlinEnumUnboxingTest sur le bot kotlin_dev

Plug-in Android Gradle 8.3.1

Problèmes résolus
Plug-in Android Gradle
Problème de gestion des entrées incrémentielles de MergeJavaResourcesTask
Intégration de Lint
Lint ne peut pas résoudre les types de jeux de sources frères dans AGP 8.3.0-rc02.

Plug-in Android Gradle 8.3.2

Problèmes résolus
Plug-in Android Gradle
Un interblocage peut se produire avec AGP 8.3 et le désucrage activé
AGP 8.3 fait planter la tâche zipApksFor
Intégration de Lint
Lint ne parvient pas à éliminer l'ambiguïté d'une dépendance KMP