Android-Gradle-Plug-in 4.2.0 (März 2021)

Kompatibilität

  Mindestversion Standardversio Hinweise
Gradle 6.7.1 Weitere Informationen finden Sie unter Gradle aktualisieren.
SDK-Build-Tools 30.0.2 30.0.2 Installieren oder konfigurieren Sie SDK-Build-Tools.
NDK 21.4.7075529 Installieren oder konfigurieren Sie eine andere Version des NDK.

Neue Funktionen

Diese Version des Android-Gradle-Plug-ins enthält die folgenden neuen Funktionen.

Java-Sprachversion 8

Ab Version 4.2 verwendet AGP standardmäßig die Java 8-Sprachebene. Java 8 bietet Zugriff auf eine Reihe neuerer Sprachfunktionen, einschließlich Lambda. Methodenreferenzen und statischen Schnittstellenmethoden. Zur vollständigen Liste der unterstützten Funktionen finden Sie in der Java 8-Dokumentation.

Um das alte Verhalten beizubehalten, geben Sie Java 7 explizit in Ihrer Modulebene an. Datei build.gradle.kts oder build.gradle:

// 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"
  }
}

Neuer JVM-Ressourcen-Compiler

Ein neuer JVM-Ressourcen-Compiler im Android-Gradle-Plug-in 4.2-Tool ersetzt Teile des AAPT2-Ressourcen-Compilers, möglicherweise die Build-Leistung verbessert, insbesondere auf Windows-Computern. Die neue JVM Der Ressourcen-Compiler ist standardmäßig aktiviert.

v3- und v4-Signaturen werden jetzt unterstützt

Android-Gradle-Plug-in 4.2 unterstützt jetzt APK v3 und APK v4. Um eines oder beide dieser Formate in Ihrem erstellen, fügen Sie dem build.gradle auf Modulebene die folgenden Attribute hinzu oder build.gradle.kts-Datei:

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

Mit der APK v4-Signatur können Sie große APKs schnell über den ADB-Standard bereitstellen. Inkrementelle APK-Installation in Android 11 Dieses neue Flag übernimmt den APK-Signaturschritt in der Bereitstellung .

App-Signatur pro Variante konfigurieren

In Android-Gradle ist es jetzt möglich, die App-Signatur zu aktivieren oder zu deaktivieren. Plug-in pro Variante.

In diesem Beispiel wird gezeigt, wie Sie die App-Signatur pro Variante mit dem onVariants() in Kotlin oder Groovy:

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

Neue Gradle-Eigenschaft: android.native.buildOutput

AGP 4.2 filtert Nachrichten, um für mehr Ordnung in der Build-Ausgabe zu sorgen aus nativen Builds, die CMake und ndk-build verwenden, Zeigt standardmäßig nur die C/C++-Compiler-Ausgabe an. Zuvor wurde eine Ausgabezeile für jede erstellte Datei generiert wurde, was zu einer großen Anzahl zu informieren.

Wenn Sie die gesamte native Ausgabe sehen möchten, legen Sie das neue Gradle-Attribut android.native.buildOutput auf verbose.

Sie können dieses Attribut entweder in der Datei gradle.properties oder über die Befehlszeile.

gradle.properties:
android.native.buildOutput=verbose

Befehlszeile
-Pandroid.native.buildOutput=verbose

Der Standardwert dieses Attributs ist quiet.

Verhaltensänderung für gradle.properties-Dateien

Ab AGP 4.2 ist es nicht mehr möglich, Gradle-Attribute zu überschreiben aus Unterprojekten. Wenn Sie also eine Property in einem Datei gradle.properties in einem Unterprojekt anstelle des Stammverzeichnisses wird er ignoriert.

In früheren Versionen würde AGP beispielsweise Werte aus <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties, Wenn bei App-Modulen dieselbe Gradle-Eigenschaft in beiden <var>projectDir</var>/gradle.properties und <var>projectDir</var>/app/gradle.properties, den Wert von <var>projectDir</var>/app/gradle.properties Vorrang haben.

