Android Gradle-Plug-in 8.0.0 (April 2023)

Das Android-Gradle-Plug-in 8.0.0 ist eine Hauptversion mit vielen neuen Funktionen und Verbesserungen.

Kompatibilität

Mindestversion Standardversio Hinweise
Gradle 8.0 8.0 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 25.1.8937393 Installieren oder konfigurieren Sie eine andere Version des NDK.
JDK 17 17 Weitere Informationen finden Sie unter JDK-Version festlegen.

Patch releases

Im Folgenden finden Sie eine Liste der Patch-Releases für das Android-Gradle-Plug-in 8.0.

Android-Gradle-Plug-in 8.0.2 (Mai 2023)

Eine Liste der in AGP 8.0.2 behobenen Fehler finden Sie unter Geschlossene Probleme in Android Studio 2022.2.1.

Android-Gradle-Plug-in 8.0.1 (Mai 2023)

Dieses kleinere Update enthält die folgenden Fehlerkorrekturen:

Behobene Probleme
Fehler: „No VersionRequirement with the given id in the table“ (Keine VersionRequirement mit der angegebenen ID in der Tabelle) nach dem Upgrade von AGP 7.2.2 auf 7.4.0
R8-NullPointerException bei markTypeAsLive AGP 7.4.1
[R8 4.0.53] Fehler bei der harten Klassenprüfung unter Android 11

Wichtige Änderung: Namespace im Build-Skript auf Modulebene erforderlich

Sie müssen den Namespace in der build.gradle.kts-Datei auf Modulebene und nicht in der Manifestdatei festlegen. Sie können die DSL-Property namespace ab AGP 7.3 verwenden. Weitere Informationen finden Sie unter Namespace festlegen.

Beachten Sie bei der Migration zur Namespace-DSL die folgenden Probleme:

  • In früheren Versionen von AGP wurde der Test-Namespace in einigen Fällen fälschlicherweise aus dem Haupt-Namespace oder der Anwendungs-ID abgeleitet. Der AGP Upgrade Assistant blockiert das Upgrade, wenn er feststellt, dass der Haupt-Namespace und der Test-Namespace Ihres Projekts identisch sind. Wenn das Upgrade blockiert ist, müssen Sie testNamespace manuell ändern und den Quellcode entsprechend anpassen.
  • Nachdem Sie den Test-Namespace geändert haben, kann es sein, dass Ihr Code kompiliert wird, Ihre instrumentierten Tests aber zur Laufzeit fehlschlagen. Das kann passieren, wenn in Ihrem instrumentierten Testquellcode auf eine Ressource verwiesen wird, die sowohl in Ihren androidTest- als auch in Ihren App-Quellen definiert ist.

Weitere Informationen finden Sie unter Problem 191813691, Kommentar 19.

Wichtige Änderungen: Standardwerte für Build-Optionen

Ab AGP 8.0 wurden die Standardwerte für diese Flags geändert, um die Build-Leistung zu verbessern. Wenn Sie Hilfe beim Anpassen Ihres Codes benötigen, um einige dieser Änderungen zu unterstützen, verwenden Sie den AGP Upgrade Assistant (Tools > AGP Upgrade Assistant). Der Upgrade Assistant führt Sie durch die Aktualisierung Ihres Codes, um das neue Verhalten zu berücksichtigen, oder durch das Festlegen von Flags, um das vorherige Verhalten beizubehalten.

Melden Neuer Standardwert Vorheriger Standardwert Hinweise
android.defaults.buildfeatures.buildconfig false true In AGP 8.0 wird BuildConfig nicht standardmäßig generiert. Sie müssen diese Option mit der DSL in den Projekten angeben, in denen Sie sie benötigen.
android.defaults.buildfeatures.aidl false true In AGP 8.0 ist die AIDL-Unterstützung nicht standardmäßig aktiviert. Sie müssen diese Option mit der DSL in den Projekten angeben, in denen Sie sie benötigen. Dieses Flag wird voraussichtlich in AGP 9.0 entfernt.
android.defaults.buildfeatures.renderscript false true In AGP 8.0 ist die RenderScript-Unterstützung nicht standardmäßig aktiviert. Sie müssen diese Option mit der DSL in den Projekten angeben, in denen Sie sie benötigen. Dieses Flag wird voraussichtlich in AGP 9.0 entfernt.
android.nonFinalResIds true false Mit AGP 8.0 werden standardmäßig R-Klassen mit nicht finalen Feldern generiert.
android.nonTransitiveRClass true false Mit AGP 8.0 werden R-Klassen nur für Ressourcen generiert, die im aktuellen Modul definiert sind.
android.enableR8.fullMode true false In AGP 8.0 ist der R8-Vollmodus standardmäßig aktiviert. Weitere Informationen finden Sie unter R8-Vollmodus.

