Android-Gradle-Plug-in 9.0.0 (Januar 2026)

Das Android-Gradle-Plug-in 9.0 ist ein wichtiger Release, der API- und Verhaltensänderungen mit sich bringt.

Wenn Sie auf das Android Gradle-Plug-in 9.0.0 aktualisieren möchten, verwenden Sie den Android-Gradle-Plug-in-Upgrade-Assistenten.

Der AGP-Upgrade-Assistent trägt dazu bei, das vorhandene Verhalten beim Aktualisieren Ihres Projekts beizubehalten, sofern dies angemessen ist. So können Sie Ihr Projekt auf AGP 9.0 aktualisieren, auch wenn Sie noch nicht bereit sind, alle neuen Standardeinstellungen in AGP 9.0 zu übernehmen.

Kompatibilität

Das maximale API-Level, das vom Android Gradle-Plug-in 9.0 unterstützt wird, ist API-Level 36. Weitere Informationen zur Kompatibilität:

Mindestversion Standardversion Hinweise
Gradle 9.1.0 9.1.0 Weitere Informationen finden Sie unter Gradle aktualisieren.
SDK-Build-Tools 36.0.0 36.0.0 Installieren oder konfigurieren Sie die SDK-Build-Tools.
NDK 28.2.13676358 Installieren Sie oder konfigurieren Sie eine andere Version des NDK.
JDK 17 17 Weitere Informationen finden Sie unter JDK-Version festlegen.

Die android-DSL-Klassen implementieren jetzt nur noch die neuen öffentlichen Schnittstellen.

In den letzten Jahren haben wir neue Schnittstellen für unsere DSL und API eingeführt, um besser steuern zu können, welche APIs öffentlich sind. In AGP-Versionen 7.x und 8.x wurden weiterhin die alten DSL-Typen (z. B. BaseExtension) verwendet, in denen auch die neuen öffentlichen Schnittstellen implementiert wurden, um die Kompatibilität während der Entwicklung der Schnittstellen aufrechtzuerhalten.

In AGP 9.0 werden ausschließlich unsere neuen DSL-Schnittstellen verwendet und die Implementierungen wurden in neue, vollständig verborgene Typen geändert. Dadurch wird auch der Zugriff auf die alte, eingestellte Variant API entfernt.

Für das Update auf AGP 9.0 müssen Sie möglicherweise Folgendes tun:

  • Prüfen, ob Ihr Projekt mit integriertem Kotlin kompatibel ist:Das org.jetbrains.kotlin.android-Plug-in ist nicht mit der neuen DSL kompatibel.
  • KMP-Projekte auf das Android-Gradle-Bibliotheks-Plug-in für KMP umstellen:Die Verwendung des org.jetbrains.kotlin.multiplatform-Plug-ins im selben Gradle-Unterprojekt wie die com.android.library- und com.android.application-Plug-ins ist nicht mit der neuen DSL kompatibel.

  • Build-Dateien aktualisieren:Die Änderung der Schnittstellen soll das DSL so ähnlich wie möglich halten. Es kann jedoch einige kleine Änderungen geben.

  • Benutzerdefinierte Build-Logik aktualisieren, um auf die neue DSL und API zu verweisen:Ersetzen Sie alle Verweise auf die interne DSL durch die öffentlichen DSL-Schnittstellen. In den meisten Fällen handelt es sich um einen direkten Ersatz. Ersetzen Sie alle Verwendungen der applicationVariants und ähnlicher APIs durch die neue androidComponents API. Das kann komplexer sein, da die androidComponents API stabiler konzipiert ist, damit Plugins länger kompatibel bleiben. Beispiele finden Sie in unseren Gradle-Rezepten.

  • Drittanbieter-Plug-ins aktualisieren:Einige Drittanbieter-Plug-ins sind möglicherweise noch von Schnittstellen oder APIs abhängig, die nicht mehr verfügbar sind. Migrieren Sie zu Versionen dieser Plug-ins, die mit AGP 9.0 kompatibel sind.

Durch die Umstellung auf die neuen DSL-Schnittstellen werden Plug-ins und Gradle-Build-Skripts, die verschiedene eingestellte APIs verwenden, verhindert, darunter:

Eingestellte API im android-Block Funktion Ersatz
applicationVariants,
libraryVariants,
testVariants und
unitTestVariants
Erweiterungspunkte für Plugins zum Hinzufügen neuer Funktionen zu AGP. Ersetzen Sie dies durch die androidComponents.onVariants-API, z. B.:
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
Für alle bisherigen APIs gibt es möglicherweise keinen direkten Ersatz. Melden Sie ein Problem, wenn es einen Anwendungsfall gibt, der nicht von den neuen Variant-APIs abgedeckt wird.
variantFilter Ermöglicht das Deaktivieren ausgewählter Varianten. Ersetzen Sie dies durch die androidComponents.beforeVariants-API, z. B.:
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider und
testServer
Registrierung benutzerdefinierter Testumgebungen zum Ausführen von Tests auf Android-Geräten und ‑Emulatoren. Wechseln Sie zu Von Gradle verwaltete Geräte.
sdkDirectory,
ndkDirectory,
bootClasspath,
adbExecutable und
adbExe
Verschiedene Komponenten des Android SDK für benutzerdefinierte Aufgaben verwenden Zu androidComponents.sdkComponents wechseln
registerArtifactType,
registerBuildTypeSourceProvider,
registerProductFlavorSourceProvider,
registerJavaArtifact,
registerMultiFlavorSourceProvider und
wrapJavaSourceSet
Veraltete Funktionen, die sich hauptsächlich auf die Verarbeitung generierter Quellen in Android Studio beziehen und in AGP 7.2.0 nicht mehr funktionieren. Es gibt keinen direkten Ersatz für diese APIs.
dexOptions Veraltete Einstellungen für das dx-Tool, das durch d8 ersetzt wurde. Keine der Einstellungen hat seit dem Android-Gradle-Plug-in 7.0 Auswirkungen. Es gibt keinen direkten Ersatz.
generatePureSplits Konfigurationsaufteilungen für Instant-Apps generieren Die Möglichkeit, Konfigurationsaufteilungen zu versenden, ist jetzt in Android App Bundles integriert.
aidlPackagedList AIDL-Dateien, die in das AAR-Paket aufgenommen werden sollen, um es als API für Bibliotheken und Apps verfügbar zu machen, die von dieser Bibliothek abhängen. Sie ist weiterhin für LibraryExtension verfügbar, aber nicht für die anderen Erweiterungstypen.

