Android Gradle-Plug-in 8.1.0 (Juli 2023)

Das Android Gradle-Plug-in 8.1.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 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 Standardsprache für die Build-Konfiguration

Für neue Projekte wird jetzt standardmäßig die Kotlin DSL (build.gradle.kts) für die Build-Konfiguration verwendet. Das bietet eine bessere Bearbeitungsmöglichkeit 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 beste Leistung zu erzielen. Weitere Informationen finden Sie im Migrationsleitfaden für Kotlin DSL.

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 automatisch Spracheinstellungen pro App unterstützt. Das Android Gradle-Plug-in generiert anhand Ihrer Projektressourcen die LocaleConfig-Datei und fügt der endgültigen Manifestdatei einen Verweis darauf hinzu. Sie müssen das also nicht mehr manuell tun. AGP verwendet die Ressourcen in den res-Ordnern Ihrer App-Module und alle Bibliotheksmodulabhängigkeiten, um die Sprachen zu ermitteln, die in die LocaleConfig-Datei aufgenommen werden sollen.

Die automatische Spracheneinstellung pro App wird von Apps unterstützt, auf denen Android 13 (API-Level 33) oder höher ausgeführt wird. Wenn Sie die Funktion verwenden möchten, müssen Sie compileSdkVersion auf mindestens 33 festlegen. Wenn Sie Spracheinstellungen pro App für ältere Android-Versionen konfigurieren möchten, müssen Sie weiterhin die APIs und die In-App-Sprachauswahl verwenden.

Wenn Sie die automatische Sprachunterstützung pro App aktivieren möchten, geben Sie ein Standard-Standortkontext fest:

  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. Um die Namen der Gebietsschemas zu bilden, kombinieren Sie den Sprachcode mit den optionalen Schrift- und Regionscodes und trennen Sie sie durch einen Bindestrich:

    • Sprache: Verwenden Sie den zwei- oder dreistelligen ISO 639-1-Code.
    • Schrift (optional): Verwenden Sie den ISO 15924-Code.
    • Region (optional): Verwenden Sie entweder den zweistelligen ISO 3166-1-alpha-2-Code oder den dreistelligen UN_M.49-Code.

    Angenommen, Ihre Standardsprache ist amerikanisches Englisch:

        unqualifiedResLocale=en-US
        

AGP fügt diese Standard- und alle von Ihnen angegebenen alternativen Sprachen über values-*-Verzeichnisse im Ordner res der automatisch generierten LocaleConfig-Datei hinzu.

Die automatische Sprachunterstützung 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, der auf JVM 17 ausgerichtet ist

Ab AGP 8.1.0-alpha04 enthält Android Lint Bytecode, der auf die 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 den 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 erhalten Sie eine Warnung, wenn Sie die Komprimierung der nativen Bibliothek nicht mit der DSL anstelle des Manifests konfigurieren. In der folgenden Anleitung wird beschrieben, wie Sie Ihre Konfiguration für die Verwendung des DSL aktualisieren. Wenn Sie Hilfe bei diesen Updates benötigen, verwenden Sie den AGP-Upgrade-Assistenten (Tools > AGP-Upgrade-Assistent).

Wenn Sie nicht komprimierte 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 bei Verwendung von Groovy) 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 zur Konfiguration 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 Signaturkonfigurationen anzugeben, verwendet AGP die Standardkonfiguration für die Debug-Signatur, wenn ein profilierbarer oder debuggbarer Build ausgeführt wird. Dieses Flag ist standardmäßig deaktiviert, um Build-Autoren zu ermutigen, bestimmte Konfigurationen für die Signatur beim Profiling anzugeben.
android.experimental.library.desugarAndroidTest AGP 8.0 false Mit diesem Flag können Bibliotheksbauer die Desugaring der zentralen Bibliothek für Test-APKs aktivieren, ohne dass sich dies auf das erstellte AAR auswirkt, z. B. durch Linting. Wir planen, dieses Verhalten in der Variant API zu unterstützen.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Wenn diese Option aktiviert ist, können Sie mit Gradle Managed Devices einen benutzerdefinierten Gerätetyp verwenden, der von einem Plug-in bereitgestellt wird. 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 bei einem Absturz einen Stacktrace aus. 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 gleichzeitig aktiven Gradle-verwalteten Geräten (AVDs) an. Wenn der Wert 0 oder negativ ist, gibt es keine maximale Geräteanzahl.
android.experimental.testOptions.installApkTimeout AGP 8.0 Keine Die Zeitüberschreitung in Sekunden für die Installation eines APK. Wenn der Wert 0 oder negativ ist, wird er von UTP auf einen Standardwert gesetzt.