Nicht abwärtskompatible Änderungen: Erzwingen von Build-Optionswerten

Ab AGP 8.0 können Sie die Werte für diese Flags nicht mehr ändern. Wenn Sie sie in der Datei gradle.properties angeben, wird der Wert ignoriert und AGP gibt Warnungen aus.

Melden Erzwungener Wert Hinweise
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 gibt eine Warnung aus, wenn während der Konfigurationsphase eine Konfigurationsauflösung erkannt wird, da dies die Gradle-Konfigurationszeiten negativ beeinflusst.
android.r8.failOnMissingClasses true In AGP 8.0 schlagen Builds, die R8 verwenden, fehl, wenn Klassen fehlen, um eine bessere DEX-Optimierung zu gewährleisten. Um dieses Problem zu beheben, müssen Sie die fehlenden Bibliotheken oder -dontwarn-Keep-Regeln hinzufügen. Weitere Informationen finden Sie unter Warnungen zu fehlenden Klassen im R8-Shrinker.
android.testConfig.useRelativePath true Wenn die Unterstützung für die Verwendung von Android-Ressourcen, Assets und Manifesten in Unit-Tests aktiviert ist, generiert AGP 8.0 eine test_config.properties-Datei, die nur relative Pfade enthält. So wird sichergestellt, dass Android-Einheitentests immer den Gradle-Build-Cache verwenden können.
android.useNewJarCreator true AGP verwendet die Zipflinger-Bibliothek beim Erstellen von JAR-Dateien, um die Build-Leistung zu verbessern.
android.bundletool.includeRepositoriesInDependencyReport true Wenn das Hinzufügen von SDK-Abhängigkeitsinformationen in AABs und APKs aktiviert ist, fügt AGP 8.0 dieser Information auch eine Liste von Projekt-Repositories hinzu. Weitere Informationen
android.enableArtProfiles true Baseline-Profile werden jetzt immer generiert. Weitere Informationen finden Sie unter Baseline-Profile.
android.enableNewResourceShrinker true Standardmäßig die neue Implementierung des Resource Shrinker verwenden. Die neue Funktion zum Verkleinern von Ressourcen unterstützt dynamische Module.
android.enableSourceSetPathsMap true Wird zum Berechnen relativer Ressourcenpfadzuordnungen verwendet, damit Gradle-Builds häufiger auf dem neuesten Stand sind.
android.cacheCompileLibResources true Kompilierte Bibliotheksressourcen können jetzt standardmäßig zwischengespeichert werden, da Gradle Ressourcendateien relativ zum Projektstandort verfolgt. Hierfür muss android.enableSourceSetPathsMap aktiviert sein.
android.disableAutomaticComponentCreation true In AGP 8.0 wird standardmäßig keine SoftwareComponent erstellt. Stattdessen erstellt AGP SoftwareComponents nur für Varianten, die für die Veröffentlichung mit der Publishing-DSL konfiguriert sind.

Neues stabiles Flag für das Ausführungsprofil

AGP enthält das neue Flag android.settings.executionProfile. Mit diesem Flag können Sie das Standardausführungsprofil aus der SettingsExtension überschreiben. Weitere Informationen finden Sie in der Dokumentation zum Einstellungs-Plug-in.

Informationen zur Vorschau von experimentellen Flags finden Sie in den Versionshinweisen zur Vorschau.

Zuweisung von Lazy-Properties in Kotlin wird nicht unterstützt

Wenn Sie die Kotlin-DSL von Gradle für Ihre Build-Skripts verwenden, beachten Sie, dass Android Studio und das AGP 8.0 die experimentelle Zuweisung von Attributen mit dem Operator = nicht unterstützen. Weitere Informationen zu diesem Feature finden Sie in den Versionshinweisen und der Dokumentation.

Build Analyzer-Aufgabenkategorien

Ab Android Studio Flamingo bietet Build Analyzer eine neue Standardansicht für Tasks, die sich auf die Build-Dauer auswirken. Wenn in Ihrem Projekt AGP 8.0 oder höher verwendet wird, werden Aufgaben im Build Analyzer nicht einzeln, sondern nach Kategorie gruppiert. Aufgaben, die sich beispielsweise auf Android-Ressourcen, Kotlin oder Dexing beziehen, werden gruppiert und dann nach Build-Dauer sortiert. So lässt sich leicht feststellen, welche Kategorie die Build-Zeit am stärksten beeinflusst. Wenn Sie eine Kategorie maximieren, wird eine Liste der entsprechenden Aufgaben angezeigt. Wenn Sie Aufgaben einzeln und ohne Gruppierung anzeigen lassen möchten, verwenden Sie das Drop-down-Menü Gruppieren nach.