Wenn Sie auf AGP 9.0 aktualisieren und die folgende Fehlermeldung angezeigt wird, bedeutet das, dass in Ihrem Projekt weiterhin auf einige der alten Typen verwiesen wird:

java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension

Wenn Sie durch inkompatible Drittanbieter-Plug-ins blockiert werden, können Sie die alten Implementierungen für die DSL sowie die alte Variant API wieder aktivieren. Die neuen Schnittstellen sind dabei ebenfalls verfügbar und Sie können Ihre eigene Build-Logik weiterhin auf die neue API umstellen. Fügen Sie diese Zeile in Ihre gradle.properties-Datei ein, um die Speicherung zu verhindern:

android.newDsl=false

Sie können auch mit dem Upgrade auf die neuen APIs beginnen, bevor Sie auf AGP 9.0 upgraden. Die neuen Schnittstellen sind seit vielen AGP-Versionen verfügbar, sodass Sie neue und alte Schnittstellen mischen können. In der AGP-API-Referenzdokumentation wird die API-Oberfläche für jede AGP-Version angezeigt und es wird angegeben, wann jede Klasse, Methode und jedes Feld hinzugefügt wurde.

Während der Alpha-Phase von Version 9.0 werden wir uns an Plug-in-Autoren wenden, um ihnen bei der Anpassung und Veröffentlichung von Plug-ins zu helfen, die vollständig mit den neuen Modi kompatibel sind. Außerdem werden wir den AGP-Upgrade-Assistenten in Android Studio verbessern, um Sie bei der Migration zu unterstützen.

Wenn Sie feststellen, dass in der neuen DSL- oder Variant-API Funktionen fehlen, melden Sie das Problem bitte so bald wie möglich.

Integriertes Kotlin

Das Android-Gradle-Plug-in 9.0 bietet integrierte Kotlin-Unterstützung, die standardmäßig aktiviert ist. Das bedeutet, dass Sie das org.jetbrains.kotlin.android-Plug-in (oder kotlin-android-Plug-in) nicht mehr in Ihren Build-Dateien anwenden müssen, um Kotlin-Quelldateien zu kompilieren. Dadurch wird die Kotlin-Integration mit AGP vereinfacht, die Verwendung von eingestellten APIs vermieden und die Leistung in einigen Fällen verbessert.

Wenn Sie Ihr Projekt auf AGP 9.0 aktualisieren, müssen Sie daher auch zu integriertem Kotlin migrieren oder die Funktion deaktivieren.

Sie können die integrierte Kotlin-Unterstützung auch selektiv für Gradle-Unterprojekte deaktivieren, die keine Kotlin-Quellen haben.

Laufzeitabhängigkeit vom Kotlin-Gradle-Plug-in

Um integrierte Kotlin-Unterstützung zu bieten, hat das Android-Gradle-Plug-in 9.0 jetzt eine Laufzeitabhängigkeit vom Kotlin-Gradle-Plug-in (KGP) 2.2.10. Das bedeutet, dass Sie keine KGP-Version mehr deklarieren müssen. Wenn Sie eine KGP-Version unter 2.2.10 verwenden, führt Gradle automatisch ein Upgrade auf Version 2.2.10 durch. Wenn Sie eine KSP-Version verwenden, die niedriger als 2.2.10-2.0.2 ist, wird sie von AGP auf 2.2.10-2.0.2 aktualisiert, damit sie mit der KGP-Version übereinstimmt.

Upgrade auf eine höhere KGP-Version

Wenn Sie eine höhere Version von KGP oder KSP verwenden möchten, fügen Sie Folgendes in Ihre Build-Datei der obersten Ebene ein:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")

        // For KSP
        classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
    }
}

Downgrade auf eine niedrigere KGP-Version

Sie können die KGP-Version nur downgraden, wenn Sie die integrierte Kotlin-Unterstützung deaktiviert haben. Das liegt daran, dass in AGP 9.0 standardmäßig integriertes Kotlin aktiviert ist und für integriertes Kotlin KGP 2.2.10 oder höher erforderlich ist.

Wenn Sie eine niedrigere Version von KGP oder KSP verwenden möchten, deklarieren Sie diese Version in Ihrer Build-Datei der obersten Ebene mit einer Deklaration für die strikte Version:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("KGP_VERSION") }
        }

        // For KSP
        classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
            version { strictly("KSP_VERSION") }
        }
    }
}

Die Mindestversion von KGP, auf die Sie ein Downgrade durchführen können, ist 2.0.0.

IDE-Unterstützung für Test-Fixtures

