Android Gradle-Plug-in 8.1.0 (Juli 2023)

Das Android-Gradle-Plug-in 8.1.0 ist eine wichtige Version 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 33.0.1 33.0.1 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.

Kotlin DSL ist die Standardeinstellung für die Build-Konfiguration

In neuen Projekten wird jetzt standardmäßig die Kotlin-DSL (build.gradle.kts) für die Build-Konfiguration verwendet. Das bietet eine bessere Bearbeitung als die Groovy DSL (build.gradle) mit Syntaxhervorhebung, Codevervollständigung und Navigation zu Deklarationen. Wenn Sie AGP 8.1 und die Kotlin DSL für die Build-Konfiguration verwenden, sollten Sie Gradle 8.1 verwenden, um die bestmögliche Leistung zu erzielen. Weitere Informationen

Automatische App-spezifische Sprachunterstützung

Ab Android Studio Giraffe Canary 7 und AGP 8.1.0-alpha07 können Sie Ihre App so konfigurieren, dass sie Spracheinstellungen pro App automatisch unterstützt. Basierend auf Ihren Projektressourcen generiert das Android-Gradle-Plug-in die Datei LocaleConfig und fügt einen Verweis darauf in die endgültige Manifestdatei ein. Sie müssen dies also nicht mehr manuell tun. AGP verwendet die Ressourcen in den res-Ordnern Ihrer App-Module und alle Abhängigkeiten von Bibliotheksmodulen, um die in die Datei LocaleConfig aufzunehmenden Gebietsschemas zu bestimmen.

Die automatische Sprachfunktion pro App wird nur für Apps unterstützt, die unter Android 13 (API‑Level 33) oder höher ausgeführt werden. Wenn Sie das Feature verwenden möchten, müssen Sie compileSdkVersion auf 33 oder höher festlegen. Wenn Sie die Sprachpräferenzen für einzelne Apps für frühere Android-Versionen konfigurieren möchten, müssen Sie weiterhin die APIs und die Sprachauswahl in der App verwenden.

Wenn Sie die automatische Sprachunterstützung pro App aktivieren möchten, geben Sie ein Standardschema an:

  1. Erstellen Sie im Ordner res des App-Moduls eine neue Datei mit dem Namen resources.properties.
  2. Legen Sie in der Datei resources.properties die Standardsprache mit dem Label unqualifiedResLocale fest. Kombinieren Sie den Sprachcode mit den optionalen Script- und Regionscodes, um die Namen der Gebietsschemas zu bilden. Trennen Sie die einzelnen Codes durch einen Bindestrich:

    Beispiel: Ihre Standardsprache ist amerikanisches Englisch.

        unqualifiedResLocale=en-US
        

AGP fügt dieser Standardsprache und allen von Ihnen angegebenen alternativen Sprachen mithilfe von values-*-Verzeichnissen im Ordner res die automatisch generierte Datei LocaleConfig hinzu.

Die automatische Unterstützung von Sprachen pro App ist standardmäßig deaktiviert. Wenn Sie die Funktion aktivieren möchten, verwenden Sie die Einstellung generateLocaleConfig im Block androidResources {} der build.gradle.kts-Datei auf Modulebene (build.gradle-Datei, wenn Sie Groovy verwenden):

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint enthält Bytecode für JVM 17

Ab AGP 8.1.0-alpha04 enthält Android Lint Bytecode, der auf JVM 17 ausgerichtet ist. Wenn Sie benutzerdefinierte Lint-Prüfungen schreiben, müssen Sie mit JDK 17 oder höher kompilieren und jvmTarget = '17' in Ihren Kotlin-Compileroptionen angeben.

Weitere Informationen zum Lint-Tool finden Sie unter Code mit Lint-Prüfungen verbessern.

Einstellung für die Komprimierung nativer Bibliotheken in DSL verschoben

Ab AGP 8.1.0-alpha10 wird eine Warnung angezeigt, wenn Sie die Komprimierung nativer Bibliotheken nicht mit der DSL anstelle des Manifests konfigurieren. In der folgenden Anleitung wird beschrieben, wie Sie Ihre Konfiguration für die Verwendung der DSL aktualisieren. Wenn Sie Hilfe bei diesen Aktualisierungen benötigen, verwenden Sie den AGP Upgrade Assistant (Tools > AGP Upgrade Assistant).

Wenn Sie unkomprimierte native Bibliotheken verwenden möchten, entfernen Sie das Attribut android::extractNativeLibs aus dem Manifest und fügen Sie der Datei build.gradle.kts auf Modulebene (build.gradle-Datei, wenn Sie Groovy verwenden) den folgenden Code hinzu:

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

Flags für experimentelle Builds

Dies sind experimentelle Flags zum Konfigurieren Ihres Builds, die in AGP 8.1 verfügbar sind.

