Plug-in Android Gradle 4.2.0 (mars 2021)

Compatibilité

Version minimale Version par défaut Notes
Gradle 6.7.1 N/A Pour en savoir plus, consultez Mettre à jour Gradle.
Build Tools SDK 30.0.2 30.0.2 Installez ou configurez des Build Tools SDK.
NDK N/A 21.4.7075529 Installez ou configurez une autre version du NDK.

Nouvelles fonctionnalités

Cette version du plug-in d'Android Gradle inclut les nouvelles fonctionnalités suivantes.

Langage Java version 8 par défaut

À partir de la version 4.2, l'AGP utilisera le niveau de langage Java 8 par défaut. Java 8 permet d'accéder à de nombreuses nouvelles fonctionnalités de langage plus récentes, y compris les expressions lambda, les références de méthodes et les méthodes d'interface statiques. Pour obtenir la liste complète des fonctionnalités compatibles, consultez la documentation Java 8.

Pour conserver l'ancien comportement, indiquez explicitement Java 7 dans votre fichier build.gradle.kts ou build.gradle au niveau du module:

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

Nouveau compilateur de ressources JVM

Un nouveau compilateur de ressources JVM dans le plug-in 4.2 d'Android Gradle remplace des parties du compilateur de ressources AAPT2, ce qui peut potentiellement améliorer les performances de compilation, en particulier sur les machines Windows. Le nouveau compilateur de ressources JVM est activé par défaut.

Signature v3 et v4 désormais compatible

Le plug-in 4.2 Android Gradle prend désormais en charge les formats de signature APK v3 et APK v4. Pour activer l'un de ces formats ou les deux dans votre build, ajoutez les propriétés suivantes à votre fichier build.gradle ou build.gradle.kts au niveau du module:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

La signature APK v4 vous permet de déployer rapidement des APK volumineux à l'aide de l'installation d'APK incrémentiel d'ADB dans Android 11. Ce nouvel indicateur se charge de l'étape de signature des APK dans le processus de déploiement.

Configurer la signature d'application selon la variante

Vous pouvez maintenant activer ou désactiver la signature d'application dans le plug-in d'Android Gradle selon la variante.

Cet exemple montre comment définir la signature d'application selon la variante à l'aide de la méthode onVariants() en code Kotlin ou Groovy:

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

Nouvelle propriété Gradle : android.native.buildOutput

Pour réduire l'encombrement de la sortie de compilation, AGP 4.2 filtre les messages des builds natifs qui utilisent CMake et ndk-build, n'affichant que la sortie du compilateur C/C++ par défaut. Auparavant, une ligne de sortie était générée pour chaque fichier compilé, ce qui entraînait beaucoup de messages d'information.

Si vous souhaitez afficher l'intégralité de la sortie native, définissez la nouvelle propriété Gradle android.native.buildOutput sur verbose.

Vous pouvez définir cette propriété dans le fichier gradle.properties ou via la ligne de commande.

gradle.properties
android.native.buildOutput=verbose

Ligne de commande
-Pandroid.native.buildOutput=verbose

La valeur par défaut de cette propriété est quiet

Modification du comportement des fichiers gradle.properties

À partir de la version 4.2 de l'AGP, il n'est plus possible de remplacer les propriétés Gradle à partir de sous-projets. En d'autres termes, si vous déclarez une propriété dans un fichier gradle.properties d'un sous-projet au lieu du projet racine, elle sera ignorée.

Par exemple, dans les versions précédentes, l'AGP lisait les valeurs à partir de <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties, etc. Pour les modules d'application, si la même propriété Gradle était présente dans <var>projectDir</var>/gradle.properties et dans <var>projectDir</var>/app/gradle.properties, la valeur de <var>projectDir</var>/app/gradle.properties aurait prévalu.

Ce comportement a changé dans la version 4.2 de l'AGP, et l'AGP ne charge pas les valeurs de gradle.properties dans les sous-projets (par exemple, <var>projectDir</var>/app/gradle.properties). Cette modification reflète le nouveau comportement de Gradle et est compatible avec la mise en cache de la configuration.

Pour en savoir plus sur la définition de valeurs dans les fichiers gradle.properties, consultez les documents de Gradle.

Compatibilité avec Gradle et modifications de configuration

Lorsqu'il s'exécute dans Android Studio, l'outil de compilation Gradle utilise le JDK fourni par Studio. Dans les versions précédentes, JDK 8 était fourni avec Studio. Dans la version 4.2, cependant, JDK 11 est désormais fourni à la place. L'utilisation du nouveau JDK fourni pour exécuter Gradle peut entraîner une incompatibilité ou une incidence sur les performances de la JVM en raison de modifications apportées au récupérateur de mémoire. Ces problèmes sont décrits ci-dessous.

Remarque:Bien que nous vous recommandions d'exécuter Gradle avec JDK 11, il est possible de modifier la version de JDK utilisée pour exécuter Gradle dans la boîte de dialogue Structure du projet. La modification de ce paramètre ne modifie que le JDK utilisé pour exécuter Gradle. Il ne modifie pas le JDK utilisé pour exécuter Studio lui-même.

Compatibilité de Studio avec le plug-in d'Android Gradle (AGP)

Android Studio version 4.2 peut ouvrir des projets qui emploient l'AGP version 3.1 ou supérieures, à condition que l'AGP exécute Gradle version 4.8.1 ou supérieures. Pour en savoir plus sur la compatibilité avec Gradle, consultez Mettre à jour Gradle.

Optimiser les builds Gradle pour JDK 11

Cette mise à jour de JDK 11 a une incidence sur la configuration par défaut du récupérateur de mémoire de la JVM, car JDK 8 utilise le récupérateur de mémoire parallèle, tandis que JDK 11 utilise le récupérateur de mémoire G1.

Pour améliorer les performances de compilation, nous vous recommandons de tester vos compilations Gradle avec le récupérateur de mémoire en parallèle. Dans gradle.properties, définissez les paramètres suivants :

org.gradle.jvmargs=-XX:+UseParallelGC

Si d'autres options sont déjà définies dans ce champ, ajoutez une nouvelle option :

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

Pour mesurer la vitesse de compilation à l'aide de différentes configurations, consultez Effectuer le profilage de votre build.

Fichiers DEX non compressés dans les APK si la valeur de minSdk est égale ou supérieure à 28

Désormais, l'AGP regroupe par défaut les fichiers DEX non compressés dans les APK lorsque la valeur de minSdk est égale ou supérieure à 28. Ce comportement provoque une augmentation de la taille de l'APK, mais réduit la taille d'installation sur l'appareil, tandis que la taille de téléchargement reste à peu près identique.

Pour forcer l'AGP à plutôt regrouper les fichiers DEX compressés, ajoutez le code suivant à votre fichier build.gradle:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Utiliser le DSL pour regrouper des bibliothèques natives compressées

Nous vous recommandons de regrouper les bibliothèques natives dans un format non compressé, car cela réduit la taille d'installation, réduit le temps de téléchargement et réduit le temps de chargement de l'application. Toutefois, si vous souhaitez que le plug-in d'Android Gradle regroupe les bibliothèques natives compressées au moment de créer votre application, définissez useLegacyPackaging sur true dans le fichier build.gradle:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

L'indicateur useLegacyPackaging remplace l'attribut manifeste extractNativeLibs. Pour en savoir plus, consultez la note de version Bibliothèques natives empaquetées non compressées par défaut.