AGP 9.0 bietet vollständige Unterstützung für Test-Fixtures in der Android Studio IDE.

Fused Library-Plug-in

Mit dem Fused Library-Plug-in (Vorschau) können Sie mehrere Bibliotheken als einzelne Android-Bibliothek (AAR) veröffentlichen. Das kann es Nutzern erleichtern, sich auf Ihre veröffentlichten Artefakte zu verlassen.

Informationen zu den ersten Schritten finden Sie unter Mehrere Android-Bibliotheken mit Fused Library als eine veröffentlichen.

Verhaltensänderungen

Das Android-Gradle-Plug-in 9.0 hat die folgenden neuen Verhaltensweisen:

Verhalten Empfehlung
Das Android-Gradle-Plug-in 9.0 verwendet standardmäßig NDK-Version r28c. Erwägen Sie, die NDK-Version, die Sie verwenden möchten, explizit anzugeben.
Das Android-Gradle-Plug-in 9.0 erfordert standardmäßig, dass Nutzer einer Bibliothek dieselbe oder eine höhere Compile-SDK-Version verwenden. Verwenden Sie beim Einbinden einer Bibliothek dasselbe oder ein höheres Compile SDK. Wenn dies nicht möglich ist oder Sie Nutzern einer von Ihnen veröffentlichten Bibliothek mehr Zeit für die Umstellung geben möchten, legen Sie AarMetadata.minCompileSdk explizit fest.

AGP 9.0 enthält Aktualisierungen der Standardwerte der folgenden Gradle-Attribute. So haben Sie die Möglichkeit, das Verhalten von AGP 8.13 beim Upgrade beizubehalten:

Attribut Funktion Änderung von AGP 8.13 zu AGP 9.0 Empfehlung
android.newDsl Verwenden Sie die neuen DSL-Schnittstellen, ohne die Legacy-Implementierungen des android-Blocks offenzulegen.
Das bedeutet auch, dass auf die alte Variant-API, z. B. android.applicationVariants, nicht mehr zugegriffen werden kann.
falsetrue Sie können die Funktion deaktivieren, indem Sie android.newDsl=false festlegen.
Wenn alle Plug-ins und die Build-Logik, die in Ihrem Projekt verwendet werden, kompatibel sind, entfernen Sie die Abmeldung.
android.builtInKotlin Aktiviert integriertes Kotlin falsetrue Auf integriertes Kotlin migrieren, falls möglich, oder deaktivieren.
android.uniquePackageNames Erzwingt, dass jede Bibliothek einen eindeutigen Paketnamen hat. falsetrue Geben Sie für alle Bibliotheken in Ihrem Projekt eindeutige Paketnamen an. Wenn das nicht möglich ist, können Sie diese Meldung während der Migration deaktivieren.
android.useAndroidx Verwenden Sie standardmäßig androidx-Abhängigkeiten. falsetrue androidx-Abhängigkeiten übernehmen.
android.default.androidx.test.runner Gerätetests werden standardmäßig mit der Klasse androidx.test.runner.AndroidJUnitRunner ausgeführt. Sie ersetzt die Standardklasse InstrumentationTestRunner, die für
android {
  defaultConfig {
    testInstrumentationRunner = "..."
  }
}
falsetrue Übernehmen Sie AndroidJUnitRunner oder geben Sie testInstrumentationRunner explizit an.
android.dependency.useConstraints Steuert die Verwendung von Abhängigkeitseinschränkungen zwischen Konfigurationen.
In AGP 9.0 ist der Standardwert false. Dabei werden nur Einschränkungen in Anwendungstests auf Geräten (AndroidTest) verwendet. Wenn Sie diesen Wert auf true festlegen, wird das Verhalten von Version 8.13 wiederhergestellt.
truefalse Verwenden Sie Abhängigkeitsbeschränkungen nicht überall, es sei denn, Sie benötigen sie. Wenn Sie den neuen Standardwert dieser Meldung akzeptieren, werden auch Optimierungen beim Import von Projekten aktiviert, die die Importzeit für Builds mit vielen Android-Bibliotheks-Unterprojekten verkürzen sollten.
android.enableAppCompileTimeRClass Code in Anwendungen wird mit einer nicht endgültigen R-Klasse kompiliert, wodurch die Anwendungskompilierung an die Bibliothekskompilierung angepasst wird.
Dadurch wird die Steigerung der Conversions verbessert und der Weg für zukünftige Leistungsoptimierungen des Ressourcenverarbeitungsablaufs geebnet.
falsetrue Bei vielen Projekten kann das neue Verhalten ohne Änderungen am Quellcode übernommen werden. Wenn die R-Klassenfelder an Stellen verwendet werden, an denen eine Konstante erforderlich ist, z. B. in switch-Anweisungen, müssen Sie sie so umgestalten, dass verkettete if-Anweisungen verwendet werden.
android.sdk.defaultTargetSdkToCompileSdkIfUnset Verwendet die Compile-SDK-Version als Standardwert für die Ziel-SDK-Version in Apps und Tests.
Vor dieser Änderung wurde die SDK-Zielversion standardmäßig auf die Mindest-SDK-Version festgelegt.
falsetrue Geben Sie die SDK-Zielversion für Apps und Tests explizit an.
android.onlyEnableUnitTestForTheTestedBuildType Erstellt nur Unittest-Komponenten für den getesteten Build-Typ.
Im Standardprojekt führt dies zu einem einzelnen Unit-Test für das Debugging. Bisher wurden Unit-Tests für das Debugging oder Release ausgeführt.
falsetrue Wenn für Ihr Projekt keine Tests für Debug- und Release-Builds erforderlich sind, müssen Sie nichts ändern.
android.proguard.failOnMissingFiles Der Build wird mit einem Fehler abgebrochen, wenn eine der im AGP DSL angegebenen Keep-Dateien auf der Festplatte fehlt. Vor dieser Änderung wurden Dateien mit Tippfehlern in Dateinamen stillschweigend ignoriert. falsetrue Entfernen Sie alle ungültigen ProGuard-Dateideklarationen.
android.r8.optimizedResourceShrinking R8 kann weniger Android-Ressourcen beibehalten, da Klassen und Android-Ressourcen gemeinsam berücksichtigt werden. falsetrue Wenn die Aufbewahrungsregeln Ihres Projekts bereits vollständig sind, sind keine Änderungen erforderlich.
android.r8.strictFullModeForKeepRules Ermöglicht es R8, weniger beizubehalten, da der Standardkonstruktor nicht implizit beibehalten wird, wenn eine Klasse beibehalten wird. Das heißt, -keep class A impliziert nicht mehr -keep class A { <init>(); }
.
falsetrue Wenn die Aufbewahrungsregeln Ihres Projekts bereits vollständig sind, sind keine Änderungen erforderlich.

