Android Gradle Plugin 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 die 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.

Standardmäßig Java-Sprachversion 8

Ab Version 4.2 verwendet AGP standardmäßig die Java 8-Sprachebene. Java 8 bietet Zugriff auf eine Reihe neuerer Sprachfunktionen, darunter Lambdaausdrücke, Methodenreferenzen und statische Schnittstellenmethoden. Eine vollständige Liste der unterstützten Funktionen finden Sie in der Java 8-Dokumentation.

Wenn Sie das alte Verhalten beibehalten möchten, geben Sie Java 7 in der Datei build.gradle.kts oder build.gradle auf Modulebene explizit an:

// 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-Ressourcencompiler

Ein neuer JVM-Ressourcencompiler im Android Gradle-Plug-in 4.2 ersetzt Teile des AAPT2-Ressourcencompilers. Dadurch kann die Build-Leistung insbesondere auf Windows-Computern verbessert werden. Der neue JVM-Ressourcencompiler ist standardmäßig aktiviert.

Signatur von Version 3 und 4 jetzt unterstützt

Das Android-Gradle-Plug-in 4.2 unterstützt jetzt die Signaturformate APK v3 und APK v4. Wenn Sie eines oder beide dieser Formate in Ihrem Build aktivieren möchten, fügen Sie der Datei build.gradle oder build.gradle.kts auf Modulebene die folgenden Eigenschaften hinzu:

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

Mit der APK-Signatur Version 4 können Sie große APKs mit der inkrementellen APK-Installation von ADB unter Android 11 schnell bereitstellen. Dieses neue Flag übernimmt den Schritt der APK-Signatur im Bereitstellungsprozess.

App-Signatur pro Variante konfigurieren

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

In diesem Beispiel wird gezeigt, wie Sie die App-Signatur für jede Variante mit der Methode onVariants() in Kotlin oder Groovy festlegen:

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

Neue Gradle-Eigenschaft: android.native.buildOutput

Um die Build-Ausgabe übersichtlich zu gestalten, filtert AGP 4.2 Nachrichten aus nativen Builds heraus, die CMake und ndk-build verwenden. Standardmäßig wird nur die C/C++-Compilerausgabe angezeigt. Bisher wurde für jede erstellte Datei eine Ausgabezeile generiert, was zu einer großen Anzahl von Informationsmeldungen führte.

Wenn Sie die gesamte native Ausgabe sehen möchten, setzen Sie die neue Gradle-Eigenschaft android.native.buildOutput auf verbose.

Sie können diese Eigenschaft entweder in der Datei gradle.properties oder über die Befehlszeile festlegen.

gradle.properties
android.native.buildOutput=verbose

Befehlszeile
-Pandroid.native.buildOutput=verbose

Der Standardwert dieser Property ist quiet.

Verhaltensänderung bei gradle.properties-Dateien

Ab AGP 4.2 ist es nicht mehr möglich, Gradle-Properties aus Unterprojekten zu überschreiben. Wenn Sie also eine Property in einer gradle.properties-Datei in einem untergeordneten Projekt anstelle des Stammprojekts deklarieren, wird sie ignoriert.

In früheren Releases las AGP beispielsweise Werte aus <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties usw. Wenn für App-Module dieselbe Gradle-Eigenschaft sowohl in <var>projectDir</var>/gradle.properties als auch in <var>projectDir</var>/app/gradle.properties vorhanden war, hatte der Wert aus <var>projectDir</var>/app/gradle.properties Vorrang.

In AGP 4.2 wurde dieses Verhalten geändert. AGP lädt keine Werte aus gradle.properties in untergeordnete Projekte (z. B. <var>projectDir</var>/app/gradle.properties). Diese Änderung entspricht dem neuen Gradle-Verhalten und unterstützt das Caching von Konfigurationen.

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

Änderungen an der Gradle-Kompatibilität und -Konfiguration

Wenn das Gradle-Build-Tool in Android Studio ausgeführt wird, verwendet es das mitgelieferte JDK von Studio. In früheren Releases war JDK 8 im Lieferumfang von Studio enthalten. In Version 4.2 ist jedoch stattdessen JDK 11 enthalten. Wenn Sie das neue mitgelieferte JDK zum Ausführen von Gradle verwenden, kann dies aufgrund von Änderungen am Garbage Collector zu Inkompatibilitäten oder Leistungseinbußen der JVM führen. Diese Probleme werden unten beschrieben.

Hinweis:Wir empfehlen, Gradle mit JDK 11 auszuführen. Sie können das JDK, mit dem Gradle ausgeführt wird, jedoch im Dialogfeld Projektstruktur ändern. Durch Ändern dieser Einstellung wird nur das JDK geändert, das zum Ausführen von Gradle verwendet wird. Das JDK, das zum Ausführen von Studio selbst verwendet wird, bleibt unverändert.

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

Mit Android Studio 4.2 können Projekte geöffnet werden, die AGP 3.1 und höher verwenden, sofern AGP Gradle 4.8.1 oder höher ausführt. Weitere Informationen zur Kompatibilität von Gradle finden Sie unter Gradle aktualisieren.

Gradle-Builds für JDK 11 optimieren

Dieses Update auf JDK 11 wirkt sich auf die Standardkonfiguration des JVM-Garbage-Collectors aus, da in JDK 8 der parallele Garbage-Collector verwendet wird, während in JDK 11 der G1-Garbage-Collector verwendet wird.

Um die Build-Leistung zu verbessern, empfehlen wir, Ihre Gradle-Builds mit dem parallelen Garbage Collector zu testen. Legen Sie unter 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 Buildgeschwindigkeit mit verschiedenen Konfigurationen finden Sie unter Builds analysieren.

DEX-Dateien in APKs unkomprimiert, wenn minSdk = 28 oder höher

AGP verpackt DEX-Dateien jetzt standardmäßig unkomprimiert in APKs, wenn minSdk = 28 oder höher ist. Dies führt zu einer Erhöhung der APK-Größe, aber zu einer geringeren Installationsgröße auf dem Gerät. Die Downloadgröße bleibt ungefähr gleich.

Wenn Sie AGP zwingen möchten, die DEX-Dateien stattdessen komprimiert zu verpacken, können Sie der Datei build.gradle Folgendes hinzufügen:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Komprimierte native Bibliotheken mit der DSL verpacken

Wir empfehlen, native Bibliotheken in unkomprimierter Form zu verpacken, da dies zu einer geringeren App-Installationsgröße, einer geringeren App-Downloadgröße und einer kürzeren App-Ladezeit für Ihre Nutzer führt. Wenn das Android Gradle-Plug-in jedoch komprimierte native Bibliotheken beim Erstellen Ihrer App verpacken soll, setzen Sie in der build.gradle-Datei Ihrer App useLegacyPackaging auf true:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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