Build Analyzer-Aufgabenkategorien

Neues Einstellungen-Plug-in

Mit AGP 8.0.0-alpha09 wird das neue Settings-Plug-in eingeführt. Mit dem Einstellungen-Plug-in können Sie globale Konfigurationen, die für alle Module gelten, an einem zentralen Ort zusammenfassen. So müssen Sie die Konfigurationen nicht in mehrere Module kopieren und einfügen. Außerdem können Sie mit dem Einstellungen-Plug-in Ausführungsprofile für Tools oder verschiedene Anleitungen zum Ausführen eines Tools erstellen und zwischen ihnen wechseln.

Wenn Sie das Einstellungen-Plug-in verwenden möchten, wenden Sie es in der Datei settings.gradle an:

apply plugin 'com.android.settings'

Globale Konfigurationen zentralisieren

Verwenden Sie den neuen android-Block in der Datei settings.gradle, um globale Konfigurationen zu konfigurieren. Beispiel:

android {
  compileSdk 31
  minSdk 28
  ...
}

Profile für die Tool-Ausführung

Mit dem Einstellungen-Plug-in können Sie auch Ausführungsprofile für einige Tools erstellen. Ein Ausführungsprofil bestimmt, wie ein Tool ausgeführt wird. Je nach Umgebung können Sie verschiedene Ausführungsprofile auswählen. In einem Ausführungsprofil können Sie JVM-Argumente für ein Tool festlegen und es so konfigurieren, dass es in einem separaten Prozess ausgeführt wird. Derzeit wird nur das R8-Tool unterstützt.

Erstellen Sie Ausführungsprofile und legen Sie das Standardausführungsprofil in der Datei settings.gradle fest, wie im folgenden Beispiel gezeigt:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Wenn Sie das Standardprofil überschreiben möchten, wählen Sie mit dem Attribut android.experimental.settings.executionProfile in der Datei gradle.properties ein anderes Profil aus:

android.experimental.settings.executionProfile=high

Sie können dieses Attribut auch über die Befehlszeile festlegen, um verschiedene Arbeitsabläufe einzurichten. Wenn Sie beispielsweise einen Continuous Integration-Workflow haben, können Sie das Ausführungsprofil über die Befehlszeile ändern, ohne die Datei settings.gradle ändern zu müssen:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

Für AGP 8.0 ist JDK 17 erforderlich.

Wenn Sie das Android-Gradle-Plug-in 8.0 zum Erstellen Ihrer App verwenden, ist jetzt JDK 17 erforderlich, um Gradle auszuführen. Android Studio Flamingo enthält JDK 17 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 17 oder höher verwenden.

Wenn Sie AGP unabhängig von Android Studio verwenden, aktualisieren Sie die JDK-Version, indem Sie die JAVA_HOME Umgebungsvariable oder die -Dorg.gradle.java.home Befehlszeilenoption auf das Installationsverzeichnis von JDK 17 festlegen.

Behobene Probleme

Android-Gradle-Plug-in 8.0.0