Ersetzen Sie -keep class A durch -keep class A { <init>(); } in den Keep-Regeln Ihres Projekts für alle Fälle, in denen der Standardkonstruktor beibehalten werden muss.
android.defaults.buildfeatures.resvalues Aktiviert resValues in allen Unterprojekten truefalse Aktivieren Sie resValues nur in den Unterprojekten, die es benötigen, indem Sie in den Gradle-Build-Dateien dieser Projekte Folgendes festlegen:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders Aktiviert die Shader-Kompilierung in allen Unterprojekten. truefalse Aktivieren Sie die Shader-Kompilierung nur in den Unterprojekten, die zu kompilierende Shader enthalten, indem Sie in den Gradle-Build-Dateien dieser Projekte Folgendes festlegen:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed In AGP 9.0 wird getDefaultProguardFile() nur noch proguard-android-optimize.txt anstelle von proguard-android.txt unterstützen. So soll eine versehentliche Verwendung des Flags ­dontoptimize verhindert werden, das in proguard-android.txt enthalten ist. falsetrue Sie können ­dontoptimize explizit in einer benutzerdefinierten proguardFile angeben, wenn Sie die Optimierung vermeiden möchten und gleichzeitig proguard-android-optimize.txt verwenden. Entfernen Sie nach Möglichkeit das Flag ­dontoptimize aus dieser Datei, da es die Vorteile der R8-Optimierung verringert. Andernfalls können Sie die Funktion deaktivieren, indem Sie android.r8.globalOptionsInConsumerRules.disallowed=false festlegen.
android.r8.globalOptionsInConsumerRules.disallowed Ab AGP 9.0 schlägt die Veröffentlichung von Android-Bibliotheks- und Funktionsmodulen fehl, wenn die Keep-Dateien des Nutzers problematische ProGuard-Konfigurationen enthalten. Keep-Dateien, die globale Optionen wie ­dontoptimize oder ­dontobfuscate enthalten, sollten nur in Anwendungsmodulen verwendet werden. Sie können die Optimierungsvorteile für Bibliotheksnutzer verringern. Beim Kompilieren von Android-App-Modulen werden solche globalen Optionen, die in eine vorkompilierte Abhängigkeit (JAR oder AAR) eingebettet sind, stillschweigend ignoriert. Sie können nachsehen, wann dies geschieht, indem Sie in der Datei „configuration.txt“ (normalerweise in einem Pfad wie <app_module>/build/outputs/mapping/<build_variant>/configuration.txt) nach Kommentaren wie # REMOVED CONSUMER RULE: ­dontoptimize suchen. falsetrue In veröffentlichten Bibliotheken sollten alle inkompatiblen Regeln entfernt werden. In internen Bibliotheken sollten alle inkompatiblen, aber erforderlichen Regeln stattdessen in eine proguardFile in einem App-Modul verschoben werden. Deaktivieren Sie die Funktion, indem Sie android.r8.globalOptionsInConsumerRules.disallowed=false festlegen. Sobald alle Ihre Dateien für die Verbraucheraufbewahrung kompatibel sind, können Sie die Abmeldung entfernen.
android.sourceset.disallowProvider Verhindert das Übergeben von Anbietern für generierte Quellen mit der AndroidSourceSet-DSL. falsetrue Verwenden Sie die Sources API auf androidComponents, um generierte Quellen zu registrieren.
android.custom.shader.path.required Wenn die Shader-Kompilierung aktiviert ist, muss der Pfad des Shader-Compilers explizit in local.properties festgelegt werden. falsetrue Fügen Sie glslc.dir=/path/to/shader-tools der local.properties Ihres Projekts hinzu.

Entfernte Funktionen

Im Android-Gradle-Plug-in 9.0 wurden die folgenden Funktionen entfernt:

  • Unterstützung für eingebettete Wear OS-Apps
    In AGP 9.0 wird die Unterstützung für das Einbetten von Wear OS-Apps entfernt, da dies in Play nicht mehr unterstützt wird. Dazu gehört das Entfernen der wearApp-Konfigurationen und der AndroidSourceSet.wearAppConfigurationName-DSL. Informationen zum Veröffentlichen Ihrer App für Wear OS finden Sie unter Über Wear OS verbreiten.
  • androidDependencies- und sourceSets-Berichtsaufgabe
  • Unterstützung für dichtebasierte unterteilte APKs
    In AGP 9.0 wird die Unterstützung für die Erstellung von unterteilten APKs basierend auf der Bildschirmdichte entfernt. Die Funktion und die zugehörigen APIs wurden entfernt. Wenn Sie APKs mit AGP 9.0 oder höher basierend auf der Bildschirmdichte aufteilen möchten, verwenden Sie App-Bundles.