Behobene Probleme

Android Gradle Plugin 8.1.0

Behobene Probleme
Android Gradle Plugin
Probleme mit dem Konfigurationscache bei `com.android.build.gradle.tasks.ShaderCompile`
Wenn Java-Ressourcen mit AGP APIs hinzugefügt werden, funktioniert der Konfigurationscache nicht mehr
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so ist im APK verpackt
KGP liest das Manifest während der Konfiguration und macht den Konfigurationscache bei einer Manifeständerung ungültig
Unklare Build-Warnung bei Problemen im zusammengeführten Manifest
Beim Upgrade auf AGP 7.4 wird ein StackOverflowError ausgegeben
ClassNotFoundException in einer dynamischen Funktion, die direkt vom Kotlin-Bibliotheks-Unterprojekt abhängt
processDebugUnitTestManifest schlägt mit Manifest-Platzhaltern für Testvarianten fehl
processDebugUnitTestManifest schlägt mit Manifest-Platzhaltern für Testvarianten fehl
Die Namespace-Eigenschaft gehört wahrscheinlich zu „HasAndroidResources“
Die 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“, wenn es kein neueres gibt
processDebugUnitTestManifest schlägt mit Manifest-Platzhaltern für Testvarianten fehl
Boolesche Variable zum Deaktivieren der Prüfung des Compile-SDKs in CheckAarMetadataTask
Build-Fehler bezieht sich auf API-Level 34, das nicht existiert
Das Festlegen der JVM-Toolchain hat keine Auswirkungen auf den Wert „targetCompatibility“ von JavaCompile
Navigations-Deeplink-Einträge mit Domains mit Platzhaltern haben im zusammengeführten Manifest kein Attribut „android:host“
Die Aufgabe „processDebugMainManifest“ schlägt seit dem Android Gradle Plugin 8.1 fehl
Können wir AnalyticsRecordingTask entfernen?
Inhalt von „output-metadata.json“ ist nicht konsistent
Können wir AnalyticsRecordingTask entfernen?
Inhalt von „output-metadata.json“ ist nicht konsistent
Das Festlegen der JVM-Toolchain hat keine Auswirkungen auf den Wert „targetCompatibility“ von JavaCompile
Navigations-Deeplink-Einträge mit Domains mit Platzhaltern haben im zusammengeführten Manifest kein Attribut „android:host“
Die Aufgabe „processDebugMainManifest“ schlägt seit dem Android Gradle Plugin 8.1 fehl
Android Studio berücksichtigt die Umgebungsvariable STUDIO_GRADLE_JDK nicht
Für benutzerdefinierte Quelltypen sollten Quellensätze mit mehreren Varianten erstellt werden.
DependenciesInfoBuilder benötigt API-Update und -Dokument
DexingNoClasspathTransform (minSdk >= 24) mit Java 11-Ziel schlägt aufgrund fehlender verschachtelter Mitglieder fehl
DslExtension.Builder.extendProjectWith() funktioniert nicht wie in Groovy beschrieben
Fügen Sie die API „VariantSelector.withFlavor“ hinzu, die kotlin.Pair nicht verwendet.
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) hat einen Cache-Miss, da sich „proguard.txt“ geändert hat
Das zusammengeführte Manifest der App enthält die Attribute „extractNativeLibs“ und „useEmbeddedDex“ aus Abhängigkeiten
AGP: Pfad zum AIDL-Tool und zur AIDL-Datei des Frameworks als öffentliche API freigeben
Anfrage: Die IDE soll eine Lösung für „PermittedSubclasses requires ASM9“ anbieten
Fehler: Wenn Sie „KSP aktivieren und stattdessen den KSP-Prozessor für diese Abhängigkeit verwenden“ auswählen, werden Sie nur zu einer Website weitergeleitet.
Gradle 8.1 bricht das Konfigurations-Caching aufgrund von .gradle/.android/analytics.settings ab
generateLocaleConfig in agp 8.1.0 verwendet eine nicht deterministische Sortierung, wodurch reproduzierbare Builds nicht möglich sind
Dexer (D8)
Die App stürzt nach den letzten Updates ab, weil die Core Library desugaring verwendet wird.
agp 8.1.0 regression with API 21 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Check failed: !method->IsAbstract()
Fussel
Lint prüft sichere Umwandlungen 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 wird ab Android P…“
Falsch positive Lint-Meldung zu „remember“ nach dem Upgrade auf Kotlin 1.8.0
Falsch positive Lint-Warnung für SDK_INT-Prüfungen, die in einer Methode mit einem Enum-Parameter ausgeführt werden
TypographyQuotes-Lint-Prüfung funktioniert nicht bei ge escapeten Anführungszeichen
Die Lint-Prüfung „TrustAllX509TrustManager“ kennzeichnet Schnittstellen, die X509TrustManager erweitern, fälschlicherweise als fehlerhaft
Nur den eingefügten Code einer Ersatzkorrektur neu formatieren
Lint: Bei der Vorschau der Absicht wird für die Schnellkorrektur „ReplaceString“ eine Ausnahme ausgelöst
Schrumpfgerät (R8)
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.
R8 schlägt beim Compose-Build mit ArrayIndexOutOfBoundsException fehl
Simple StringBuilder related code misses tail call to append in release or debuggable=false mode
Ein Grenzfall in der Methode „shouldActivateMethodStateGuardedByBounds()“ von VirtualDispatchMethodArgumentPropagator
dex-startup-optimization führt zu java.lang.VerifyError: Rejecting class
Absturz mit Bestätigungsfehler unter Android 12 und höher