Behobene Probleme
Android-Gradle-Plug-in
Instabiler Build-Fehler bei der Aufgabe „MergeResources“
JavaPluginConvention und HasConvention sind veraltet
Falscher und inkonsistenter Dateispeicherort für die neue Transform API
Das Android Gradle-Plug-in sollte die eingestellte Funktion „GUtil.toWords(string)“ nicht verwenden.
Das Android-Gradle-Plug-in sollte die eingestellte Funktion „ConfigureUtil.configure(closure, target)“ nicht verwenden.
AGP-Tests für die Verwendung von KGP 1.7.20-Beta aktualisieren
Gradle 7.4 schlägt fehl (Instanz von AnalyticsService konnte nicht erstellt werden)
Neue „unbekannte Enum-Konstante“ von javac in AGP 7.4.0-alpha09
Die Konfiguration von „MergeGeneratedProguardFilesCreationAction“ ist langsam, auch wenn das Konfigurations-Caching aktiviert ist.
[AGP] Generiertes Quellverzeichnis zum IDE-Modell hinzufügen (Variant API)
JavaPluginConvention und HasConvention sind veraltet
„ignorewarnings“ nicht standardmäßig zu R8 hinzufügen
Warnung, wenn ProGuard-Dateien nicht vorhanden sind
AGP 7.3.0 unterbricht die Gradle-Synchronisierung für Gradle-Plattformprojekte
apksig-Bibliothek: ApkVerifier$Result.getV4SchemeSigners() ist als „private“ gekennzeichnet
Keine androidJacocoAnt-Konfiguration erstellen, wenn die Abdeckung nicht aktiviert ist
Bei Verwendung von @IntDef in einer Bibliothekskomponente wird annotations.zip nicht im AAR generiert.
Es konnte kein gemeinsamer Supertyp für und gefunden werden.
Fügen Sie eine Gradle-Eigenschaftsversion von LINT_PRINT_STACKTRACE=true hinzu.
Veraltete Prefab-Artefakte werden in AAR verpackt
Von der Ziel-Property zur „outputLocation“-Property migrieren, um die Warnung zur Einstellung zu beheben und sich auf Gradle 9.0 vorzubereiten
Das Flag „--release“ beim Einrichten der JavaCompile-Aufgabe berücksichtigen
[AGP-7.3.0-beta03] ShrinkResourcesNewShrinkerTask schlägt fehl, wenn nach der XML-Deklaration eine leere Zeile vorhanden ist
Das Ziel „lintVital“ wird standardmäßig in einer Debug-Variante ausgeführt.
Warnung, wenn ProGuard-Dateien nicht vorhanden sind
AGP versucht, kotlinOptions.freeCompilerArgs während der Ausführungsphase der Aufgabe hinzuzufügen.
Fehler bei der Gradle-Synchronisierung: Synchronisierung fehlgeschlagen: Grund unbekannt
„DependencyReportTask“ ist nicht mit dem Konfigurationscache kompatibel
Das Überschreiben von Ressourcen mit „resValue“ in „build.gradle“ führt zu „Error: Duplicate resources“ (Fehler: Doppelte Ressourcen)
Der Build-Typ „debug“ hat einen Standardsignierschlüssel, andere nicht
Verwendung dynamischer Module und Ressourcenreduzierung führt zu Laufzeitabsturz
Der Build-Typ „debug“ hat einen Standardsignierschlüssel, andere nicht
Das generierte Quellverzeichnis wird im Hauptquellenanbieter des Lint-Modells als Java-Verzeichnis aufgeführt.
Gradle 8.0-milestone-2 verursacht Ausnahme in AGP
Manifestzusammenführung für Apps und Bibliotheken optimieren
„gradle-settings-api“ zur Javadoc-Generierung hinzufügen
Neue „unbekannte Enum-Konstante“ von javac in AGP 7.4.0-alpha09
Mit AGP 7.4.0-alpha09 werden Builds generiert, die nicht in Firebase App Distribution hochgeladen werden können
lint.xml in Modulen wird bei der UP-TO-DATE-Prüfung von Lint-Aufgaben nicht berücksichtigt
Android-Gradle-Plug-in 7.0 und höher und Android-Tests: Ressource mit ID kann nicht gefunden werden
configureCMakeDebug stürzt sporadisch mit NullPointerException ab
IllegalAccessError beim Upgrade des Projekts auf AS2022.2.1.5, FireBasePerfPlugin
Die Synchronisierung schlägt mit dem kryptischen Fehler „Collection contains no element matching the predicate.“ fehl.
Die Instrumentation API transformiert keine lokalen Dateidependenzen
Fehler „`AnnotationProcessorOptions.arguments are queried`“ beim Aktualisieren auf 7.4 Beta 1
Öffentliche Gradle-Plug-ins zu gradle-api verschieben und BasePlugin.getExtension entfernen
r8.jvmArgs werden nicht verwendet
JDK17 als Mindestversion für AGP erforderlich
AGP 8.0.0 A8 unterbricht Baseline-Profile
„compileSdkVersion“ in der CheckAarMetadataTask-Meldung in AGP 8.0 in „compileSdk“ ändern
AGP 7.4.0-rc01 führt zu einem Fehler in der Variant API mit der Meldung „Querying the mapped value of map(provider(java.util.Set)) before task '...' has completed is not supported“ (Das Abfragen des zugeordneten Werts von map(provider(java.util.Set)) vor Abschluss der Aufgabe „...“ wird nicht unterstützt).
Probleme mit `com.android.build.gradle.tasks.ShaderCompile` und dem Konfigurationscache
Durch Hinzufügen zu Java-Ressourcen mit AGP-APIs wird der Konfigurationscache unterbrochen
Das Lint-Plug-in ist nicht Teil von gradle-api
DexingFileDependenciesTask.outputKeepRules ist ein Verzeichnis, wird aber als OutputFile markiert.
Beim Upgrade auf AGP 7.4 tritt ein StackOverflowError auf
„processDebugUnitTestManifest“ schlägt mit Manifestplatzhaltern für Testvarianten fehl
Lint greift ohne Abhängigkeiten auf Informationen zu Quellsätzen zu
Build-Fehler bezieht sich auf API-Level 34, das nicht vorhanden ist
„Wir empfehlen, ein neueres Android Gradle-Plug-in zu verwenden“, obwohl es kein neueres gibt
android.injected.testOnly=false funktioniert nicht
Dexer (D8)
Fehler beim Zusammenführen von DEX-Dateien im Zusammenhang mit globalen Synthetics nach dem Upgrade von AS Canary 6 auf 7
Kotlin-Metadatenbibliothek auf Version 0.6.0 aktualisieren
Für JDK-8272564 ist auf API-Level 28–30 ein Workaround erforderlich.
Lint
Der Lint-Check für ResourceType funktioniert nicht für Kotlin-Quellen
VersionChecks verarbeitet keine Kotlin-Bereichsprüfungen
Falsch positives Ergebnis für InlinedApi bei Wrapping
Falsch positives Lint-Ergebnis für „Recycle“ in Bezug auf „openInputStream“
[BuildTool/Lint] ChecksSdkIntAtLeast-Konstruktoreigenschaft
Lint: Zusammenführen von PartialResults funktioniert nicht richtig
Android Studio kennzeichnet die angegebene Version fälschlicherweise als veraltet.
AndroidDeprecationInspection.DeprecationFilter EP ist nie in der Datei „android-plugin.xml“ registriert.
Die Erklärung für den Lint-Check „AccessibilityDetector“ ist veraltet.
Lint-SDK_INT-Prüfungen sollten temporäre lokale Variablen verstehen
Fehler, wenn TestMode.TYPE_ALIAS den Funktionstyp durch einen Typalias ersetzt
Fehler: Wenn ObjectAnimator außerhalb des aktuellen Codeblocks erstellt wird, werden fälschlicherweise Warnungen ausgegeben, dass er nicht gestartet wird #38
Lint: NPE aufgrund des Abfragens der Anwendungsinstanz im mergeOnly-Modus
Die Lint-Regel „NonConstantResourceId“ kann nicht erkennen, ob konstante Werte aus der Ressourcen-ID zugewiesen werden.
Fehler wird für die View-ID nicht angezeigt
Fehler beim Deserialisieren des Lint-Ressourcencache führt zu einem Lint-Fehler (sollte aber eine Warnung sein)
AGP Flamingo Alpha 8 Lint NewApi Desugar Regression
TypedArray#close (API 31) wird nicht desugared, aber AS zeigt keine Warnung an, wenn es in „try-with-resources“ verwendet wird
Lint prüft keine gültigen Casts für Anrufempfänger
Lint prüft sichere Casts nur für direkt implementierte Schnittstellen, nicht für vererbte.
Lint-Integration
Die Baseline-Datei ist derzeit eine Ein- und Ausgabe der Lint-Aufgaben.
Shrinker (R8)
NPE-/Assertion-Fehler im CF-Frame-Verifier
Regression nach dem Entfernen des Cache für die Feldsuche
`:app:minifyVariantWithR8` löst in AGP 7.4.0-beta02 eine NullPointerException aus
R8: ClassNotFoundException bei -allowaccessmodification
Unterstützung für Kontext-Receiver in Metadaten hinzufügen
java.lang.VerifyError: Verifier rejected class androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) failed to verify: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object): [0x0] cannot access instance field java.lang.Object androidx.compose.ui.graphics.colorspace.n.a from object of type Precise Reference: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1 – Versuch, eine Aktion in eine nicht pushable Arbeitsliste für die Warteschlange einzureihen
Renderscript-Code minimieren: Enormer Leistungsabfall beim Upgrade von AGP 7.3.1 auf 7.4.0

Android-Gradle-Plug-in 8.0.1

Behobene Probleme
Shrinker (R8)
Fehler: „No VersionRequirement with the given id in the table“ (Keine VersionRequirement mit der angegebenen ID in der Tabelle) nach dem Upgrade von AGP 7.2.2 auf 7.4.0
R8-NullPointerException bei markTypeAsLive AGP 7.4.1
[R8 4.0.53] Fehler bei der harten Klassenprüfung unter Android 11

Android-Gradle-Plug-in 8.0.2

Behobene Probleme
Shrinker (R8)
R8 schlägt während des Compose-Builds mit ArrayIndexOutOfBoundsException fehl
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
R8 in AGP 8 unterbricht den Google Fit-Dienst
Informationen zur Quelldatei mit Restnamen, die sich mit Eingabenamen überschneiden, werden nicht richtig dargestellt.