Android Gradle-Plug-in 7.0.0 (Juli 2021)
Das Android Gradle-Plug-in 7.0.0 ist eine Hauptversion, die eine Vielzahl neuer Funktionen und Verbesserungen enthält.
7.0.1 (August 2021)
Dieses kleine Update umfasst verschiedene Fehlerkorrekturen. Eine Liste der wichtigsten Fehlerkorrekturen finden Sie im entsprechenden Beitrag im Blog „Release Updates“.
Kompatibilität
Mindestversion | Standardversio | |
---|---|---|
Gradle | 7.0.2 | 7.0.2 |
SDK-Build-Tools | 30.0.2 | 30.0.2 |
Logo: NDK | – | 21.4.7075529 |
JDK | 11 | 11 |
JDK 11 zur Ausführung von AGP 7.0 erforderlich
Wenn Sie Ihre App mit dem Android Gradle-Plug-in 7.0 erstellen, ist jetzt JDK 11 zum Ausführen von Gradle erforderlich. In Android Studio Arctic Fox wird JDK 11 gebündelt und Gradle so konfiguriert, dass es standardmäßig verwendet wird. Das bedeutet, dass die meisten Android Studio-Nutzer keine Änderungen an der Konfiguration ihrer Projekte vornehmen müssen.
Wenn Sie die von AGP in Android Studio verwendete JDK-Version manuell festlegen müssen, müssen Sie JDK 11 oder höher verwenden.
Wenn Sie AGP unabhängig von Android Studio verwenden, führen Sie ein Upgrade der JDK-Version aus. Dazu legen Sie für die Umgebungsvariable JAVA_HOME oder die Befehlszeilenoption -Dorg.gradle.java.home
das Installationsverzeichnis von JDK 11 fest.
SDK Manager und AVD Manager im eingestellten SDK Tools-Paket funktionieren nicht mit JDK 11. Wenn Sie SDK Manager und AVD Manager weiterhin mit AGP 7.0 und höher verwenden möchten, müssen Sie auf die neuen Versionen der Tools im aktuellen Android SDK-Befehlszeilentools-Paket umstellen.
Variant API (stabile Version)
Die neue Variant API ist jetzt stabil. Sehen Sie sich die neuen Schnittstellen im Paket com.android.build.api.variant und Beispiele im GitHub-Projekt gradle-recipes an. Im Rahmen der neuen Variant API haben wir über die Schnittstelle Artifacts eine Reihe von Zwischendateien, sogenannte Artefakte, zur Verfügung gestellt. Diese Artefakte, wie das zusammengeführte Manifest, können mithilfe von Drittanbieter-Plug-ins und -Code sicher abgerufen und angepasst werden.
Wir werden die Variant API weiter ausbauen, um neue Funktionen hinzuzufügen und die Anzahl der Zwischenartefakte zu erhöhen, die wir für die Anpassung zur Verfügung stellen.
Verhaltensänderungen bei Lint
In diesem Abschnitt werden mehrere Änderungen des Lint-Verhaltens im Android-Gradle-Plug-in 7.0.0 beschrieben.
Verbesserter Lint für Bibliotheksabhängigkeiten
Das Ausführen von Lint mit checkDependencies = true
ist jetzt schneller als zuvor. Bei Android-Projekten, die aus einer App mit Bibliotheksabhängigkeiten bestehen, wird empfohlen, checkDependencies
auf true
festzulegen und Lint über ./gradlew :app:lint
auszuführen. Dadurch werden alle Abhängigkeitsmodule parallel analysiert und ein einziger Bericht mit Problemen der App und aller Abhängigkeiten erstellt.
Groovig
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
Lint-Aufgaben können jetzt auf dem neuesten Stand sein
Wenn sich die Quellen und Ressourcen eines Moduls nicht geändert haben, muss die Lint-Analyseaufgabe für das Modul nicht noch einmal ausgeführt werden. In diesem Fall wird die Ausführung der Aufgabe in der Gradle-Ausgabe als "UP-TO-DATE" angezeigt. Durch diese Änderung müssen beim Ausführen von Lint für ein Anwendungsmodul mit checkDependencies = true
nur geänderte Module die Analyse ausführen. Dadurch kann Lint noch schneller ausgeführt werden.
Die Lint-Berichtsaufgabe muss auch nicht ausgeführt werden, wenn sich ihre Eingaben nicht geändert haben. Ein ähnliches bekanntes Problem besteht darin, dass keine Lint-Textausgabe in stdout ausgegeben wird, wenn die Lint-Aufgabe den AKTUELLEN DATUM hat (Problem #191897708).
Lint auf Module mit dynamischen Funktionen ausführen
AGP unterstützt das Ausführen von Lint aus dynamischen Funktionsmodulen nicht mehr.
Wenn Sie Lint aus dem entsprechenden Anwendungsmodul ausführen, wird Lint auf den Modulen der dynamischen Funktionen ausgeführt und alle Probleme werden in den Lint-Bericht der App aufgenommen. Ein ähnliches bekanntes Problem besteht darin, dass beim Ausführen von Lint mit checkDependencies = true
aus einem Anwendungsmodul die Abhängigkeiten der Dynamic Feature Library nur geprüft werden, wenn es sich auch um Anwendungsabhängigkeiten handelt (Problem Nr. 191977888).
Lint nur für die Standardvariante ausführen
Wenn Sie ./gradlew :app:lint
ausführen, wird Lint jetzt nur für die Standardvariante ausgeführt. In früheren Versionen von AGP wurde Lint für alle Varianten ausgeführt.
Fehlende Klassenwarnungen in R8 Shrinker
R8 verarbeitet fehlende Klassen und die Option -dontwarn
präziser und konsistenter.
Daher sollten Sie mit der Auswertung der fehlenden Klassenwarnungen beginnen, die von R8 ausgegeben werden.
Wenn R8 auf einen Klassenverweis stößt, der in der Anwendung oder in einer ihrer Abhängigkeiten nicht definiert ist, wird in der Build-Ausgabe eine Warnung ausgegeben. Beispiele:
R8: Missing class: java.lang.instrument.ClassFileTransformer
Diese Warnung bedeutet, dass die Klassendefinition java.lang.instrument.ClassFileTransformer
beim Analysieren des Anwendungscodes nicht gefunden wurde. Das bedeutet normalerweise, dass ein Fehler vorliegt. Es ist aber möglich, dass Sie diese Warnung ignorieren. Zwei häufige Gründe für das Ignorieren der Warnung sind:
-
Bibliotheken, die auf die JVM und die fehlende Klasse abzielen, haben einen JVM-Bibliothekstyp (wie im obigen Beispiel).
-
Eine Ihrer Abhängigkeiten verwendet eine API, die nur zur Kompilierungszeit verwendet wird.
Sie können eine Warnung über fehlende Klassen ignorieren, indem Sie der Datei proguard-rules.pro
die Regel -dontwarn
hinzufügen. Beispiele:
-dontwarn java.lang.instrument.ClassFileTransformer
Der Einfachheit halber generiert AGP eine Datei, die alle potenziell fehlenden Regeln enthält, und schreibt sie in einen Dateipfad wie den folgenden: app/build/outputs/mapping/release/missing_rules.txt
. Fügen Sie die Regeln der Datei proguard-rules.pro
hinzu, um Warnungen zu ignorieren.
In AGP 7.0 werden fehlende Klassennachrichten als Warnungen angezeigt. Sie können sie in Fehler umwandeln, indem Sie android.r8.failOnMissingClasses = true
in gradle.properties
festlegen. In AGP 8.0 werden diese Warnungen zu Fehlern, die Ihren Build beschädigen. Sie können das Verhalten von AGP 7.0 beibehalten, indem Sie der Datei proguard-rules.pro
die Option -ignorewarnings
hinzufügen. Dies wird jedoch nicht empfohlen.
Build-Cache des Android-Gradle-Plug-ins entfernt
Der AGP-Build-Cache wurde in AGP 4.1 entfernt. Der AGP-Build-Cache wurde in AGP 2.3 als Ergänzung des Gradle-Build-Cache eingeführt. Er wurde in AGP 4.1 vollständig durch den Gradle-Build-Cache ersetzt. Diese Änderung hat keine Auswirkungen auf die Build-Dauer.
In AGP 7.0 wurden die Attribute android.enableBuildCache
, android.buildCacheDir
und die Aufgabe cleanBuildCache
entfernt.
Java 11-Quellcode in Ihrem Projekt verwenden
Sie können im Projekt Ihrer App jetzt bis zu Java 11-Quellcode kompilieren. Dadurch können Sie neuere Sprachfunktionen wie private Schnittstellenmethoden, den Diamant-Operator für anonyme Klassen und die Syntax lokaler Variablen für Lambda-Parameter verwenden.
Um diese Funktion zu aktivieren, setzen Sie compileOptions
auf die gewünschte Java-Version und compileSdkVersion
auf 30 oder höher:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
Abhängigkeitskonfigurationen entfernt
In AGP 7.0 wurden die folgenden Konfigurationen (oder Abhängigkeitsbereiche) entfernt:
-
compile
Je nach Anwendungsfall wurde dies durchapi
oderimplementation
ersetzt.
Gilt auch für *Kompilierung-Varianten, z. B.debugCompile
. -
provided
Dies wurde durchcompileOnly
ersetzt.
Gilt auch für *bereitgestellte Varianten, z. B.releaseProvided
. -
apk
Dies wurde durchruntimeOnly
ersetzt. -
publish
Dies wurde durchruntimeOnly
ersetzt.
In den meisten Fällen migriert der AGP-Upgrade-Assistent Ihr Projekt automatisch zu den neuen Konfigurationen.
Klassenpfadänderung beim Kompilieren mit dem Android-Gradle-Plug-in
Wenn Sie mit dem Android-Gradle-Plug-in kompilieren, kann sich Ihr kompilierungsklassenpfad ändern. Da AGP jetzt api/implementation
-Konfigurationen intern verwendet, werden möglicherweise einige Artefakte aus Ihrem kompilierten Klassenpfad entfernt. Wenn Sie bei der Kompilierung von einer AGP-Abhängigkeit abhängig sind, achten Sie darauf, sie als explizite Abhängigkeit hinzuzufügen.
Native Bibliotheken können nicht in einen Java-Ressourcenordner eingefügt werden.
Bisher konntest du einem Java-Ressourcenordner eine native Bibliothek hinzufügen und den Ordner mit android.sourceSets.main.resources.srcDirs
registrieren. Dadurch wurde die native Bibliothek extrahiert und dem endgültigen APK hinzugefügt. Ab AGP 7.0 wird dies nicht unterstützt und native Bibliotheken in einem Java-Ressourcenordner werden ignoriert. Verwenden Sie stattdessen die für native Bibliotheken vorgesehene DSL-Methode (android.sourceSets.main.jniLibs.srcDirs
). Weitere Informationen finden Sie unter Quellsätze konfigurieren.
Bekannte Probleme
In diesem Abschnitt werden bekannte Probleme im Android-Gradle-Plug-in 7.0.0 beschrieben.
Inkompatibilität mit Kotlin-Multiplatform-Plug-in 1.4.x
Das Android Gradle-Plug-in 7.0.0 ist mit dem Kotlin Multiplatform-Plug-in 1.5.0 und höher kompatibel. Projekte, die Kotlin-Multiplattform-Unterstützung nutzen, müssen auf Kotlin 1.5.0 aktualisiert werden, um das Android Gradle-Plug-in 7.0.0 verwenden zu können. Um das Problem zu umgehen, können Sie ein Downgrade des Android-Gradle-Plug-ins auf 4.2.x ausführen. Dies wird jedoch nicht empfohlen.
Weitere Informationen findest du unter KT-43944.
Fehlende Lint-Ausgabe
Wenn die Lint-Aufgabe auf dem neuesten Stand ist, wird keine Lint-Textausgabe in stdout ausgegeben (Problem #191897708). Weitere Informationen finden Sie unter Verhaltensänderungen bei Lint. Dieses Problem wird im Android-Gradle-Plug-in 7.1 behoben.
Nicht alle Abhängigkeiten der Bibliothek mit dynamischen Funktionen sind mit Lint überprüft
Wenn Sie Lint mit checkDependencies = true
aus einem Anwendungsmodul ausführen, werden Abhängigkeiten der Dynamic Feature Library nicht geprüft, es sei denn, es sind auch Anwendungsabhängigkeiten (Problem #191977888).
Als Behelfslösung kann die Lint-Task für diese Bibliotheken ausgeführt werden. Weitere Informationen finden Sie unter Verhaltensänderungen bei Lint.