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 kleinere Update enthält verschiedene Fehlerkorrekturen. Eine Liste der wichtigsten Fehlerkorrekturen finden Sie im zugehörigen Beitrag im Release Updates-Blog.
Kompatibilität
Mindestversion | Standardversio | Hinweise | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | 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. |
JDK | 11 | 11 | Weitere Informationen finden Sie unter JDK-Version festlegen. |
JDK 11 für AGP 7.0 erforderlich
Wenn Sie das Android Gradle-Plug-in 7.0 zum Erstellen Ihrer App verwenden, ist jetzt JDK 11 erforderlich, um Gradle auszuführen. In Android Studio Arctic Fox ist JDK 11 enthalten und Gradle ist so konfiguriert, dass es standardmäßig verwendet wird. Die meisten Android Studio-Nutzer müssen daher keine Konfigurationsänderungen an ihren Projekten vornehmen.
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, aktualisieren Sie die JDK-Version, indem Sie die Umgebungsvariable JAVA_HOME oder die -Dorg.gradle.java.home
-Befehlszeilenoption auf das Installationsverzeichnis von JDK 11 festlegen.
Der SDK Manager und der AVD Manager im eingestellten SDK Tools-Paket funktionieren nicht mit JDK 11. Wenn Sie den SDK Manager und den AVD Manager weiterhin mit AGP 7.0 und höher verwenden möchten, müssen Sie zu den neuen Versionen der Tools im aktuellen Android SDK Command-Line Tools-Paket wechseln.
Varianten-API stabil
Die neue Variant API ist jetzt stabil. Die neuen Schnittstellen finden Sie im Paket com.android.build.api.variant und Beispiele im GitHub-Projekt gradle-recipes. Im Rahmen der neuen Variant API haben wir über die Schnittstelle Artifacts eine Reihe von Zwischendateien (Artefakte) zur Verfügung gestellt. Diese Artefakte, z. B. das zusammengeführte Manifest, können sicher mit Drittanbieter-Plug-ins und -Code abgerufen und angepasst werden.
Wir werden die Variant API weiter ausbauen, indem wir neue Funktionen hinzufügen und die Anzahl der Zwischenartefakte erhöhen, die wir für die Anpassung zur Verfügung stellen.
Verhaltensänderungen für Lint
In diesem Abschnitt werden mehrere Verhaltensänderungen von Lint im Android-Gradle-Plug-in 7.0.0 beschrieben.
Verbesserte Lint-Prüfung für Bibliotheksabhängigkeiten
Die Ausführung von Lint mit checkDependencies = true
ist jetzt schneller als zuvor. Für Android-Projekte, die aus einer App mit Bibliotheksabhängigkeiten bestehen, wird empfohlen, checkDependencies
auf true
zu setzen, wie unten gezeigt, und Lint über ./gradlew :app:lint
auszuführen. Dadurch werden alle Abhängigkeitsmodule parallel analysiert und ein einzelner Bericht mit Problemen aus der App und allen ihren Abhängigkeiten erstellt.
Groovy
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
Lint-Aufgaben können jetzt UP-TO-DATE 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. Wenn Sie mit dieser Änderung „lint“ für ein Anwendungsmodul mit checkDependencies = true
ausführen, muss die Analyse nur für Module ausgeführt werden, die sich geändert haben. Dadurch kann Lint noch schneller ausgeführt werden.
Die Aufgabe für den Lint-Bericht muss auch nicht ausgeführt werden, wenn sich die Eingaben nicht geändert haben. Ein ähnliches bekanntes Problem ist, dass keine Lint-Textausgabe in stdout ausgegeben wird, wenn die Lint-Aufgabe UP-TO-DATE ist (Problem 191897708).
Lint für dynamische Funktionsmodule ausführen
AGP unterstützt das Ausführen von Lint aus Dynamic-Feature-Modulen nicht mehr.
Wenn Sie Lint über das entsprechende Anwendungsmodul ausführen, wird Lint für die zugehörigen Dynamic Feature-Module ausgeführt und alle Probleme werden in den Lint-Bericht der App aufgenommen. Ein bekanntes Problem besteht darin, dass beim Ausführen von „lint“ mit checkDependencies = true
in einem App-Modul keine Abhängigkeiten von Dynamic-Feature-Bibliotheken geprüft werden, sofern sie nicht auch App-Abhängigkeiten sind (Problem 191977888).
Lint wird nur für die Standardvariante ausgeführt
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.
Warnungen zu fehlenden Klassen im R8-Shrinker
R8 verarbeitet fehlende Klassen und die Option -dontwarn
genauer und konsistenter.
Daher sollten Sie die von R8 ausgegebenen Warnungen zu fehlenden Klassen prüfen.
Wenn R8 auf einen Klassenverweis stößt, der nicht in Ihrer App oder einer ihrer Abhängigkeiten definiert ist, wird eine Warnung ausgegeben, die in der Build-Ausgabe angezeigt wird. Beispiel:
R8: Missing class: java.lang.instrument.ClassFileTransformer
Diese Warnung bedeutet, dass die Klassendefinition java.lang.instrument.ClassFileTransformer
bei der Analyse des App-Codes nicht gefunden wurde. Das bedeutet in der Regel, dass ein Fehler vorliegt. Es ist jedoch möglich, dass Sie diese Warnung ignorieren möchten. Zwei häufige Gründe, die Warnung zu ignorieren:
-
Bibliotheken, die auf die JVM ausgerichtet sind und die fehlende Klasse enthalten, haben den JVM-Bibliothekstyp (wie im Beispiel oben).
-
Eine Ihrer Abhängigkeiten verwendet eine API, die nur zur Kompilierzeit verfügbar ist.
Sie können eine Warnung zu einer fehlenden Klasse ignorieren, indem Sie Ihrer proguard-rules.pro
-Datei eine -dontwarn
-Regel hinzufügen. Beispiel:
-dontwarn java.lang.instrument.ClassFileTransformer
AGP generiert 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 Meldungen zu fehlenden Klassen 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 unterbrechen. Sie können das Verhalten von AGP 7.0 beibehalten, indem Sie die Option -ignorewarnings
in Ihre proguard-rules.pro
-Datei einfügen. Das 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 zum Gradle-Build-Cache eingeführt und in AGP 4.1 vollständig durch den Gradle-Build-Cache ersetzt. Diese Änderung hat keine Auswirkungen auf die Build-Zeit.
In AGP 7.0 wurden das Attribut android.enableBuildCache
, das Attribut android.buildCacheDir
und die Aufgabe cleanBuildCache
entfernt.
Java 11-Quellcode in Ihrem Projekt verwenden
Sie können jetzt Quellcode bis zu Java 11 im Projekt Ihrer App kompilieren. So können Sie neuere Sprachfunktionen wie private Schnittstellenmethoden, den Diamond-Operator für anonyme Klassen und die Syntax für lokale Variablen für Lambda-Parameter verwenden.
Wenn Sie diese Funktion aktivieren möchten, legen Sie compileOptions
auf die gewünschte Java-Version und compileSdkVersion
auf 30 oder höher fest:
// 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 *Compile-Varianten, z. B.debugCompile
. -
provided
Dieses Attribut wurde durchcompileOnly
ersetzt.
Gilt auch für *bereitgestellte Varianten, z. B.:releaseProvided
. -
apk
Dieses Attribut wurde durchruntimeOnly
ersetzt. -
publish
Dieses Attribut wurde durchruntimeOnly
ersetzt.
In den meisten Fällen migriert der AGP Upgrade Assistant Ihr Projekt automatisch zu den neuen Konfigurationen.
Classpath-Änderung beim Kompilieren mit dem Android-Gradle-Plug-in
Wenn Sie das Android-Gradle-Plug-in verwenden, kann sich der Kompilierungs-Classpath ändern. Da AGP jetzt intern api/implementation
-Konfigurationen verwendet, werden einige Artefakte möglicherweise aus Ihrem Kompilierungs-Klassenpfad entfernt. Wenn Sie zur Kompilierzeit von einer AGP-Abhängigkeit abhängig sind, müssen Sie sie als explizite Abhängigkeit hinzufügen.
Das Hinzufügen nativer Bibliotheken in einem Java-Ressourcenordner wird nicht unterstützt.
Bisher konnten Sie eine native Bibliothek in einem Java-Ressourcenordner hinzufügen und den Ordner mit android.sourceSets.main.resources.srcDirs
registrieren, damit die native Bibliothek extrahiert und dem endgültigen APK hinzugefügt wird. Ab AGP 7.0 wird dies nicht mehr unterstützt und native Bibliotheken in einem Java-Ressourcenordner werden ignoriert. Verwenden Sie stattdessen die DSL-Methode android.sourceSets.main.jniLibs.srcDirs
, die für native Bibliotheken vorgesehen ist. Weitere Informationen finden Sie unter Quellsets konfigurieren.
Bekannte Probleme
In diesem Abschnitt werden bekannte Probleme im Android Gradle-Plug-in 7.0.0 beschrieben.
Inkompatibilität mit dem Kotlin Multiplatform-Plug-in 1.4.x
Das Android-Gradle-Plug-in 7.0.0 ist mit dem Kotlin Multiplatform-Plug-in ab Version 1.5.0 kompatibel. Projekte, die die Kotlin-Multiplattformunterstützung verwenden, müssen auf Kotlin 1.5.0 aktualisiert werden, um das Android Gradle-Plug-in 7.0.0 verwenden zu können. Als Workaround können Sie ein Downgrade des Android-Gradle-Plug-ins auf Version 4.2.x durchführen. Dies wird jedoch nicht empfohlen.
Weitere Informationen finden Sie unter KT-43944.
Fehlende Lint-Ausgabe
Es wird keine Lint-Textausgabe in stdout ausgegeben, wenn die Lint-Aufgabe auf dem neuesten Stand ist (Problem 191897708). Weitere Informationen finden Sie unter Verhaltensänderungen für Lint. Dieses Problem wird im Android-Gradle-Plug-in 7.1 behoben.
Nicht alle Abhängigkeiten von Dynamic-Feature-Bibliotheken werden mit Lint geprüft
Wenn Sie „lint“ mit checkDependencies = true
in einem App-Modul ausführen, werden Abhängigkeiten von Dynamic Feature-Bibliotheken nur geprüft, wenn sie auch App-Abhängigkeiten sind (Problem 191977888).
Als Workaround kann der Lint-Task für diese Bibliotheken ausgeführt werden. Weitere Informationen finden Sie unter Verhaltensänderungen für Lint.