Android Gradle Plugin 8.1.1

Behobene Probleme
Dexer (D8)
Java 16-Datensätze: „equals(null)“ wirft NullPointerException
Schrumpfgerät (R8)
java.lang.VerifyError: Verifier rejected class
Der Build bleibt bei der Verwendung der Apache POI-Bibliothek bei :minifyReleaseWithR8 hängen
Aufruf wird abgelehnt, wenn R8-Optimierung aktiviert ist
NoClassDefFoundError für java.lang.reflect.Executable

Android Gradle Plugin 8.1.2

Behobene Probleme
Android Gradle Plugin
androidResources ist im Android-Bibliotheksmodul nicht verfügbar
[AGP 8.1.0] ./gradlew test schlägt mit der Meldung „Manifest-Ausgabe konnte nicht gefunden werden“ fehl, wenn sowohl „splits.abi.isEnable“ als auch „testOptions.unitTests.isIncludeAndroidResources“ auf „true“ gesetzt sind
Schrumpfgerät (R8)
In Kotlin 1.9 werden Kotlin-Lambdas von R8 entfernt, wenn Null-Prüfungen entfernt werden
R8 schlägt mit der Fehlermeldung „Undefinierter Wert bei der Kompilierung gefunden“ für play-services-measurement-21.3.0-runtime.jar fehl

Android-Gradle-Plug-in 8.1.3

Behobene Probleme
Android Gradle Plugin
[AGP 8.1.0] ./gradlew test schlägt mit der Meldung „Manifest-Ausgabe konnte nicht gefunden werden“ fehl, wenn sowohl splits.abi.isEnable als auch testOptions.unitTests.isIncludeAndroidResources auf „wahr“ gesetzt sind
Build-Fehler nach dem Upgrade auf AGP 8.1

Android Gradle-Plug-in 8.1.4

Behobene Probleme
Android Gradle Plugin
De-Xing-Aufgabe nicht für Klassen von Unterprojekten ausführen, wenn sie bereits durch Artefakttransformationen de-Xt wurden