Geänderte DSL

Das Android-Gradle-Plug-in 9.0 enthält die folgenden wichtigen DSL-Änderungen:

  • Die Parametrisierung von CommonExtension wurde entfernt.

    An sich ist dies nur eine funktionsgefährdende Änderung auf Quellcodeebene, um zukünftige funktionsgefährdende Änderungen auf Quellcodeebene zu vermeiden. Sie bedeutet aber auch, dass die Blockmethoden von CommonExtension zu ApplicationExtension, LibraryExtension, DynamicFeatureExtension und TestExtension verschoben werden müssen.

    Wenn Sie Ihr Projekt auf AGP 9.0 aktualisieren, müssen Sie den Gradle-Plug-in-Code umgestalten, in dem diese Parameter oder die Blockmethoden verwendet werden. Das folgende Beispiel zeigt, wie ein Plug-in aktualisiert wird, um den Typparameter zu entfernen und nicht auf die entfernten Blockmethoden zu verweisen:

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    Bei Plug-ins, die auf einen Bereich von AGP-Versionen ausgerichtet sind, ist die direkte Verwendung des Getters binärkompatibel mit AGP-Versionen unter 9.0.

Entfernte DSL

Im Android-Gradle-Plug-in 9.0 wurden folgende Elemente entfernt:

Entfernte APIs

Im Android-Gradle-Plug-in 9.0 wurden folgende Elemente entfernt:

Entfernte Gradle-Eigenschaften

Die folgenden Gradle-Properties wurden ursprünglich hinzugefügt, um standardmäßig aktivierte Funktionen global zu deaktivieren.

Diese Funktionen sind seit AGP 8.0 oder niedriger standardmäßig deaktiviert. Aktivieren Sie diese Funktionen nur in den Unterprojekten, in denen sie verwendet werden, um einen effizienteren Build zu ermöglichen.

Attribut Funktion Ersatz
android.defaults.buildfeatures.aidl Aktiviert die AIDL-Kompilierung in allen Unterprojekten. Aktivieren Sie die AIDL-Kompilierung nur in den Unterprojekten, in denen AIDL-Quellen vorhanden sind, indem Sie die folgende Eigenschaft in den Gradle-Build-Dateien dieser Projekte festlegen:
android {
  buildFeatures {
    aidl = true
  }
}
in der Gradle-Build-Datei jedes Unterprojekts mit AIDL-Quellen
android.defaults.buildfeatures.renderscript Aktiviert die RenderScript-Kompilierung in allen Unterprojekten. Aktivieren Sie die Renderscript-Kompilierung nur in den Unterprojekten, in denen Renderscript-Quellen vorhanden sind, indem Sie die folgende Eigenschaft in den Gradle-Build-Dateien dieser Projekte festlegen:
android {
  buildFeatures {
    renderScript = true
  }
}

Erzwungene Gradle-Properties

In AGP 9.0 wird ein Fehler ausgegeben, wenn Sie die folgenden Gradle-Attribute festlegen.

Der Android-Gradle-Plug-in-Upgrade-Assistent aktualisiert Projekte, in denen diese Attribute verwendet werden, nicht auf AGP 9.0.

Attribut Funktion
android.r8.integratedResourceShrinking Das Verkleinern von Ressourcen wird jetzt immer als Teil von R8 ausgeführt. Die vorherige Implementierung wurde entfernt.
android.enableNewResourceShrinker.preciseShrinking Beim Entfernen von Ressourcen wird jetzt immer die präzise Methode verwendet, wodurch mehr entfernt werden kann.

Änderungen in R8

Die folgenden R8-Änderungen sind in AGP 9.0.0 enthalten.

Neue Konfigurationsoption -processkotlinnullchecks

Wir haben die neue R8-Option -processkotlinnullchecks hinzugefügt, um R8 für die Verarbeitung von Kotlin-Nullprüfungen zu konfigurieren. Für die Option ist ein obligatorisches Argument erforderlich, das einen der folgenden drei Werte haben muss: keep, remove_message und remove. Mit dieser Option werden die folgenden vom Kotlin-Compiler hinzugefügten Nullprüfungen verarbeitet:

class kotlin.jvm.internal.Intrinsics {
  void checkNotNull(java.lang.Object);
  void checkNotNull(java.lang.Object, java.lang.String);
  void checkExpressionValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkNotNullExpressionValue(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkFieldIsNotNull(java.lang.Object, java.lang.String);
  void checkFieldIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkParameterIsNotNull(java.lang.Object, java.lang.String);
  void checkNotNullParameter(java.lang.Object, java.lang.String);
}

Die Optionswerte, sortiert vom schwächsten zum stärksten, haben die folgende Wirkung:

