Plug-in Android Gradle 3.4.0 (avril 2019)

Cette version du plug-in d'Android nécessite les éléments suivants :

3.4.3 (juillet 2020)

Cette mise à jour mineure est compatible avec les nouveaux paramètres et fonctionnalités par défaut pour la visibilité des packages dans Android 11.

Pour en savoir plus, consultez les notes de la version 4.0.1.

3.4.2 (juillet 2019)

Cette mise à jour mineure prend en charge Android Studio 3.4.2, et inclut plusieurs corrections de bugs et améliorations de performances. Pour consulter la liste des corrections de bugs principaux, lisez l'article associé sur le blog des mises à jour des versions.

3.4.1 (mai 2019)

Cette mise à jour mineure prend en charge Android Studio 3.4.1, et inclut plusieurs corrections de bugs et améliorations de performances. Pour consulter la liste des corrections de bugs principaux, lisez l'article associé sur le blog des mises à jour des versions.

Nouvelles fonctionnalités

  • Nouvelles configurations de dépendances pour la vérification lint : le comportement de lintChecks a changé et une nouvelle configuration de dépendance, lintPublish, a été introduite pour vous permettre de mieux contrôler les vérifications lint empaquetées dans vos bibliothèques Android.

    • lintChecks : configuration existante à utiliser pour les vérifications lint que vous ne souhaitez exécuter que lorsque vous compilez votre projet en local. Si vous utilisiez précédemment la configuration des dépendances lintChecks pour inclure les vérifications lint dans l'AAR publiée, vous devez migrer ces dépendances afin d'utiliser plutôt la configuration lintPublish.
    • lintPublish : utilisez cette nouvelle configuration dans les projets de bibliothèque pour les vérifications lint que vous souhaitez inclure dans l'AAR publiée, comme indiqué ci-dessous. Cela signifie que les projets qui utilisent votre bibliothèque appliquent également ces vérifications lint.

    L'exemple de code suivant utilise les deux configurations de dépendances dans un projet de bibliothèque Android local.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • En règle générale, les tâches de packaging et de signature doivent enregistrer une amélioration globale de la vitesse de compilation. Si vous remarquez une régression des performances pour ces tâches, veuillez signaler un bug.

Changements de comportement

  • Avertissement concernant l'abandon du plug-in de fonctionnalité des applis instantanées Android : si vous utilisez toujours le plug-in com.android.feature pour compiler votre appli instantanée, le plug-in Android Gradle 3.4.0 générera une avertissement d'abandon. Pour vous assurer que vous pouvez toujours compiler votre appli instantanée sur les futures versions du plug-in, faites-la migrer vers le plug-in de fonctionnalité dynamique, qui permet également de publier à la fois vos expériences d'applis instantanées et installées à partir d'un seul Android App Bundle.

  • R8 activé par défaut : R8 intègre le désucrage, la minification, l'obscurcissement, l'optimisation et la conversion en DEX en une seule étape, ce qui entraîne des améliorations importantes au niveau des performances de compilation. R8 a été introduit dans le plug-in Android Gradle 3.3.0 et est à présent activé par défaut pour les projets d'application et de bibliothèque Android utilisant le plug-in 3.4.0 et versions ultérieures.

L'image ci-dessous offre une vue d'ensemble du processus de compilation avant l'introduction de R8.

Avant R8, ProGuard était une étape de compilation différente de la conversion au format .dex et du désucrage.

Avec R8, le désucrage, la minification, l'obscurcissement, l'optimisation et la conversion au format .dex (D8) sont effectués en une seule étape, comme illustré ci-dessous.

Avec R8, les processus de désucrage, de minification, d'obscurcissement, d'optimisation et de conversion en DEX s'effectuent tous en une seule étape de compilation.

Pour rappel, R8 est conçu pour fonctionner avec vos règles ProGuard existantes. Vous n'aurez donc probablement aucune action à effectuer pour bénéficier de ce compilateur. Cependant, comme il s'agit d'une technologie différente de ProGuard, conçue spécialement pour les projets Android, la minification et l'optimisation peuvent entraîner la suppression de code que ProGuard n'aurait peut-être pas supprimé. Dans ce cas peu probable, vous devrez peut-être ajouter des règles supplémentaires pour conserver ce code dans votre sortie de compilation.

Si vous rencontrez des problèmes pour utiliser R8, consultez les questions fréquentes sur la compatibilité avec R8 pour voir s'il existe une solution. Si aucune solution n'est documentée, veuillez signaler un bug. Vous pouvez désactiver R8 en ajoutant l'une des lignes suivantes au fichier gradle.properties de votre projet :

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Remarque : Pour un type de compilation donné, si vous définissez useProguard sur false dans le fichier build.gradle du module de votre application, le plug-in Android Gradle utilise R8 pour minifier le code de votre application pour ce type de compilation, que vous désactiviez R8 ou non dans le fichier gradle.properties de votre projet.

  • ndkCompile est obsolète : désormais, une erreur de compilation est générée si vous essayez d'utiliser ndkBuild pour compiler vos bibliothèques natives. Utilisez plutôt CMake ou ndk-build pour ajouter du code C et C++ à votre projet.

Problèmes connus

  • Actuellement, l'utilisation correcte des noms de packages uniques n'est pas appliquée. Toutefois, elle sera plus stricte dans les versions ultérieures du plug-in. Dans la version 3.4.0 du plug-in Android Gradle, vous pouvez choisir de vérifier si votre projet déclare des noms de packages acceptables en ajoutant la ligne ci-dessous à votre fichier gradle.properties.

              android.uniquePackageNames = true
              
            

    Pour en savoir plus sur la définition d'un nom de package via le plug-in Android Gradle, consultez Définir l'ID application.