Android-Gradle-Plug-in 7.1.0 (Januar 2022)
Das Android-Gradle-Plug-in 7.1.0 ist ein wichtiger Release, der eine Vielzahl neuer Funktionen und Verbesserungen enthält.
7.1.3 (April 2022)
Dieses kleinere Update enthält die folgenden Fehlerkorrekturen:
- Von R8 gemeldete Probleme mit doppelten Klassen
Eine vollständige Liste der in diesem Release enthaltenen Fehlerkorrekturen finden Sie im Blogpost Android Studio Bumblebee Patch 3.
7.1.2 (Februar 2022)
Dieses kleinere Update enthält die folgenden Fehlerkorrekturen:
- Android-Gradle-Plug-in 7.1.0-rc01 führt bei Unittests keine ASM-Bytecode Transformation durch
- Die Gradle-Synchronisierung schlägt mit der Meldung „Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'“ fehl
- Einige neue DSL-Blöcke können in Android-Gradle Plug-in 7.0.0 nicht über die Groovy-DSL verwendet werden
- Neue Veröffentlichungs-API von AGP 7.1: Erstellte Javadoc-JAR-Datei wird nicht signiert
- ClassesDataSourceCache sollte die neueste ASM-Version verwenden
- Android Studio Bumblebee stellt nicht immer die neuesten Änderungen bereit
Eine vollständige Liste der in diesem Release enthaltenen Fehlerkorrekturen finden Sie im Blogpost Android Studio Bumblebee Patch 2.
7.1.1 (Februar 2022)
Dieses kleinere Update entspricht dem Release von Android Studio Bumblebee Patch 1.
Eine Liste der in diesem Release enthaltenen Fehlerkorrekturen finden Sie im Blogpost Android Studio Bumblebee Patch 1.
Kompatibilität
| Mindestversion | Standardversion | Hinweise | |
|---|---|---|---|
| Gradle | 7.2 | 7.2 | Weitere Informationen finden Sie unter Gradle aktualisieren. |
| SDK-Build-Tools | 30.0.3 | 30.0.3 | 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. |
Lint-Analyseaufgabe ist jetzt cachefähig
Das AndroidLintAnalysisTask ist jetzt mit dem
Gradle
Build-Cache kompatibel. Wenn Sie den Build-Cache aktivieren, indem Sie in der Datei gradle.properties
die Einstellung
org.gradle.caching=true festlegen, wird die Ausgabe der Lint-Analyseaufgabe nach Möglichkeit aus dem Build-Cache abgerufen.
Die Lint-Analyseaufgabe ist oft der größte Engpass, wenn Lint mit dem Android-Gradle-Plug-in ausgeführt wird. Durch Aktivieren des Build-Cache wird die Build Geschwindigkeit in vielen Fällen verbessert. Sie sollten eine spürbare Leistungssteigerung feststellen, z. B. wenn Sie ein Projekt mit mehreren Modulen haben und das Build-Verzeichnis bereinigen, bevor Sie Lint auf Ihrem CI-Server ausführen.
C/C++-Module können jetzt auf andere C/C++-Module in demselben Projekt verweisen
Ein Gradle-Android-Modul mit C/C++-Code kann jetzt so eingerichtet werden, dass es auf Headerdateien und Bibliothekscode in einem anderen Gradle-Modul verweist. Das Prefab Protokoll wird verwendet, um die Header und Bibliotheken zwischen Gradle-Modulen zu übertragen.
Voraussetzungen
-
Das verwendende Modul muss
CMakeund nichtndk-buildsein. Die Unterstützung für „ndk-build“ erfordert ein zukünftiges NDK-Update. Das veröffentlichende Modul kannCMakeoderndk-buildsein. -
Im verwendenden Modul muss
prefabin derbuild.gradleDatei aktiviert sein.
android {
buildFeatures {
prefab true
}
}- Im veröffentlichenden Modul muss
prefabPublishingin derbuild.gradleDatei aktiviert sein.
android {
buildFeatures {
prefabPublishing true
}
}- Das verwendende Modul muss auf das veröffentlichende
Modul verweisen, indem im
dependenciesBlock derbuild.gradleDatei eine Zeile hinzugefügt wird. Beispiel:
dependencies {
implementation project(':mylibrary')
}- Das veröffentlichende Modul muss ein Paket mit einem
prefabAbschnitt verfügbar machen. Beispiel:
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}- In der Datei
CMakeLists.txtdes verwendenden Moduls kannfind_package()verwendet werden, um das vom erstellenden Modul veröffentlichte Paket zu finden. Beispiel:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)- Für die gesamte Anwendung muss eine STL vorhanden sein. So können beispielsweise sowohl das verwendende als auch das veröffentlichende Modul die gemeinsame C++-STL verwenden.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}Weitere Informationen zum Konfigurieren von nativen AAR-Verwendern und -Erstellern mit AGP finden Sie unter Native Abhängigkeiten mit AGP.
Repository-Einstellungen in der Datei settings.gradle
Wenn in Android Studio Bumblebee ein neues Projekt erstellt wird, enthält die Datei auf oberster Ebene
build.gradle den Block plugins,
gefolgt von Code zum Bereinigen des Build-Verzeichnisses:
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}Die Repository-Einstellungen, die sich zuvor in der Datei auf oberster Ebene
build.gradle befanden, sind jetzt in der Datei settings.gradle:
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'Die Datei build.gradle auf Modulebene hat sich nicht geändert. Verwenden Sie also die Datei auf oberster Ebene
build.gradle und die Datei settings.gradle, um Build
Konfigurationen zu definieren, die für alle Module in Ihrem Projekt gelten, oder die Repositorys
und Abhängigkeiten, die für Gradle selbst gelten. Verwenden Sie die Datei auf Modulebene
build.gradle, um Build-Konfigurationen zu definieren, die für ein bestimmtes
Modul in Ihrem Projekt gelten.
Verbesserter Resource Shrinker
Android Studio Bumblebee enthält einen verbesserten Resource Shrinker, mit dem Sie die Größe Ihrer App reduzieren können.
Unterstützung für Apps mit dynamischen Funktionen
Die Standardimplementierung des Android Resource Shrinker wurde im Android-Gradle-Plug-in 7.1.0-alpha09 aktualisiert. Die neue Implementierung unterstützt das Komprimieren von Apps mit dynamischen Funktionen.
Experimentelle weitere Reduzierungen der App-Größe
Die neue Implementierung des Resource Shrinker kann die Größe Ihrer
komprimierten App noch weiter reduzieren, indem die Ressourcentabelle so geändert wird, dass nicht verwendete
Wertressourcen und Verweise auf nicht verwendete Dateiressourcen entfernt werden. Der neue Resource
Shrinker kann nicht verwendete Dateiressourcen vollständig löschen und so die Größe Ihrer App weiter reduzieren. Dieses Verhalten ist noch nicht standardmäßig aktiviert. Sie können es aber testen, indem Sie die experimentelle Option
android.experimental.enableNewResourceShrinker.preciseShrinking=true
zur Datei gradle.properties Ihres Projekts hinzufügen.
Bitte melden Sie alle Probleme, die Sie mit dem neuen Resource Shrinker oder dem
experimentellen Flag finden. Um Probleme zu diagnostizieren oder als temporäre Problemumgehung, können Sie zur vorherigen Implementierung zurückkehren, indem Sie
android.enableNewResourceShrinker=false zur Datei
gradle.properties Ihres Projekts hinzufügen.
Der neue Shrinker ersetzt nicht verwendete dateibasierte Ressourcen durch etwas andere
minimale Dateien als der vorherige Resource Shrinker. Dies sollte sich jedoch nicht
auf die Laufzeit auswirken.
Die alte Implementierung soll im Android-Gradle Plug-in 8.0.0 entfernt werden.
Veröffentlichung von Build-Varianten
Mit dem Android-Gradle-Plug-in 7.1.0 und höher können Sie konfigurieren, welche Build Varianten in einem Apache Maven-Repository veröffentlicht werden sollen. AGP erstellt eine Komponente mit einer oder mehreren Build-Varianten basierend auf der neuen Veröffentlichungs-DSL, mit der Sie eine Veröffentlichung in einem Maven-Repository anpassen können. Im Vergleich zu früheren Versionen wird so auch unnötige Arbeit vermieden, da standardmäßig keine Komponenten erstellt werden. Weitere Informationen finden Sie im Codebeispiel zur Veröffentlichung.
Javadoc-JAR veröffentlichen
Mit AGP 7.1.0 und höher können Sie Javadoc aus Java- und Kotlin
Quellen generieren und zusätzlich zu AARs für Bibliothek
Projekte Javadoc-JAR-Dateien veröffentlichen. Javadoc wird den Dateien POM und
Gradle Module Metadata{:.external}
hinzugefügt. Aktivieren Sie diese Funktion, indem Sie withJavadocJar() in dem
singleVariant oder multipleVariants Veröffentlichungsblock hinzufügen.
Weitere Informationen finden Sie im
Codebeispiel zu den Veröffentlichungsoptionen.
Quell-JAR veröffentlichen
Mit AGP 7.1.0 und höher können Sie zusätzlich zu AARs für Bibliotheksprojekte Java- und Kotlin-Quell-JAR
Dateien veröffentlichen. Die Quellen werden den
Dateien POM und
Gradle Module Metadata{:.external} hinzugefügt. Aktivieren Sie diese
Funktion, indem Sie withSourcesJar() im
singleVariant oder multipleVariants Veröffentlichungs
Block hinzufügen. Weitere Informationen finden Sie im
Codebeispiel zu den Veröffentlichungsoptionen.
Semantische Änderung des Lint-Blocks
Alle Lint-Methoden, die die angegebene Schweregradstufe eines
Problems überschreiben (enable, disable/ignore,
informational, warning, error,
fatal), berücksichtigen jetzt die Reihenfolge der Konfiguration. Wenn Sie beispielsweise
ein Problem als schwerwiegend festlegen in
finalizeDsl()
wird es jetzt überschrieben, wenn es in der Haupt-DSL deaktiviert wird. Weitere Informationen finden Sie in der
lint{}
Referenzdokumentation zum Block und unter
Android-Build-Ablauf und Erweiterungspunkte.
Kompatibilität mit Navigation Safe Args
AGP-APIs, von denen das Navigation Safe Args Gradle-Plug-in abhängt, wurden entfernt. AGP 7.1 funktioniert nicht mit Navigation Safe Args-Version 2.4.0-rc1 oder 2.4.0, aber mit den Versionen 2.5.0-alpha01 und 2.4.1. In der Zwischenzeit können Sie als Problemumgehung AGP 7.1 mit einem Snapshot-Build von Navigation Safe Args, Navigation 2.5.0-SNAPSHOT, verwenden. Wenn Sie den Snapshot-Build verwenden möchten, folgen Sie der Anleitung für Snapshots mit der Build-ID 8054565.
Außerdem funktionieren die Navigation Safe Args-Versionen 2.4.1 und 2.5.0 nicht mehr mit AGP 4.2. Wenn Sie diese Versionen von Safe Args verwenden möchten, müssen Sie AGP 7.0 und höher verwenden.
Automatische Komponentenerstellung deaktivieren
Ab AGP 8.0 ist die automatische Komponentenerstellung standardmäßig deaktiviert.
Derzeit erstellt AGP 7.1 automatisch eine Komponente für jede Build-Variante, die denselben Namen wie die Build-Variante hat, und eine all
Komponente, die alle Build-Varianten enthält. Diese automatische Komponentenerstellung wird deaktiviert. Um zum neuen Verhalten zu wechseln, sollten Sie
die automatische Komponentenerstellung manuell deaktivieren, indem Sie
android.disableAutomaticComponentCreation auf true.
setzen. Weitere Informationen finden Sie unter
Maven Publish-Plug-in verwenden.
Kompatibilität mit Firebase Performance Monitoring
AGP 7.1 ist nicht mit dem Firebase Performance Monitoring-Gradle
Plug-in Version 1.4.0 und niedriger kompatibel. Der AGP-Upgrade-Assistent aktualisiert das Plug-in nicht automatisch
auf Version 1.4.1. Wenn Sie also firebase-perf verwenden und AGP auf 7.1 aktualisieren möchten
, müssen Sie dieses Upgrade manuell durchführen.
Bekannte Probleme
In diesem Abschnitt werden bekannte Probleme im Android-Gradle-Plug-in 7.1.0 beschrieben.
Probleme beim Unit-Testen eines App-Projekts, das das Hilt-Plug-in verwendet
Der Klassenpfad für den Unit-Test enthält die nicht instrumentierten App-Klassen. Das bedeutet, dass Hilt die App-Klassen nicht für die Abhängigkeitsinjektion instrumentiert, wenn Unit-Tests ausgeführt werden.
Dieses Problem wird mit dem Release 7.1.1 behoben. Weitere Informationen finden Sie unter Problem 213534628.