In AGP 4.2 wurde dieses Verhalten geändert. gradle.properties in Teilprojekten (z.B. <var>projectDir</var>/app/gradle.properties. Diese Änderung spiegelt die neues Gradle-Verhalten und unterstützt Konfigurations-Caching

Weitere Informationen zum Festlegen von Werten in gradle.properties finden Sie in der Gradle-Dokumentation

Gradle-Kompatibilität und Konfigurationsänderungen

Bei der Ausführung in Android Studio verwendet das Gradle-Build-Tool das gebündelte JDK von Studio. In früheren Versionen war JDK 8 mit Studio gebündelt. In Version 4.2 Stattdessen ist jetzt jedoch JDK 11 gebündelt. Bei Verwendung des neuen gebündelten JDK für die Ausführung Gradle verwendet werden, kann dies zu Inkompatibilitäten führen oder die JVM-Leistung beeinträchtigen. aufgrund von Änderungen an der automatischen Speicherbereinigung. Diese Probleme werden im Folgenden beschrieben.

Hinweis:Wir empfehlen zwar, Gradle mit JDK 11 auszuführen, es ist jedoch das zum Ausführen von Gradle verwendete JDK im Projektstruktur Dialogfeld. Wenn Sie diese Einstellung ändern, wird nur das JDK geändert, das zum Ausführen von Gradle verwendet wird. hat keine Auswirkungen auf das JDK, das zum Ausführen von Studio verwendet wird.

Studio-Kompatibilität mit Android Gradle-Plug-in (AGP)

Android Studio 4.2 kann Projekte öffnen, die AGP 3.1 und vorausgesetzt, in AGP wird Gradle 4.8.1 und höher ausgeführt. Weitere Informationen Informationen zur Gradle-Kompatibilität finden Sie unter Aktualisiere Gradle.

Gradle-Builds für JDK 11 optimieren

Diese Aktualisierung des JDK 11 wirkt sich auf die Standardkonfiguration des JVM-Speichers aus Collector, da JDK 8 den parallelen Garbage Collector verwendet, während JDK 11 die G1-Speicherbereinigung.

Um die Build-Leistung potenziell zu verbessern, empfehlen wir Sie testen Ihre Gradle-Builds mit der parallelen automatischen Speicherbereinigung. Legen Sie in gradle.properties Folgendes fest:

org.gradle.jvmargs=-XX:+UseParallelGC

Wenn in diesem Feld bereits andere Optionen festgelegt sind, fügen Sie eine neue Option hinzu:

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

Informationen zum Messen der Build-Geschwindigkeit mit verschiedenen Konfigurationen finden Sie unter Erstellen Sie ein Profil für Ihren Build.

Unkomprimierte DEX-Dateien in APKs bei minSdk = 28 oder höher

AGP verpackt DEX-Dateien jetzt standardmäßig unkomprimiert in APKs, wenn minSdk = 28 oder höher liegen. Dies führt zu einer höheren APK-Größe, auf dem Gerät installiert ist und die Downloadgröße ungefähr gleich ist.

Um zu erzwingen, dass AGP die DEX-Dateien stattdessen komprimiert verpackt, können Sie den Parameter Folgendes zu Ihrer build.gradle-Datei hinzufügen:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Komprimierte native Bibliotheken mithilfe von DSL verpacken

Wir empfehlen, native Bibliotheken unkomprimiert zu verpacken, führt zu einer kleineren App-Installationsgröße, einer geringeren Downloadgröße und einer schnelleren App der Ladezeiten für Ihre Nutzer. Wenn das Android-Gradle-Plug-in jedoch beim Erstellen der App komprimierte native Bibliotheken verpacken, useLegacyPackaging in true in der build.gradle-Datei Ihrer App:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Das Flag useLegacyPackaging ersetzt das Manifestattribut extractNativeLibs. Weitere Informationen finden Sie in den Versionshinweisen. Native Bibliotheken, die standardmäßig unkomprimiert verpackt sind.