  • keep ändert die Prüfungen nicht.
  • remove_message schreibt jeden Aufruf der Prüfmethode in einen Aufruf von getClass() für das erste Argument des Aufrufs um (die Nullprüfung wird also beibehalten, aber ohne Meldung).
  • remove entfernt die Überprüfungen vollständig.

Standardmäßig verwendet R8 remove_message. Alle Angaben für -processkotlinnullchecks überschreiben diese Einstellung. Wenn der Parameter mehrmals angegeben wird, wird der stärkste Wert verwendet.

Weitergabe von Informationen zum Beibehalten an Companion-Methoden beenden

Wenn Keep-Regeln mit Schnittstellenmethoden übereinstimmen, die dem Desugaring unterliegen, hat R8 die disallow optimization- und disallow shrinking-Bits zuvor intern an die synthetisierten Companion-Methoden übertragen.

Ab AGP 9.0 gelten Keep-Regeln nicht mehr für Companion-Methoden. Das entspricht der Tatsache, dass Keep-Regeln nicht für andere vom Compiler synthetisierte Felder, Methoden oder Klassen gelten.

Durch die Übertragung der Bits disallow optimization und disallow shrinking an die Companion-Methoden wurde der folgende Anwendungsfall zuvor unterstützt:

  1. Kompilieren Sie eine Bibliothek mit default-/static-/private-Schnittstellenmethoden in DEX mit minSdk < 24 und Regeln, die die Schnittstellenmethoden beibehalten.
  2. Kompilieren Sie eine App mit der Bibliothek im Klassenpfad und -applymapping.
  3. Führen Sie die App und die Bibliothek zusammen.

Das funktioniert nur mit -applymapping, da das disallow obfuscation-Bit nicht an die Companion-Methoden übertragen wird. Die Companion-Klassen, die in Schritt 1 generiert wurden, haben also verschleierte Methodennamen.

Dieser Anwendungsfall wird für minSdk <24 nicht mehr unterstützt. So umgehen Sie das Problem:

