Android-Gradle-Plug-in 7.0.0 (Juli 2021)
Das Android-Gradle-Plug-in 7.0.0 ist ein wichtiger Release, der 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 Blog „Release Updates“.
Kompatibilität
| Mindestversion | Standardversion | 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 Sie oder konfigurieren Sie eine andere Version des NDK. |
| JDK | 11 | 11 | Weitere Informationen finden Sie unter JDK-Version festlegen. |
Für die Ausführung von AGP 7.0 ist JDK 11 erforderlich
Wenn Sie das Android-Gradle-Plug-in 7.0 zum Erstellen Ihrer App verwenden, ist JDK 11 jetzt für die Ausführung von Gradle erforderlich. Android Studio Arctic Fox enthält JDK 11 und konfiguriert Gradle so, 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 veralteten 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 Varianten-API ist jetzt stabil. Informationen zu den neuen Schnittstellen finden Sie im com.android.build.api.variant Paket und Beispiele im gradle-recipes GitHub-Projekt. Im Rahmen der neuen Varianten-API haben wir über die Artifacts Schnittstelle eine Reihe von Zwischendateien (sogenannte 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 Varianten-API weiter ausbauen, indem wir neue Funktionen hinzufügen und die Anzahl der Zwischenartefakte erhöhen, die wir zur Anpassung zur Verfügung stellen.
Verhaltensänderungen für Lint
In diesem Abschnitt werden mehrere Verhaltensänderungen für Lint im Android-Gradle Plug-in 7.0.0 beschrieben.
Verbessertes Lint 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 Bibliotheks
abhängigkeiten bestehen, empfiehlt es sich, checkDependencies auf
true wie unten gezeigt zu setzen und Lint über
./gradlew :app:lint auszuführen. Dadurch werden alle Abhängigkeits
module 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-Analyse
Aufgabe 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 Lint mit dieser Änderung für ein Anwendungsmodul mit checkDependencies = true ausführen, müssen nur Module, die sich geändert haben, ihre Analyse ausführen. Dadurch kann Lint noch schneller ausgeführt werden.
Die Lint-Berichtsaufgabe muss auch nicht ausgeführt werden, wenn sich die Eingaben nicht geändert haben. Ein damit zusammenhängendes bekanntes Problem ist, dass keine Lint Textausgabe an stdout ausgegeben wird, wenn die Lint-Aufgabe „UP-TO-DATE“ ist (Problem 191897708).
Lint für dynamische Funktionsmodule ausführen
AGP unterstützt die Ausführung von Lint aus dynamischen Funktionsmodulen nicht mehr.
Wenn Sie Lint aus dem entsprechenden Anwendungsmodul ausführen, wird Lint für
die dynamischen Funktionsmodule ausgeführt und alle Probleme werden in den Lint-Bericht der App aufgenommen. Ein damit zusammenhängendes bekanntes Problem ist, dass beim Ausführen von Lint
mit checkDependencies = true aus einem App-Modul die Abhängigkeiten von Bibliotheken für dynamische Funktionen nur dann geprüft werden, wenn sie auch App
Abhängigkeiten sind (Problem
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.
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 auswerten.
Wenn R8 auf eine Klassenreferenz stößt, die 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.ClassFileTransformerDiese Warnung bedeutet, dass die Klassendefinition
java.lang.instrument.ClassFileTransformer nicht gefunden wurde
bei der Analyse des App-Codes. 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 sind vom JVM Bibliothekstyp (wie im obigen Beispiel).
-
Eine Ihrer Abhängigkeiten verwendet eine API, die nur zur Kompilierzeit verwendet wird.
Sie können eine Warnung zu einer fehlenden Klasse ignorieren, indem Sie der Datei proguard-rules.pro eine -dontwarn
-Regel hinzufügen. Beispiel:
-dontwarn java.lang.instrument.ClassFileTransformerZur Vereinfachung 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 proguard-rules.pro Datei hinzu, um Warnungen zu ignorieren.
In AGP 7.0 werden Nachrichten 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 den Build unterbrechen. Sie können das Verhalten von AGP 7.0 beibehalten, indem Sie der Datei proguard-rules.pro die Option -ignorewarnings hinzufügen. Das wird jedoch nicht empfohlen.
Android-Gradle-Plug-in-Build-Cache 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-Dauer.
In AGP 7.0 wurden die android.enableBuildCache Property,
die android.buildCacheDir Property und die
cleanBuildCache Aufgabe entfernt.
Java 11-Quellcode im Projekt verwenden
Sie können jetzt bis zu Java 11-Quellcode im Projekt Ihrer App kompilieren und so 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 legen Sie 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 diese durchapioderimplementationersetzt.
Gilt auch für *Compile-Varianten, z. B.debugCompile. -
provided
Diese wurde durchcompileOnlyersetzt.
Gilt auch für *Provided-Varianten, z. B.:releaseProvided. -
apk
Dies wurde durchruntimeOnlyersetzt. -
publish
Diese wurde durchruntimeOnlyersetzt.
In den meisten Fällen migriert der AGP Upgrade Assistant Ihr Projekt automatisch zu den neuen Konfigurationen.
Änderung des Klassenpfads beim Kompilieren mit dem Android-Gradle-Plug-in
Wenn Sie mit dem Android-Gradle-Plug-in kompilieren, kann sich der Kompilier
klassenpfad ändern. Da AGP jetzt intern api/implementation
Konfigurationen verwendet, werden einige Artefakte möglicherweise aus dem Kompilier
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 für
native Bibliotheken: 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 dem Kotlin Multiplatform-Plug-in 1.4.x
Das Android-Gradle-Plug-in 7.0.0 ist mit Kotlin Multiplatform-Plug-in 1.5.0 und höher kompatibel. Projekte, die die Kotlin Multiplatform-Unterstü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 Behelfslösung können Sie das Android-Gradle-Plug-in auf 4.2.x downgraden. Das wird jedoch nicht empfohlen.
Weitere Informationen finden Sie unter KT-43944.
Fehlende Lint-Ausgabe
Wenn die Lint-Aufgabe auf dem neuesten Stand ist, wird keine Lint-Textausgabe an stdout ausgegeben (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 Bibliotheksabhängigkeiten für dynamische Funktionen werden mit Lint geprüft
Wenn Sie Lint mit checkDependencies = true aus einem
App-Modul ausführen, werden die Abhängigkeiten von Bibliotheken für dynamische Funktionen nur dann geprüft, wenn sie auch App-Abhängigkeiten sind
(Problem 191977888).
Als Behelfslösung kann die Lint-Aufgabe für diese Bibliotheken ausgeführt werden. Weitere Informationen finden Sie unter Verhaltensänderungen für Lint.