Android Gradle-Plug-in 8.0.0 (April 2023)

Das Android Gradle-Plug-in 8.0.0 ist eine Hauptversion mit einer Vielzahl neuer 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 Plugin 8.0.2 (Mai 2023)

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

Android Gradle Plugin 8.0.1 (Mai 2023)

Dieses Minor-Update enthält die folgenden Fehlerkorrekturen:

Behobene Probleme
Fehler: „Keine Versionsanforderung 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] Hard Class Verification Failure on Android 11

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

Sie müssen den Namespace in der build.gradle.kts-Datei auf Modulebene und nicht in der Manifestdatei festlegen. Die namespace-DSL-Property kann ab AGP 7.3 verwendet werden. 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- 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, wird Ihr Code möglicherweise kompiliert, aber Ihre instrumentierten Tests schlagen bei der Laufzeit fehl. Das kann passieren, wenn der instrumentierte Test-Quellcode auf eine Ressource verweist, 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. Mit dem AGP-Upgrade-Assistenten (Tools > AGP-Upgrade-Assistent) können Sie Ihren Code an einige dieser Änderungen anpassen. 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 AGP 8.0 generiert standardmäßig keine BuildConfig. Sie müssen diese Option in den Projekten, in denen Sie sie benötigen, mit der DSL angeben.
android.defaults.buildfeatures.aidl false true In AGP 8.0 ist die AIDL-Unterstützung standardmäßig deaktiviert. Sie müssen diese Option in den Projekten, in denen Sie sie benötigen, mit der DSL angeben. Dieses Flag wird voraussichtlich in AGP 9.0 entfernt.
android.defaults.buildfeatures.renderscript false true In AGP 8.0 ist die RenderScript-Unterstützung standardmäßig nicht aktiviert. Sie müssen diese Option in den Projekten, in denen Sie sie benötigen, mit der DSL angeben. Dieses Flag wird voraussichtlich in AGP 9.0 entfernt.
android.nonFinalResIds true false AGP 8.0 generiert standardmäßig R-Klassen mit nicht endgültigen Feldern.
android.nonTransitiveRClass true false AGP 8.0 generiert R-Klassen nur für im aktuellen Modul definierte Ressourcen.
android.enableR8.fullMode true false Bei AGP 8.0 ist der R8-Vollmodus standardmäßig aktiviert. Weitere Informationen finden Sie unter R8-Vollmodus.

Nicht abwärtskompatible Änderungen: Erzwungene Werte für Build-Optionen

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 druckt 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 sich dies negativ auf die Gradle-Konfigurationszeiten auswirkt.
android.r8.failOnMissingClasses true In AGP 8.0 werden Builds, die R8 verwenden, fehlgeschlagen, wenn für eine bessere DEX-Optimierung Klassen fehlen. Um dieses Problem zu beheben, müssen Sie die fehlenden Bibliotheken oder -dontwarn-Beibehaltungsregeln hinzufügen. Weitere Informationen finden Sie unter Warnungen zu fehlenden Klassen im R8-Schrumpfer.
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 kann der Gradle-Build-Cache immer für Android-Einheitstests verwendet werden.
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 diesen Informationen auch eine Liste von Projekt-Repositories hinzu. Weitere Informationen finden Sie unter Abhängigkeitsinformationen für die Play Console.
android.enableArtProfiles true Baseline-Profile werden jetzt immer generiert. Weitere Informationen finden Sie unter Baseline-Profile.
android.enableNewResourceShrinker true Die neue Implementierung des Ressourcen-Shrinkers standardmäßig verwenden Der neue Ressourcen-Minimierungstool unterstützt dynamische Funktionen.
android.enableSourceSetPathsMap true Wird zum Berechnen relativer Ressourcenpfadzuordnungen verwendet, sodass Gradle-Builds häufiger auf dem neuesten Stand sind.
android.cacheCompileLibResources true Kompilierte Bibliotheksressourcen können jetzt standardmäßig im Cache gespeichert werden, da Gradle Ressourcendateien relativ zum Projektspeicherort verfolgt. android.enableSourceSetPathsMap muss 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 Veröffentlichungs-DSL konfiguriert sind.