Melden Hinzugefügt in Standardwert Hinweise
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false Wenn Sie diese Option aktivieren, ohne Signierungskonfigurationen anzugeben, verwendet AGP die standardmäßige Debug-Signierungskonfiguration, wenn ein profilierbarer oder debugfähiger Build ausgeführt wird. Dieses Flag ist standardmäßig deaktiviert, damit Build-Autoren spezifische Profilsignierungskonfigurationen deklarieren.
android.experimental.library.desugarAndroidTest AGP 8.0 false Mit diesem Flag können Bibliotheksentwickler das Desugaring von Core-Bibliotheken für Test-APKs aktivieren, ohne die erstellte AAR zu beeinträchtigen, z. B. durch Linting. Wir planen, dieses Verhalten in Zukunft in der Variant API zu unterstützen.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Wenn diese Option aktiviert ist, können Nutzer mit Gradle Managed Devices einen benutzerdefinierten Gerätetyp definieren, der von einem Plug-in bereitgestellt werden kann. Dieses Flag muss aktiviert sein, wenn Sie das Firebase Test Lab-Plug-in verwenden möchten.
android.lint.printStackTrace AGP 8.0 false Wenn diese Option aktiviert ist, gibt Android Lint einen Stacktrace aus, wenn es abstürzt. Dieses Flag hat dieselben Funktionen wie die Umgebungsvariable LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 Keine Gibt die maximale Anzahl von gleichzeitigen Gradle-verwalteten Geräten (AVDs) an, die zu einem bestimmten Zeitpunkt aktiv sein können. Wenn der Wert 0 oder negativ ist, gibt es keine maximale Anzahl von Geräten.
android.experimental.testOptions.installApkTimeout AGP 8.0 Keine Das Zeitlimit in Sekunden für die Installation eines APK. Wenn der Wert 0 oder negativ ist, wird er von UTP auf einen Standardwert festgelegt.

Behobene Probleme

Android-Gradle-Plug-in 8.1.0

Behobene Probleme
Android-Gradle-Plug-in
Probleme mit `com.android.build.gradle.tasks.ShaderCompile` und dem Konfigurationscache
Durch Hinzufügen zu Java-Ressourcen mit AGP-APIs wird der Konfigurationscache unterbrochen
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so ist im APK enthalten
Das KGP liest das Manifest während der Konfiguration und macht den Konfigurationscache bei einer Manifeständerung ungültig.
Warnmeldung bei Problem im zusammengeführten Manifest unklar
Beim Upgrade auf AGP 7.4 tritt ein StackOverflowError auf
ClassNotFoundException in dynamischem Modul, das direkt vom Kotlin-Bibliotheksprojekt abhängt
„processDebugUnitTestManifest“ schlägt mit Manifestplatzhaltern für Testvarianten fehl
„processDebugUnitTestManifest“ schlägt mit Manifestplatzhaltern für Testvarianten fehl
Die Namespace-Eigenschaft gehört wahrscheinlich zu HasAndroidResources.
Meldung „Gradle-Dateien haben sich seit der letzten Projektsynchronisierung geändert“ kann nicht deaktiviert werden
„Wir empfehlen, ein neueres Android Gradle-Plug-in zu verwenden“, obwohl es kein neueres gibt
„processDebugUnitTestManifest“ schlägt mit Manifestplatzhaltern für Testvarianten fehl
Boolesches Flag zum Deaktivieren der Überprüfung des Compile-SDK in CheckAarMetadataTask
Build-Fehler bezieht sich auf API-Level 34, das nicht vorhanden ist
Das Festlegen der JVM-Toolchain hat keine Auswirkungen auf den Wert von „targetCompatibility“ für JavaCompile.
Einträge für Navigations-Deeplinks mit Platzhalterdomains haben kein Attribut „android:host“ im zusammengeführten Manifest
Die Aufgabe „processDebugMainManifest“ schlägt seit Android-Gradle-Plug-in 8.1 fehl
Kann ich AnalyticsRecordingTask entfernen?
Inhalt von „output-metadata.json“ ist nicht konsistent
Kann ich AnalyticsRecordingTask entfernen?
Inhalt von „output-metadata.json“ ist nicht konsistent
Das Festlegen der JVM-Toolchain hat keine Auswirkungen auf den Wert von „targetCompatibility“ für JavaCompile.
Einträge für Navigations-Deeplinks mit Platzhalterdomains haben kein Attribut „android:host“ im zusammengeführten Manifest
Die Aufgabe „processDebugMainManifest“ schlägt seit Android-Gradle-Plug-in 8.1 fehl
Android Studio berücksichtigt die Umgebungsvariable STUDIO_GRADLE_JDK nicht
Benutzerdefinierte Quelltypen sollten Quellsätze mit mehreren Varianten erstellen
DependenciesInfoBuilder erfordert API-Update und Dokumentation
DexingNoClasspathTransform (minSdk >= 24) mit Java 11-Ziel schlägt aufgrund fehlender Nest-Mitglieder fehl
DslExtension.Builder.extendProjectWith() funktioniert in Groovy nicht wie beschrieben
Die API „VariantSelector.withFlavor“ wurde hinzugefügt, die nicht „kotlin.Pair“ verwendet.
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) has a cache miss because `proguard.txt` has changed (AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) hat einen Cache-Fehler, weil sich „proguard.txt“ geändert hat)
Das zusammengeführte App-Manifest enthält die Attribute „extractNativeLibs“ und „useEmbeddedDex“ aus Abhängigkeiten
AGP: Pfad zum AIDL-Tool und zur AIDL-Framework-Datei als öffentliche API verfügbar machen
Anfrage: Die IDE soll eine Korrektur für „PermittedSubclasses requires ASM9“ anbieten.
Fehler: „Enable KSP and use the KSP processor for this dependency instead“ (KSP aktivieren und stattdessen den KSP-Prozessor für diese Abhängigkeit verwenden) führt nur zu einer Website
Gradle 8.1 unterbricht das Konfigurations-Caching aufgrund von .gradle/.android/analytics.settings
generateLocaleConfig in AGP 8.1.0 verwendet eine nicht deterministische Reihenfolge, wodurch reproduzierbare Builds nicht mehr möglich sind
Dexer (D8)
App stürzt nach den letzten Updates aufgrund von Desugaring der Core-Bibliothek ab.
agp 8.1.0-Regression mit API 21 – F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Check failed: !method->IsAbstract()
Lint
Lint prüft sichere Casts nur für direkt implementierte Schnittstellen, nicht für vererbte.
Lint prüft keine gültigen Casts für Anrufempfänger
TypedArray#close (API 31) wird nicht desugared, aber AS zeigt keine Warnung an, wenn es in „try-with-resources“ verwendet wird
Fehler: Falsch-positive Warnung „Der Anbieter ‚BC‘ ist veraltet und ab Android P…“
Falsch positives Lint-Ergebnis zu „remember“ nach Kotlin-Upgrade auf 1.8.0
Falsch positive Lint-Warnung für SDK_INT-Prüfungen, die in einer Methode mit einem Enum-Parameter ausgeführt werden
Der Lint-Check „TypographyQuotes“ funktioniert nicht bei Escape-Anführungszeichen
Der Lint-Check „TrustAllX509TrustManager“ kennzeichnet Schnittstellen, die X509TrustManager erweitern, fälschlicherweise als unsicher.
Nur den eingefügten Code eines Ersetzungs-Fix neu formatieren
Lint: Intention-Vorschau löst Ausnahme für ReplaceStringQuickFix aus
Shrinker (R8)
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.
R8 schlägt während des Compose-Builds mit ArrayIndexOutOfBoundsException fehl
Einfacher StringBuilder-bezogener Code enthält keinen Tail-Aufruf zum Anhängen im Release- oder debuggable=false-Modus
Ein Grenzfall in der Methode „VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds()“
dex-startup-optimization führt zu java.lang.VerifyError: Rejecting class
Absturz mit Bestätigungsfehler unter Android 12 und höher