  1. Die Bibliothek wird mit default/static/private-Schnittstellenmethoden in Klassendateien mit minSdk < 24 umgewandelt.
  2. Kompilieren Sie das desugared-Artefakt mit R8 und Regeln, die die Schnittstellenmethoden in den Companion-Klassen beibehalten.
  3. Kompilieren Sie die App mit der Bibliothek im Classpath.
  4. Führen Sie die App und das desugared-Artefakt zusammen.

Eine weitere Nebenwirkung ist, dass es nicht mehr möglich ist, die Attribute der inneren Klasse und der einschließenden Methode für anonyme und lokale Klassen in Begleitmethoden der Schnittstelle beizubehalten.

Standardmäßig ausgegebene Quelldatei in r8-map-id-<MAP_ID> ändern

Diese Änderung ist ab AGP 8.12.0 verfügbar.

Das standardmäßig ausgegebene Attribut für die Quelldatei einer Klasse ändert sich von SourceFile zu r8-map-id-<MAP_ID>, wenn ein Retracing erforderlich ist, d. h. wenn entweder die Verschleierung oder die Optimierung aktiviert ist.

Anhand eines verschleierten Stacktrace kann mit dem neuen Attribut für die Quelldatei die ID der Mapping-Datei extrahiert werden, die für das Zurückverfolgen erforderlich ist. So kann das automatische Zurückverfolgen von Stacktraces in Logcat unterstützt werden.

Wenn ein benutzerdefiniertes Attribut für die Quelldatei verwendet wird (-renamesourcefileattribute), hat dieses benutzerdefinierte Attribut für die Quelldatei weiterhin Vorrang.

Im ProGuard-Kompatibilitätsmodus (wenn gradle.properties android.enableR8.fullMode=false enthält) wird das Ausgeben eines Quellattributs von r8-map-id-<MAP_ID> nur wirksam, wenn das Attribut SourceFile nicht beibehalten wird. Apps, die den ProGuard-Kompatibilitätsmodus verwenden und die Mapping-Datei-ID in ihre Stacktraces aufnehmen möchten, sollten -keepattributes SourceFile entfernen oder zum R8-Vollmodus migrieren.

Die in r8-map-id-<MAP_ID> verwendete Karten-ID ist der vollständige Karten-Hash und nicht das zuvor verwendete 7‑stellige Präfix des Karten-Hashs.

Verwendung minimierter synthetischer Namen beim Desugaring in L8 aktivieren

Der Name von synthetischen Klassen, die von D8 generiert werden, enthält normalerweise den Teilstring $$ExternalSynthetic. Dieser gibt an, dass es sich um eine von D8 generierte synthetische Klasse handelt. Außerdem wird im Namen des synthetischen Typs auch die Art des synthetischen Typs codiert (z. B. Backport, Lambda). Dies wirkt sich negativ auf die resultierende DEX-Größe aus, da die Klassennamen mehr Speicherplatz im String-Pool belegen.

In AGP 9.0 wird L8 (Core Library Desugaring) so konfiguriert, dass die DEX-Datei mit allen j$-Klassen ein neues verkürztes Klassennameformat für synthetische Klassen verwendet. Der neue Klassenname verwendet eine numerische ID (z. B. $1).

Unterstützung für -addconfigurationdebugging entfernen

In AGP 9.0 wird die Unterstützung von -addconfigurationdebugging entfernt. Der Compiler gibt jetzt eine Warnung aus, wenn das Flag verwendet wird.

Unterstützung für die Generierung von L8-Regeln aus D8/R8 entfernen

Diese Änderung ist nur für Entwickler relevant, die die D8-/R8-Befehlszeile oder APIs direkt verwenden.

Mit R8 9.0 wird die Unterstützung für das Generieren von Keep-Regeln für L8 aus D8 und R8 entfernt. Verwenden Sie stattdessen TraceReferences.

Konkret werden die Methoden D8Command.builder.setDesugaredLibraryKeepRuleConsumer und R8Command.Builder.setDesugaredLibraryKeepRuleConsumer entfernt und die Unterstützung für --desugared-lib-pg-conf-output wird aus den Befehlszeilenoptionen von D8 und R8 entfernt.

Behobene Probleme

Android-Gradle-Plug-in 9.0.0-rc03

Behobene Probleme
Android-Gradle-Plug-in
AGP 9.0.0-rc01 löst Kotlin-Bibliotheken nicht über die Funktion „kotlin()“ auf

Android-Gradle-Plug-in 9.0.0-rc02

Behobene Probleme
In AGP 9.0.0-rc02 wurden keine öffentlichen Probleme als behoben markiert.

Android-Gradle-Plug-in 9.0.0-rc01

Behobene Probleme
In AGP 9.0.0-rc01 wurden keine öffentlichen Probleme als behoben markiert.

Android-Gradle-Plug-in 9.0.0-beta05

Behobene Probleme
Android-Gradle-Plug-in
Die integrierte Kotlin-Unterstützung in AGP sollte nicht mit den Kotlin-Quellsätzen synchronisiert werden.

Android-Gradle-Plug-in 9.0.0-beta04

Behobene Probleme
Android-Gradle-Plug-in
Die integrierte Kotlin-Unterstützung in AGP sollte nicht mit den Kotlin-Quellsätzen synchronisiert werden.
„missingDimensionStrategy“ bevorzugt eine Variante, die dem eigenen Namen entspricht, auch wenn sie aus einer nicht verknüpften Dimension stammt.

Android-Gradle-Plug-in 9.0.0-beta03

Behobene Probleme
In AGP 9.0.0-beta03 wurden keine öffentlichen Probleme als behoben markiert.

Android-Gradle-Plug-in 9.0.0-beta02

Behobene Probleme
Android-Gradle-Plug-in
Funktionsanfrage: Ideale AGP-Version als Property einfügen
Stabilisierung von SingleArtifact.VERSION_CONTROL_INFO_FILE
androidTest connectedCheck logcat output is broken
Fussel
AGP 8.11.0: Die Aufgabe „lintAnalyzeRelease“ stürzt ab, wenn .gradle.kts-Dateien mit „apply(from = "...")“ angewendet werden.
Lint-Integration
AndroidLintAnalysisTask-Cache-Fehler bei verschiedenen JDK-Anbietern oder Nebenversionen aufgrund von Unterschieden bei systemPropertyInputs.javaVersion

Android-Gradle-Plug-in 9.0.0-beta01

Behobene Probleme
In AGP 9.0.0-beta01 wurden keine öffentlichen Probleme als behoben markiert.

Android-Gradle-Plug-in 9.0.0-alpha14

Behobene Probleme
Android-Gradle-Plug-in
Die integrierte Kotlin-Unterstützung in AGP sollte nicht mit den Kotlin-Sourcesets synchronisiert werden.
Veröffentlichung der Android-Bibliothek fehlgeschlagen, wenn die Keep-Datei des Nutzers „-dontobfuscate“ enthält
Keine Optionen zum Drucken der Zuordnung für optimierte Ressourcen
Es soll ein Fehler ausgegeben werden, wenn „finalizeDsl“ nach dieser Phase aufgerufen wird.
AGP initialisiert die Jetifier-Konfiguration auch dann, wenn Jetifier deaktiviert ist.
Wenn „kotlin.stdlib.default.dependency“ für Modul- und POM-Dateien auf „true“ gesetzt ist, wird „kotlinStdlib“ nicht als Kompilierungszeitabhängigkeit hinzugefügt, wenn die App in Kotlin erstellt wird.
Lint-Integration
Lint verwendet automatisch das zuletzt installierte SDK trotz „compileSdk“, wird nicht als Task-Eingabe registriert und unterbricht das Caching
Shrinker (R8)
R8-optimierte Ressourcenverkleinerung schlägt bei Verwendung von endgültigen Ressourcen-IDs still fehl

Android-Gradle-Plug-in 9.0.0-alpha13

Behobene Probleme
Android-Gradle-Plug-in
AGP9: `variant.sources.kotlin!!.addGeneratedSourceDirectory()` funktioniert nicht
AAR-Metadatenprüfungen für das Kompilieren des SDKs verwenden die alte DSL
Entfernen der verworfenen Property `com.android.build.api.dsl.ManagedDevices.devices`

Android-Gradle-Plug-in 9.0.0-alpha12

Behobene Probleme
Android-Gradle-Plug-in
Reine Java-Projekte haben eine Abhängigkeit von der Kotlin-Standardbibliothek.
Veraltete KotlinMultiplatformAndroidCompilationBuilder-Properties in AGP 9.0 entfernen
`com.android.tools.build:gradle:9.0.0-alpha05` sollte eine API-Abhängigkeit von KGP und gradle-api haben.
Gradle-Plug-in „com.android.experimental.built-in-kotlin“ umbenennen

Android-Gradle-Plug-in 9.0.0-alpha11

Behobene Probleme
Android-Gradle-Plug-in
„Built-in-kotlin“ veröffentlicht keine Einschränkung für die Abhängigkeit „kotlin-stdlib“ in der Maven-POM-Datei.
Testlauf für Abweichungen zwischen compileSdk und targetSdk hinzufügen
Ein leerer resConfigs-Wert führt zu einem unklaren aapt-Fehler.

Android-Gradle-Plug-in 9.0.0-alpha10

Behobene Probleme
Android-Gradle-Plug-in
„extractNativeLibs“ und „useEmbeddedDex“ sollten nicht aus dem Manifest stammen.
Warnungen von R8 in AGP 9.0.0-alpha09
Fussel
Bei integriertem Kotlin wird META-INF kein .kotlin_module hinzugefügt.
Der Lint-Klassenpfad enthält doppelte Klassen in verschiedenen Versionen.
Problemumgehung zum Überschreiben privater Ressourcen funktioniert nicht (tools:override = "true")

Android-Gradle-Plug-in 9.0.0-alpha09

Behobene Probleme
Android-Gradle-Plug-in
Das Plug-in „legacy-kapt“ überspringt die Verarbeitung von Annotationen im Gegensatz zu „kotlin-kapt“.
„compileSdkSpec.minorApiLevel“ funktioniert nicht mit „SettingsExtension“
[fused lib - public] Generated fused library does not include sources

Android-Gradle-Plug-in 9.0.0-alpha08

Behobene Probleme
In AGP 9.0.0-alpha08 wurden keine öffentlichen Probleme als behoben markiert.

Android-Gradle-Plug-in 9.0.0-alpha07

Behobene Probleme
Android-Gradle-Plug-in
Ein Build schlägt fehl, wenn es Aufgaben zur Codegenerierung gibt.
Wenn Sie das `kotlin-android`-Plug-in mit `android.builtInKotlin=false`, `android.newDsl=false` und `android.enableLegacyVariantApi=false` verwenden, schlägt es mit der Fehlermeldung „API 'applicationVariants' is obsolete“ (API „applicationVariants“ ist veraltet) fehl.
Die integrierte Kotlin-Version kann die nicht versionierte kotlin-stdlib nicht auflösen, wenn kotlin.stdlib.default.dependency=false
DexData öffnet eine Datei, ohne sie zu schließen, was die Bereinigung verhindert
AndroidSourceDirectorySet sollte in AGP 9.0 nicht mehr von PatternFilterable abgeleitet werden
Test-Fixture-Fehler in reinen Testmodulen
Falscher Fehler bei Verwendung von Kontextempfängern in Test-Fixtures
Falsche IDE-Fehler für Kotlin-Code in „testFixtures“

Android-Gradle-Plug-in 9.0.0-alpha06

Behobene Probleme
Android-Gradle-Plug-in
Mit der neuen Optimierungs-DSL wird standardmäßig keine „configuration.txt“-Datei erstellt.
AGP 8.13.0 kann den Navigationsgraphen in einem Modul nicht überprüfen
AGP verwendet verworfene Gradle API: Multi-String-Notation
Nutzer warnen, die versuchen, die alte Multidex-Bibliothek mit minSdkVersion >=21 zu verwenden
Fussel
Lint-Prüfung „ChecksSdkIntAtLeast“ prüft nicht, ob der annotierte Wert korrekt ist

Android-Gradle-Plug-in 9.0.0-alpha05

Behobene Probleme
Android-Gradle-Plug-in
android.proguard.failOnMissingFiles funktioniert nicht für consumerProguardFiles
Kotlin-Gradle-Plug-in-Abhängigkeit auf 2.2.10 aktualisieren
KotlinJvmAndroidCompilation mit der KGP API erstellen
Der explizite Kotlin-API-Modus wird auf Testquellen angewendet
Fussel
Lint gibt die Warnung „Could not clean up K2 caches“ (K2-Caches konnten nicht bereinigt werden) aus.

Android-Gradle-Plug-in 9.0.0-alpha04

Behobene Probleme
Android-Gradle-Plug-in
Standard-Java-Quell-/Zielversion in AGP 9.0 von Java 8 zu Java 11 wechseln
Standardwert von „android.useAndroidX“ auf „true“ umstellen
Bessere Ausnahme beim Anwenden des kapt-Plug-ins mit integriertem Kotlin.
Fussel
Lint gibt die Warnung „Could not clean up K2 caches“ (K2-Caches konnten nicht bereinigt werden) aus.

Android-Gradle-Plug-in 9.0.0-alpha03

Behobene Probleme
Android-Gradle-Plug-in
Wenn `isIncludeAndroidResources` aktiviert ist, kann `process{Variant}UnitTestManifest` in AGP 8.12.0 keine tools:overrideLibrary-Verwendungen zusammenführen.
AGP verursacht Einstellungswarnungen in Gradle für JVM-Testaufgaben
„DependencyReportTask“ ist nicht mit dem Konfigurationscache kompatibel
Fussel
Fehler: Beim Entfernen nicht verwendeter Ressourcen werden die Übersetzungen nicht entfernt und es wird auch nicht danach gefragt.

Android-Gradle-Plug-in 9.0.0-alpha02

Behobene Probleme
Android-Gradle-Plug-in
Build schlägt fehl, wenn die ProGuard-Datei nicht vorhanden ist
Entfernen von gradle.properties-Flags für BuildConfig-Standardwerte
Ändern Sie den Standardwert von „targetSdk“ der App so, dass er auf „compileSdk“ anstatt auf „minSdk“ basiert.

Android-Gradle-Plug-in 9.0.0-alpha01

Behobene Probleme
Android-Gradle-Plug-in
Veraltetes AndroidSourceSet.jni in AGP 9.0 entfernen
Installation.installOptions() in AGP 9.0 entfernen
BuildType.isRenderscriptDebuggable in AGP 9.0 entfernen
android.defaults.buildfeatures.renderscript entfernen
`com.android.kotlin.multiplatform.library` stürzt bei von Gradle verwalteten Geräten ab
Entfernen Sie die Standard-gradle.properties-Flags für `android.defaults.buildfeatures.aidl`.

Android-Gradle-Plug-in 9.0.0

Behobene Probleme
In AGP 9.0.0 wurden keine öffentlichen Probleme als behoben markiert.