Neues Flag „Stable“ für das Ausführungsprofil

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

Eine Vorschau der experimentellen Flags finden Sie in den Versionshinweisen zur Vorabversion.

Lazy-Property-Zuweisung in Kotlin wird nicht unterstützt

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

Build Analyzer-Aufgabenkategorien

Ab Android Studio Flamingo gibt es im Build Analyzer eine neue Standardansicht für Aufgaben, die sich auf die Builddauer auswirken. Wenn in Ihrem Projekt AGP 8.0 oder höher verwendet wird, werden Aufgaben im Build Analyzer nicht einzeln angezeigt, sondern nach Kategorie gruppiert. Beispielsweise werden Aufgaben, die speziell für Android-Ressourcen, Kotlin oder Dexing gelten, gruppiert und dann nach Builddauer sortiert. So lässt sich leicht erkennen, welche Kategorie den größten Einfluss auf die Buildzeit hat. 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ü Nach.

Build Analyzer-Aufgabenkategorien

Neues Plug-in für Einstellungen

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

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

apply plugin 'com.android.settings'

Globale Konfigurationen zentralisieren

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

android {
  compileSdk 31
  minSdk 28
  ...
}

Tool-Ausführungsprofile

Mit dem Plug-in „Einstellungen“ 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 unterschiedliche 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 der Property android.experimental.settings.executionProfile in der Datei gradle.properties ein anderes Profil aus:

android.experimental.settings.executionProfile=high

Sie können diese Eigenschaft auch über die Befehlszeile festlegen, um unterschiedliche Workflows einzurichten. Wenn Sie beispielsweise einen Continuous-Integration-Workflow haben, können Sie das Ausführungsprofil über die Befehlszeile ändern, ohne die settings.gradle-Datei ändern zu müssen:

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

JDK 17 für die Ausführung von AGP 8.0 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 also keine Konfigurationsänderungen an ihren Projekten vornehmen.

Wenn Sie die JDK-Version festlegen, die von AGP in Android Studio verwendet wird, 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 Plugin 8.0.0

