Plug-in Android Gradle 8.0.0 (avril 2023)

Le plug-in Android Gradle 8.0.0 est une version majeure qui comprend plusieurs 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 résolus dans l'AGP 8.0.2, consultez les problèmes fermés d'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

Modification destructive: 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 plutôt que 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 déduisent l'espace de noms de test à partir de l'espace de noms principal ou de l'ID application. L'assistant de mise à niveau AGP bloque la mise à niveau s'il constate que l'espace de noms principal de votre projet et l'espace de noms de test sont identiques. Si la mise à niveau est bloquée, vous devez modifier manuellement testNamespace et modifier votre code source en conséquence.
  • Après avoir modifié l'espace de noms de test, il est possible que votre code se compile, mais que vos tests d'instrumentation échouent au moment de l'exécution. Cela peut se produire si le code source de votre test d'instrumentation fait référence à une ressource définie à la fois dans votre androidTest et dans les sources de votre application.

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

Modifications destructives: valeurs par défaut des options de compilation

À partir de la version 8.0 de l'AGP, les valeurs par défaut de ces indicateurs ont changé pour améliorer les performances de compilation. Pour obtenir de l'aide afin d'ajuster votre code afin de prendre en charge certaines de ces modifications, utilisez l'assistant de mise à niveau AGP (Tools > AGP Upgrade Assistant). L'assistant de mise à niveau vous guide dans la mise à jour de votre code pour l'adapter au nouveau comportement ou pour définir des options 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 L'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 L'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. Il est prévu que cette option soit supprimée dans l'AGP 9.0.
android.defaults.buildfeatures.renderscript false true L'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. Il est prévu que cette option soit supprimée dans l'AGP 9.0.
android.nonFinalResIds true false Par défaut, l'AGP 8.0 génère des classes R avec des champs non finaux.
android.nonTransitiveRClass true false L'AGP 8.0 ne génère des classes R que pour les ressources définies dans le module actuel.
android.enableR8.fullMode true false L'AGP 8.0 active le mode complet de R8 par défaut. Pour en savoir plus, consultez la section Mode complet R8.

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

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

Signaler Valeur appliquée Notes
android.dependencyResolutionAtConfigurationTime.warn true L'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 durées de configuration Gradle.
android.r8.failOnMissingClasses true L'AGP 8.0 fait échouer les builds qui utilisent R8 s'il manque des classes, ce qui garantit une meilleure optimisation DEX. Pour résoudre ce problème, vous devez ajouter les bibliothèques manquantes ou des règles de conservation -dontwarn. Pour en savoir plus, consultez Avertissements de classe manquante dans le réducteur R8.
android.testConfig.useRelativePath true Lorsque la prise en charge de l'utilisation des ressources, des éléments et des fichiers manifestes Android dans les tests unitaires est activée, l'AGP 8.0 génère un fichier test_config.properties ne contenant que les chemins d'accès relatifs. Cela garantit que les tests unitaires Android peuvent toujours utiliser le cache de build 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é, l'AGP 8.0 ajoute également une liste des dépôts de projets à ces informations. Pour en savoir plus, consultez Informations sur les dépendances pour la Play Console.
android.enableArtProfiles true Les profils de référence sont désormais systématiquement générés. Pour en savoir plus, consultez la section Profils de référence.
android.enableNewResourceShrinker true Utilisez la nouvelle implémentation du réducteur de 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 en fonction de l'emplacement du projet. Nécessite l'activation de android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true Par défaut, l'AGP 8.0 ne crée aucun composant SoftwareComponent. À la place, l'AGP ne crée des composants logiciels 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

L'AGP inclut la nouvelle option 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.

Attribution de propriétés Kotlin différées non compatible

Si vous utilisez le DSL Kotlin de Gradle pour vos scripts de compilation, notez qu'Android Studio et AGP 8.0 ne sont pas compatibles avec l'attribution de propriétés expérimentales à 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 de Build Analyzer

À partir d'Android Studio Flamingo, Build Analyzer dispose d'une nouvelle vue par défaut pour les tâches qui ont une incidence sur la durée de 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, en Kotlin ou au format .dex sont regroupées, puis triées par durée de compilation. Il est ainsi facile de savoir quelle catégorie a le plus d'impact sur la durée de compilation. Le développement de chaque catégorie permet d'afficher la liste des tâches correspondantes. Pour afficher les tâches individuellement, sans les regrouper, utilisez le menu déroulant Grouper par.

Catégories de tâches de 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) au même endroit. Vous n'avez donc pas besoin de copier et de 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'outil ou différentes instructions pour exécuter un outil et basculer 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 des outils

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, 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 l'AGP 8.0

Lorsque 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, ce qui signifie que la plupart des utilisateurs d'Android Studio n'ont pas besoin de modifier la configuration de leurs projets.

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

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