Android-Gradle-Plug-in 8.1.1

Behobene Probleme
Dexer (D8)
Java 16-Datensätze: equals(null) löst NullPointerException aus
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
Der Build bleibt bei „:minifyReleaseWithR8“ hängen, wenn die Apache POI-Bibliothek verwendet wird
Aufruf wird abgelehnt, wenn „R8-Optimierung aktivieren“ ausgewählt ist
NoClassDefFoundError für java.lang.reflect.Executable

Android-Gradle-Plug-in 8.1.2

Behobene Probleme
Android-Gradle-Plug-in
androidResources ist im Android-Bibliotheksmodul nicht verfügbar
[AGP 8.1.0] ./gradlew test schlägt mit „Unable to find manifest output“ fehl, wenn sowohl „splits.abi.isEnable“ als auch „testOptions.unitTests.isIncludeAndroidResources“ auf „true“ gesetzt sind.
Shrinker (R8)
Kotlin 1.9 führt dazu, dass Kotlin-Lambdas von R8 zerstört werden, wenn Nullprüfungen entfernt werden
R8 schlägt mit „Undefined value encountered during compilation“ (Beim Kompilieren wurde ein undefinierter Wert gefunden) für play-services-measurement-21.3.0-runtime.jar fehl

Android-Gradle-Plug-in 8.1.3

Behobene Probleme
Android-Gradle-Plug-in
[AGP 8.1.0] ./gradlew test schlägt mit „Unable to find manifest output“ fehl, wenn sowohl „splits.abi.isEnable“ als auch „testOptions.unitTests.isIncludeAndroidResources“ auf „true“ gesetzt sind.
Build-Fehler nach dem Update auf AGP 8.1

Android-Gradle-Plug-in 8.1.4

Behobene Probleme
Android-Gradle-Plug-in
Die Dexing-Aufgabe für die Klassen von Unterprojekten nicht ausführen, wenn sie bereits durch Artefakttransformationen dexed wurden