Behobene Probleme
Android Gradle Plugin
Unzuverlässiger Buildfehler in der Aufgabe „MergeResources“
JavaPluginConvention und HasConvention sind eingestellt
Falscher und inkonsistenter Dateispeicherort für die neue Transform API
Das Android Gradle-Plug-in darf die veraltete Funktion „GUtil.toWords(string)“ nicht verwenden
Das Android Gradle-Plug-in sollte die veraltete Funktion „ConfigureUtil.configure(closure, target)“ nicht verwenden
AGP-Tests auf KGP 1.7.20-Beta umstellen
Gradle 7.4 schlägt fehl (Instanz von AnalyticsService konnte nicht erstellt werden)
Neue „unknown enum constant“-Fehlermeldung von javac in AGP 7.4.0-alpha09
Die Konfiguration von MergeGeneratedProguardFilesCreationAction ist auch bei aktiviertem Konfigurations-Caching langsam
[AGP] Dem IDE-Modell ein generiertes Quellverzeichnis hinzufügen (Variant API)
JavaPluginConvention und HasConvention sind eingestellt
„ignorewarnings“ nicht standardmäßig zu R8 hinzufügen
Warnung, wenn ProGuard-Dateien nicht vorhanden sind
AGP 7.3.0 bricht die Gradle-Synchronisierung für Gradle-Plattformprojekte ab
apksig-Bibliothek: ApkVerifier$Result.getV4SchemeSigners() ist als privat gekennzeichnet
androidJacocoAnt-Konfiguration nicht mehr erstellen, wenn die Abdeckung nicht aktiviert ist
Wenn Sie @IntDef in einer Bibliothekskomponente verwenden, wird im Aar-Archiv keine annotations.zip-Datei generiert.
Gemeinsamer Supertyp für und nicht gefunden
Fügen Sie eine Gradle-Eigenschaftsversion von LINT_PRINT_STACKTRACE=true hinzu.
veraltete vorgefertigte Artefakte, die in AAR verpackt werden
Von der Zieleigenschaft zur Ausgabeorteigenschaft migrieren, um die Warnung zur Einstellung zu beheben und sich auf Gradle 9.0 vorzubereiten
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
lintVital-Ziel, das standardmäßig in einer Debug-Variante ausgeführt wird
Warnung, wenn ProGuard-Dateien nicht vorhanden sind
AGP versucht, kotlinOptions.freeCompilerArgs in der Phase der Aufgabenausführung hinzuzufügen
Gradle-Synchronisierung fehlgeschlagen: Synchronisierung fehlgeschlagen: Grund unbekannt
DependencyReportTask ist nicht mit dem Konfigurationscache kompatibel
Überschreiben von Ressourcen mit resValue in build.gradle führt zu Fehler: Ressourcen doppelt
Der Buildtyp „debug“ hat einen Standardsignaturschlüssel, andere nicht
Die Verwendung dynamischer Funktionen und das Schrumpfen von Ressourcen führen zu einem Absturz bei der Laufzeit
Der Buildtyp „debug“ hat einen Standardsignaturschlüssel, andere nicht
generiertes Quellverzeichnis, das im Hauptquellenanbieter des Lint-Modells als Java-Verzeichnis aufgeführt ist
Gradle 8.0-milestone-2 führt zu einer Ausnahme in AGP
Manifest-Zusammenführung für Apps und Bibliothek optimieren
gradle-settings-api zur Javadoc-Generierung hinzufügen
Neue „unknown enum constant“-Fehlermeldung von javac in AGP 7.4.0-alpha09
AGP 7.4.0-alpha09 generiert Builds, die nicht in Firebase App Distribution hochgeladen werden
lint.xml in Modulen wird bei der UP-TO-DATE-Prüfung von Lint-Aufgaben nicht berücksichtigt
Problem mit dem Android-Gradle-Plug-in 7.0 und höher und Android-Tests: Ressource „id“ kann nicht gefunden werden
configureCMakeDebug crashes intermittently with null pointer exception
IllegalAccessError beim Upgrade des Projekts auf AS2022.2.1.5, FireBasePerfPlugin
Die Synchronisierung schlägt mit der kryptischen Fehlermeldung „Die Sammlung enthält kein Element, das dem Prädikat entspricht“ fehl.
Instrumentation API transformiert keine lokalen Dateiabhängigkeiten
Fehler „AnnotationProcessorOptions.arguments are queried“ beim Aktualisieren auf 7.4 Beta 1
Öffentliche Gradle-Plug-ins in die gradle-api verschieben und BasePlugin.getExtension entfernen
r8.jvmArgs wird nicht verwendet
JDK 17 als Mindestversion für AGP erforderlich
AGP 8.0.0 A8 bricht Referenzprofile
Ändern Sie in AGP 8.0 in der Nachricht „CheckAarMetadataTask“ den Parameter „compileSdkVersion“ in „compileSdk“.
AGP 7.4.0-rc01 bricht die Variant API mit der Meldung „Abfragen des zugeordneten Werts von map(provider(java.util.Set)) vor Abschluss der Aufgabe ‚…‘ wird nicht unterstützt“ ab
Probleme mit dem Konfigurationscache von `com.android.build.gradle.tasks.ShaderCompile`
Wenn Java-Ressourcen mit AGP APIs hinzugefügt werden, funktioniert der Konfigurationscache nicht mehr
Lint-Plug-in ist nicht Teil der Gradle-API
DexingFileDependenciesTask.outputKeepRules ist ein Verzeichnis, wird aber als OutputFile markiert
Beim Upgrade auf AGP 7.4 wird ein StackOverflowError ausgegeben
processDebugUnitTestManifest schlägt mit Manifest-Platzhaltern für Testvarianten fehl
Lint greift auf Informationen zu Quellsätzen ohne Abhängigkeiten zu
Build-Fehler bezieht sich auf API-Level 34, das nicht existiert
„Wir empfehlen, ein neueres Android Gradle-Plug-in zu verwenden“, wenn es kein neueres gibt
android.injected.testOnly=false funktioniert nicht
Dexer (D8)
Dex-Merger-Fehler im Zusammenhang mit globalen Synthesizern nach dem Upgrade von AS Canary 6 auf 7
Kotlin-Metadatenbibliothek auf Version 0.6.0 aktualisieren
Für API-Level 28–30 ist anscheinend eine Umgehung für JDK-8272564 erforderlich
Fussel
ResourceType-Lint-Prüfung funktioniert nicht für Kotlin-Quellen
VersionChecks verarbeitet keine Kotlin-Bereichsprüfungen
Falsch positives Ergebnis für InlinedApi bei Wrapper
Lint-Falschmeldung „Recycle“ bei 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 wird nie in der Datei „android-plugin.xml“ registriert
Erklärung zur Lint-Prüfung von AccessibilityDetector ist veraltet
Lint SDK_INT-Prüfungen sollten temporäre lokale Variablen berücksichtigen
Fehler beim Ersetzen des Funktionstyps durch den Typalias in TestMode.TYPE_ALIAS
Fehler: Wenn ObjectAnimator außerhalb des aktuellen Codeblocks erstellt wird, werden fälschlicherweise Warnungen ausgegeben, dass er nicht gestartet wird. #38
Lint: NPE durch Abfrage der Anwendungsinstanz im Modus „mergeOnly“
Die Lint-Regel „NonConstantResourceId“ kann nicht erkennen, ob Konstantenwerte aus der Ressourcen-ID zugewiesen werden
Fehler bei der Datenansichts-ID wird nicht angezeigt
Wenn der Lint-Ressourcen-Cache nicht deserialisiert werden kann, wird ein Lint-Fehler ausgegeben (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 nicht, ob gültige Übergaben für Anrufempfänger vorhanden sind
Lint prüft sichere Umwandlungen nur für direkt implementierte Schnittstellen, nicht für vererbte.
Lint-Integration
Die Baseline-Datei ist derzeit eine Eingabe und eine Ausgabe der Lint-Aufgaben.
Schrumpfgerät (R8)
NPE-/Bestätigungsfehler im CF-Frame-Verifier
Regression nach dem Entfernen des Feldsuch-Caches
`:app:minifyVariantWithR8` wirft in AGP 7.4.0-beta02 eine NullPointerException auf
R8: ClassNotFoundException bei -allowaccessmodification
Unterstützung für Kontextempfänger 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 einer nicht pushbaren Arbeitsliste des Enqueuers einzureihen
Minimierung von RenderScript-Code: starker Leistungsabfall beim Upgrade von AGP von 7.3.1 auf 7.4.0

Android Gradle Plugin 8.0.1

Behobene Probleme
Schrumpfgerät (R8)
Fehler: „Keine Versionsanforderung 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] Hard Class Verification Failure on Android 11

Android Gradle Plugin 8.0.2

Behobene Probleme
Schrumpfgerät (R8)
R8 schlägt beim Compose-Build mit ArrayIndexOutOfBoundsException fehl
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
R8 auf AGP 8 führt zu einem Ausfall des Google Fit-Dienstes
Wenn Informationen zur Quelldatei mit Restnamen enthalten sind, die sich mit den Eingabenamen überschneiden, werden sie nicht korrekt dargestellt.