Wtyczka Androida do obsługi Gradle w wersji 9.0.0 (styczeń 2026 r.)

Wtyczka Androida do obsługi Gradle w wersji 9.0 to wersja główna, która wprowadza zmiany w interfejsie API i zachowaniu.

Aby zaktualizować wtyczkę Androida do obsługi Gradle do wersji 9.0.0, użyj Asystenta uaktualniania wtyczki Androida do obsługi Gradle.

Asystent uaktualniania AGP pomaga zachować dotychczasowe działanie podczas uaktualniania projektu, gdy jest to odpowiednie. Dzięki temu możesz uaktualnić projekt, aby używać AGP 9.0, nawet jeśli nie chcesz jeszcze stosować wszystkich nowych ustawień domyślnych w AGP 9.0.

Zgodność

Maksymalny poziom interfejsu API obsługiwany przez wtyczkę Androida do Gradle w wersji 9.0 to poziom 36. Inne informacje o zgodności:

Wersja minimalna Wersja domyślna Uwagi
Gradle 9.1.0 9.1.0 Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilacji pakietu SDK 36.0.0 36.0.0 Zainstaluj lub skonfiguruj narzędzia SDK Build Tools.
NDK Nie dotyczy 28.2.13676358 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 17 17 Więcej informacji znajdziesz w artykule Ustawianie wersji JDK.

Klasy android DSL implementują teraz tylko nowe interfejsy publiczne.

W ciągu ostatnich kilku lat wprowadziliśmy nowe interfejsy dla naszego języka DSL i interfejsu API, aby lepiej kontrolować, które interfejsy API są publiczne. Wtyczki AGP w wersjach 7.x i 8.x nadal używały starych typów DSL (np. BaseExtension), które również implementowały nowe interfejsy publiczne, aby zachować zgodność w trakcie prac nad interfejsami.

AGP 9.0 korzysta wyłącznie z naszych nowych interfejsów DSL, a implementacje zostały zmienione na nowe typy, które są w pełni ukryte. Spowoduje to również usunięcie dostępu do starego, wycofanego interfejsu API wariantu.

Aby zaktualizować wtyczkę Androida do obsługi Gradle do wersji 9.0, może być konieczne wykonanie tych czynności:

  • Upewnij się, że projekt jest zgodny z wbudowanym Kotlinem: wtyczka org.jetbrains.kotlin.android nie jest zgodna z nowym DSL.
  • Przełącz projekty KMP na wtyczkę Android Gradle Library Plugin for KMP: używanie wtyczki org.jetbrains.kotlin.multiplatform w tym samym podprojekcie Gradle co wtyczki com.android.librarycom.android.application jest niezgodne z nowym DSL.

  • Zaktualizuj pliki kompilacji: zmiana interfejsów ma na celu zachowanie jak największego podobieństwa DSL, ale mogą wystąpić niewielkie zmiany.

  • Zaktualizuj niestandardową logikę kompilacji, aby odwoływała się do nowego języka DSL i interfejsu API: zastąp wszystkie odwołania do wewnętrznego języka DSL interfejsami publicznego języka DSL. W większości przypadków będzie to wymiana 1:1. Zastąp wszystkie użycia interfejsów API applicationVariants i podobnych nowym androidComponents API. Może to być bardziej skomplikowane, ponieważ androidComponents interfejs API jest zaprojektowany tak, aby był bardziej stabilny i zapewniał dłuższą zgodność wtyczek. Przykłady znajdziesz w przepisach Gradle.

  • Zaktualizuj wtyczki innych firm: niektóre wtyczki innych firm mogą nadal korzystać z interfejsów lub interfejsów API, które nie są już udostępniane. Przejdź na wersje tych wtyczek, które są zgodne z AGP 9.0.

Przejście na nowe interfejsy DSL uniemożliwia wtyczkom i skryptom kompilacji Gradle korzystanie z różnych wycofanych interfejsów API, w tym:

Wycofany interfejs API w bloku android Funkcja Wymiana
applicationVariants,
libraryVariants,
testVariants i
unitTestVariants
Punkty rozszerzeń dla wtyczek, które umożliwiają dodawanie nowych funkcji do AGP. Zastąp go interfejsem API androidComponents.onVariants, na przykład:
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
Nie wszystkie poprzednie interfejsy API mogą mieć bezpośrednie odpowiedniki. Zgłoś problem, jeśli istnieje przypadek użycia, który nie jest objęty nowymi interfejsami API wariantów.
variantFilter Umożliwia wyłączenie wybranych wariantów. Zastąp go interfejsem API androidComponents.beforeVariants, na przykład:
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider oraz
testServer
Rejestracja niestandardowych środowisk testowych do przeprowadzania testów na urządzeniach i emulatorach z Androidem. Przełącz się na urządzenia zarządzane przez Gradle.
sdkDirectory,
ndkDirectory,
bootClasspath,
adbExecutable i
adbExe
Używanie różnych komponentów pakietu Android SDK do wykonywania niestandardowych zadań. Przełącz na androidComponents.sdkComponents.
registerArtifactType,
registerBuildTypeSourceProvider,
registerProductFlavorSourceProvider,
registerJavaArtifact,
registerMultiFlavorSourceProvider i
wrapJavaSourceSet
Przestarzałe funkcje związane głównie z obsługą wygenerowanych źródeł w Android Studio, które przestały działać w AGP 7.2.0. Nie ma bezpośredniego zamiennika tych interfejsów API.
dexOptions Przestarzałe ustawienia związane z narzędziem dx, które zostało zastąpione przez d8. Żadne z tych ustawień nie ma wpływu na działanie wtyczki Androida do obsługi Gradle w wersji 7.0. Nie ma bezpośredniego zamiennika.
generatePureSplits Generowanie podziałów konfiguracji dla aplikacji błyskawicznych. Możliwość dostarczania podziałów konfiguracji jest teraz wbudowana w pakiety aplikacji na Androida.
aidlPackagedList Pliki AIDL do spakowania w AAR, aby udostępnić je jako interfejs API bibliotekom i aplikacjom, które są od tej biblioteki zależne. Jest ona nadal widoczna w przypadku LibraryExtension, ale nie w przypadku innych typów rozszerzeń.

Jeśli po uaktualnieniu do AGP 9.0 zobaczysz ten komunikat o błędzie, oznacza to, że projekt nadal odwołuje się do niektórych starych typów:

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

Jeśli blokują Cię niekompatybilne wtyczki innych firm, możesz zrezygnować z nich i przywrócić stare implementacje DSL oraz stary interfejs API wariantów. W tym czasie nowe interfejsy są też dostępne i nadal możesz zaktualizować własną logikę kompilacji do nowego interfejsu API. Aby zrezygnować, umieść w pliku gradle.properties ten wiersz:

android.newDsl=false

Możesz też rozpocząć uaktualnianie do nowych interfejsów API przed uaktualnieniem do AGP 9.0. Nowe interfejsy są dostępne w wielu wersjach AGP, więc możesz mieć połączenie nowych i starych. W dokumentacji referencyjnej interfejsu AGP API znajdziesz informacje o interfejsie API dla każdej wersji AGP oraz daty dodania poszczególnych klas, metod i pól.

W fazie alfa wersji 9.0 kontaktujemy się z autorami wtyczek, aby pomóc im dostosować i opublikować wtyczki w pełni zgodne z nowymi trybami. Ulepszymy też Asystenta uaktualniania AGP w Androidzie Studio, aby przeprowadzić Cię przez proces migracji.

Jeśli zauważysz, że w nowym interfejsie DSL lub Variant API brakuje funkcji lub możliwości, jak najszybciej zgłoś problem.

Wbudowany język Kotlin

Wtyczka Androida do obsługi Gradle w wersji 9.0 wprowadza wbudowaną obsługę języka Kotlin i domyślnie ją włącza. Oznacza to, że nie musisz już stosować wtyczki org.jetbrains.kotlin.android (ani kotlin-android) w plikach kompilacji, aby kompilować pliki źródłowe Kotlin. Upraszcza to integrację Kotlina z AGP, pozwala uniknąć używania wycofanych interfejsów API i w niektórych przypadkach zwiększa wydajność.

Dlatego po uaktualnieniu projektu do AGP 9.0 musisz też przeprowadzić migrację na wbudowany język Kotlin lub zrezygnować.

Możesz też wybiórczo wyłączyć wbudowaną obsługę języka Kotlin w podprojektach Gradle, które nie zawierają źródeł w języku Kotlin.

Zależność w czasie działania od wtyczki Gradle do obsługi języka Kotlin

Aby zapewnić wbudowaną obsługę języka Kotlin, wtyczka Androida do obsługi Gradle w wersji 9.0 ma teraz zależność środowiska wykonawczego od wtyczki Gradle do obsługi języka Kotlin (KGP) w wersji 2.2.10. Oznacza to, że nie musisz już deklarować wersji KGP, a jeśli używasz wersji KGP starszej niż 2.2.10, Gradle automatycznie uaktualni ją do wersji 2.2.10. Podobnie, jeśli używasz wersji KSP starszej niż 2.2.10-2.0.2, AGP zaktualizuje ją do wersji 2.2.10-2.0.2, aby była zgodna z wersją KGP.

Uaktualnianie do wyższej wersji KGP

Aby użyć wyższej wersji KGP lub KSP, dodaj ten kod do pliku najwyższego poziomu:

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")
    }
}

Przechodzenie na niższą wersję KGP

Wersję KGP możesz obniżyć tylko wtedy, gdy zrezygnujesz z wbudowanego języka Kotlin. Dzieje się tak, ponieważ AGP 9.0 domyślnie włącza wbudowany język Kotlin, a wbudowany język Kotlin wymaga KGP w wersji 2.2.10 lub nowszej.

Aby użyć starszej wersji KGP lub KSP, zadeklaruj tę wersję w pliku kompilacji najwyższego poziomu za pomocą deklaracji ścisłej wersji:

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") }
        }
    }
}

Pamiętaj, że minimalna wersja KGP, do której możesz się cofnąć, to 2.0.0.

Obsługa środowiska IDE w przypadku plików testowych

AGP 9.0 zapewnia pełną obsługę środowiska IDE Android Studio w przypadku testów.

Wtyczka Fused Library

Wtyczka Fused Library Plugin (wersja przedpremierowa) umożliwia publikowanie wielu bibliotek jako jednego pliku AAR biblioteki Androida. Ułatwi to użytkownikom korzystanie z opublikowanych artefaktów.

Więcej informacji o tym, jak zacząć, znajdziesz w artykule Publikowanie wielu bibliotek Androida jako jednej za pomocą biblioteki Fused.

Zmiany w działaniu

Wtyczka Androida do obsługi Gradle w wersji 9.0 ma te nowe funkcje:

Działanie Rekomendacja
Wtyczka Androida do obsługi Gradle w wersji 9.0 domyślnie używa NDK w wersji r28c. Rozważ wyraźne określenie wersji NDK, której chcesz używać.
Wtyczka Androida do obsługi Gradle w wersji 9.0 domyślnie wymaga, aby użytkownicy biblioteki używali tej samej lub nowszej wersji pakietu SDK do kompilacji. Podczas korzystania z biblioteki używaj tego samego lub nowszego pakietu SDK do kompilacji. Jeśli nie jest to możliwe lub chcesz dać użytkownikom biblioteki, którą publikujesz, więcej czasu na przejście na nową wersję, ustaw wyraźnie AarMetadata.minCompileSdk.

Wtyczka AGP 9.0 zawiera aktualizacje domyślnych wartości tych właściwości Gradle. Dzięki temu podczas uaktualniania możesz zachować działanie wtyczki Androida do obsługi Gradle w wersji 8.13:

Właściwość Funkcja Zmiana z AGP 8.13 na AGP 9.0 Rekomendacja
android.newDsl Używaj nowych interfejsów DSL bez ujawniania starszych implementacji bloku android.
Oznacza to również, że starszy interfejs API wariantów, np. android.applicationVariants nie jest już dostępny.
falsetrue Możesz zrezygnować z tej opcji, ustawiając parametr android.newDsl=false.
Gdy wszystkie wtyczki i logika kompilacji używane w projekcie będą zgodne, usuń rezygnację.
android.builtInKotlin Włącza wbudowany język Kotlin. falsetrue Przejdź na wbudowany język Kotlin, jeśli możesz, lub zrezygnuj z tej funkcji.
android.uniquePackageNames Wymaga, aby każda biblioteka miała inną nazwę pakietu. falsetrue Podaj unikalne nazwy pakietów dla wszystkich bibliotek w projekcie. Jeśli to niemożliwe, możesz wyłączyć tę flagę na czas migracji.
android.useAndroidx Używaj domyślnie zależności androidx. falsetrue Przyjmij zależności androidx.
android.default.androidx.test.runner Domyślnie uruchamiaj testy na urządzeniu za pomocą klasy androidx.test.runner.AndroidJUnitRunner, zastępując domyślną klasę InstrumentationTestRunner, która jest już przestarzała.
android {
  defaultConfig {
    testInstrumentationRunner = "..."
  }
}
falsetrue Adopt AndroidJUnitRunner, lub wyraźnie określ własny parametr testInstrumentationRunner.
android.dependency.useConstraints Określa, czy między konfiguracjami mają być stosowane ograniczenia zależności.
Domyślne ustawienie w AGP 9.0 to false, które używa ograniczeń tylko w testach urządzeń aplikacji (AndroidTest). Ustawienie tej wartości na true przywróci działanie z wersji 8.13.
truefalse Nie używaj ograniczeń zależności wszędzie, chyba że jest to konieczne. Zaakceptowanie nowego domyślnego ustawienia tego flagi umożliwia też optymalizacje w procesie importowania projektu, co powinno skrócić czas importowania kompilacji z wieloma podprojektami biblioteki Androida.
android.enableAppCompileTimeRClass Kompiluj kod w aplikacjach z użyciem nieostatecznej klasy R, aby dostosować kompilację aplikacji do kompilacji biblioteki.
Zwiększa to przyrostowość i przygotowuje grunt pod przyszłe optymalizacje wydajności w przepływie przetwarzania zasobów.
falsetrue Wiele projektów może po prostu przyjąć nowe zachowanie bez wprowadzania zmian w kodzie źródłowym. Jeśli pola klasy R są używane w miejscach, w których wymagana jest stała, np. w przypadkach instrukcji switch, zmień kod, aby używać połączonych instrukcji if.
android.sdk.defaultTargetSdkToCompileSdkIfUnset Używa wersji pakietu SDK do kompilacji jako wartości domyślnej wersji pakietu SDK docelowego w aplikacjach i testach.
Przed tą zmianą docelowa wersja pakietu SDK była domyślnie ustawiana na minimalną wersję pakietu SDK.
falsetrue Określ bezpośrednio docelową wersję pakietu SDK w przypadku aplikacji i testów.
android.onlyEnableUnitTestForTheTestedBuildType Tworzy tylko komponenty testów jednostkowych dla testowanego typu kompilacji.
W projekcie domyślnym powoduje to utworzenie jednego testu jednostkowego do debugowania, podczas gdy wcześniej testy jednostkowe były uruchamiane do debugowania lub wydania.
falsetrue Jeśli Twój projekt nie wymaga uruchamiania testów zarówno w wersji debugowania, jak i w wersji produkcyjnej, nie musisz nic zmieniać.
android.proguard.failOnMissingFiles W przypadku braku na dysku któregokolwiek z plików do zachowania określonych w DSL AGP kompilacja zakończy się niepowodzeniem i wyświetli błąd. Przed tą zmianą literówki w nazwach plików powodowały, że pliki były cicho ignorowane. falsetrue Usuń nieprawidłowe deklaracje plików ProGuard
android.r8.optimizedResourceShrinking Umożliwia R8 zachowanie mniejszej liczby zasobów Androida, ponieważ uwzględnia klasy i zasoby Androida razem. falsetrue Jeśli reguły przechowywania w projekcie są już kompletne, nie musisz nic zmieniać.
android.r8.strictFullModeForKeepRules Umożliwia R8 zachowanie mniejszej liczby elementów, ponieważ nie zachowuje domyślnego konstruktora, gdy klasa jest zachowywana. Oznacza to, że -keep class A nie implikuje już -keep class A { <init>(); }
.
falsetrue Jeśli reguły przechowywania w projekcie są już kompletne, nie musisz nic zmieniać.

Zastąp -keep class A wartością -keep class A { <init>(); } w regułach przechowywania projektu we wszystkich przypadkach, w których chcesz zachować domyślny konstruktor.
android.defaults.buildfeatures.resvalues Włącza resValues we wszystkich podprojektach truefalse Włącz resValues tylko w podprojektach, które tego wymagają, ustawiając w plikach kompilacji Gradle tych projektów te wartości:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders Umożliwia kompilację shaderów we wszystkich podprojektach. truefalse Włącz kompilację shaderów tylko w podprojektach, które zawierają shadery do skompilowania, ustawiając w plikach kompilacji Gradle tych projektów te wartości:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed W AGP 9.0 getDefaultProguardFile() będzie obsługiwać tylko proguard-android-optimize.txt, a nie proguard-android.txt. Ma to zapobiegać przypadkowemu użyciu flagi ­dontoptimize, która jest częścią proguard-android.txt. falsetrue Jeśli chcesz uniknąć optymalizacji, możesz w pliku proguardFile wyraźnie określić ­dontoptimize, a także użyć proguard-android-optimize.txt. Jeśli to możliwe, usuń z tego pliku flagę ­dontoptimize, ponieważ zmniejsza ona korzyści z optymalizacji R8. Jeśli nie chcesz tego robić, zrezygnuj z tej opcji, ustawiając android.r8.globalOptionsInConsumerRules.disallowed=false.
android.r8.globalOptionsInConsumerRules.disallowed Od wtyczki AGP 9.0 publikowanie biblioteki Androida i modułu funkcji zakończy się niepowodzeniem, jeśli pliki keep konsumenta zawierają problematyczne konfiguracje Proguard. Pliki keep dla konsumentów, które zawierają opcje globalne, takie jak ­dontoptimize lub ­dontobfuscate, powinny być używane tylko w modułach aplikacji i mogą ograniczać korzyści z optymalizacji dla użytkowników biblioteki. Kompilacja modułu aplikacji na Androida będzie cicho ignorować takie opcje globalne, jeśli są one osadzone w wcześniej skompilowanej zależności (JAR lub AAR). Możesz sprawdzić, kiedy to nastąpi, przeglądając plik configuration.txt (zwykle w ścieżce takiej jak <app_module>/build/outputs/mapping/<build_variant>/configuration.txt) pod kątem komentarzy takich jak: # REMOVED CONSUMER RULE: ­dontoptimize falsetrue W opublikowanych bibliotekach należy usunąć wszystkie niezgodne reguły. Biblioteki wewnętrzne powinny przenosić wszelkie niezgodne, ale wymagane reguły do pliku proguardFile w module aplikacji. Zrezygnuj, ustawiając android.r8.globalOptionsInConsumerRules.disallowed=false. Gdy wszystkie pliki konsumenckie będą zgodne, wycofaj rezygnację.
android.sourceset.disallowProvider Zabroń przekazywania dostawców wygenerowanym źródłom za pomocą DSL AndroidSourceSet. falsetrue Użyj interfejsu API Sources na androidComponents, aby zarejestrować wygenerowane źródła.
android.custom.shader.path.required Wymaga jawnego ustawienia ścieżki kompilatora cieniowania w local.properties, jeśli kompilacja cieniowania jest włączona. falsetrue Dodaj glslc.dir=/path/to/shader-tools do local.properties projektu.

Usunięte funkcje

Wtyczka Androida do obsługi Gradle w wersji 9.0 usuwa te funkcje:

  • Obsługa umieszczonych aplikacji na Wear OS
    AGP 9.0 usuwa obsługę umieszczania aplikacji na Wear OS, która nie jest już obsługiwana w Google Play. Obejmuje to usunięcie konfiguracji wearAppAndroidSourceSet.wearAppConfigurationName DSL. Więcej informacji o publikowaniu aplikacji na Wear OS znajdziesz w artykule Dystrybucja na Wear OS.
  • androidDependenciessourceSets zgłaszanie zadania
  • Obsługa pakietów APK podzielonych według gęstości ekranu
    AGP 9.0 usuwa obsługę tworzenia pakietów APK podzielonych według gęstości ekranu. Funkcja i powiązane z nią interfejsy API zostały usunięte. Aby podzielić pliki APK na podstawie gęstości ekranu za pomocą AGP 9.0 lub nowszego, użyj pakietów aplikacji.

Zmieniony DSL

Wtyczka Androida do obsługi Gradle w wersji 9.0 wprowadza te zmiany powodujące niezgodność w języku DSL:

  • Parametryzacja funkcji CommonExtension została usunięta.

    Sama w sobie jest to tylko zmiana powodująca niezgodność na poziomie źródła, która ma pomóc w unikaniu takich zmian w przyszłości. Oznacza to jednak również, że metody blokowania muszą zostać przeniesione z CommonExtension do ApplicationExtension, LibraryExtension, DynamicFeatureExtensionTestExtension.

    Podczas uaktualniania projektu do AGP 9.0 zmień kod wtyczki Gradle, który korzysta z tych parametrów lub metod blokowych. Na przykład ten wtyczka została zaktualizowana, aby usunąć parametr typu i nie korzystać z usuniętych metod blokowania:

    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)
            }
        }
    }
    

    W przypadku wtyczek, które są przeznaczone dla zakresu wersji AGP, bezpośrednie użycie metody pobierającej jest binarne zgodne z wersjami AGP starszymi niż 9.0.

Usunięto DSL

Wtyczka Androida do obsługi Gradle w wersji 9.0 usuwa:

Usunięte interfejsy API

Wtyczka Androida do obsługi Gradle w wersji 9.0 usuwa:

Usunięte właściwości Gradle

Poniższe właściwości Gradle zostały początkowo dodane jako sposoby globalnego wyłączania funkcji, które były domyślnie włączone.

Te funkcje są domyślnie wyłączone od wersji AGP 8.0 lub starszej. Włącz te funkcje tylko w podprojektach, które z nich korzystają, aby zwiększyć wydajność kompilacji.

Właściwość Funkcja Wymiana
android.defaults.buildfeatures.aidl Umożliwia kompilację AIDL we wszystkich podprojektach. Włącz kompilację AIDL tylko w podprojektach, w których znajdują się źródła AIDL, ustawiając w plikach kompilacji Gradle tych projektów tę właściwość:
android {
  buildFeatures {
    aidl = true
  }
}
w pliku kompilacji Gradle każdego podprojektu zawierającego źródła AIDL.
android.defaults.buildfeatures.renderscript Włącza kompilację RenderScript we wszystkich podprojektach. Włącz kompilację RenderScriptu tylko w podprojektach, w których znajdują się źródła RenderScriptu, ustawiając w plikach kompilacji Gradle tych projektów tę właściwość:
android {
  buildFeatures {
    renderScript = true
  }
}

Wymuszane właściwości Gradle

AGP 9.0 zgłasza błąd, jeśli ustawisz te właściwości Gradle.

Asystent uaktualniania wtyczki Androida do obsługi Gradle nie uaktualni projektów do wtyczki AGP 9.0, które korzystają z tych właściwości.

Właściwość Funkcja
android.r8.integratedResourceShrinking Zmniejszanie rozmiaru zasobów jest teraz zawsze przeprowadzane w ramach R8, a poprzednia implementacja została usunięta.
android.enableNewResourceShrinker.preciseShrinking Zmniejszanie zasobów zawsze korzysta teraz z precyzyjnego zmniejszania zasobów, co umożliwia usunięcie większej liczby zasobów.

Zmiany w R8

W AGP 9.0.0 uwzględniono te zmiany w R8:

Nowa opcja konfiguracji -processkotlinnullchecks

Dodaliśmy nową opcję R8 -processkotlinnullchecks, która umożliwia skonfigurowanie R8 do przetwarzania sprawdzania wartości null w języku Kotlin. Opcja przyjmuje argument obowiązkowy, który musi mieć jedną z tych 3 wartości: keep, remove_message lub remove. Ta opcja przetwarza te sprawdzenia wartości null dodane przez kompilator Kotlin:

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);
}

Wartości opcji, uporządkowane od najsłabszej do najsilniejszej, mają następujący wpływ:

  • keep nie zmienia kontroli.
  • remove_message zmienia każde wywołanie metody sprawdzania na wywołanie getClass() na pierwszym argumencie wywołania (skutecznie zachowując sprawdzanie wartości null, ale bez żadnej wiadomości).
  • remove całkowicie usuwa weryfikacje.

Domyślnie R8 używa remove_message. Wszelkie specyfikacje -processkotlinnullchecks zastąpią to ustawienie. Jeśli zostanie podana kilka razy, użyta zostanie najsilniejsza wartość.

Przestań przekazywać informacje o zachowaniu do metod towarzyszących

Gdy reguły zachowywania pasują do metod interfejsu podlegających desugaryzacji, R8 wcześniej wewnętrznie przenosił bity disallow optimizationdisallow shrinking do syntetyzowanych metod towarzyszących.

Od wtyczki AGP 9.0 reguły zachowywania nie mają już zastosowania do metod towarzyszących. Jest to zgodne z faktem, że reguły zachowywania nie mają zastosowania do innych pól, metod ani klas syntetyzowanych przez kompilator.

Przenosząc bity disallow optimizationdisallow shrinking do metod towarzyszących, wcześniej obsługiwaliśmy ten przypadek użycia:

  1. Skompiluj bibliotekę z metodami interfejsu default/static/private do DEX z wartością minSdk < 24 i regułami, które zachowują metody interfejsu.
  2. Skompiluj aplikację z biblioteką w ścieżce klasy i -applymapping.
  3. Połącz aplikację z biblioteką.

Pamiętaj, że działa to tylko w przypadku -applymapping, ponieważ bit disallow obfuscation nie jest przenoszony do metod towarzyszących, czyli klasy towarzyszące wygenerowane w kroku 1 będą miały zaciemnione nazwy metod.

Od tej pory ten przypadek użycia nie jest już obsługiwany w przypadku minSdk < 24. Aby obejść ten problem, wykonaj te czynności:

  1. Odśladzanie biblioteki za pomocą metod interfejsu default/static/private do plików klas z minSdk < 24.
  2. Skompiluj odcukrzony artefakt za pomocą R8 i reguł, które zachowują metody interfejsu w klasach towarzyszących.
  3. Skompiluj aplikację z biblioteką w ścieżce klasy.
  4. Połącz aplikację i odcukrzony artefakt.

Innym efektem ubocznym jest to, że nie można już zachować atrybutów klasy wewnętrznej i metody otaczającej dla klas anonimowych i lokalnych w metodach towarzyszących interfejsu.

Zmień domyślny emitowany plik źródłowy na r8-map-id-<MAP_ID>

Ta zmiana jest dostępna w AGP od wersji 8.12.0.

Domyślny atrybut emitowanego pliku źródłowego dla klasy zmienia się z SourceFile na r8-map-id-<MAP_ID>, gdy wymagane jest ponowne śledzenie (czyli gdy włączone jest zaciemnianie lub optymalizacja).

Nowy atrybut pliku źródłowego umożliwia wyodrębnianie identyfikatora pliku mapowania wymaganego do śledzenia wstecznego na podstawie zaciemnionego śladu stosu. Można go używać do obsługi automatycznego śledzenia wstecznego śladów stosu w Logcat.

Jeśli używany jest atrybut niestandardowego pliku źródłowego (-renamesourcefileattribute), ten atrybut niestandardowego pliku źródłowego nadal ma pierwszeństwo.

W trybie zgodności z ProGuardem (gdy gradle.properties zawiera android.enableR8.fullMode=false) emitowanie atrybutu pliku źródłowego r8-map-id-<MAP_ID> ma zastosowanie tylko wtedy, gdy atrybut SourceFile nie jest zachowywany. Aplikacje, które używają trybu zgodności ProGuard i chcą uwzględniać identyfikator pliku mapowania w śladach stosu, powinny usunąć -keepattributes SourceFile (lub przejść na tryb pełny R8).

Identyfikator mapy używany w r8-map-id-<MAP_ID> to pełny hash mapy, a nie 7-znakowy prefiks tego hasha, który był używany wcześniej.

Włącz używanie zminimalizowanych nazw syntetycznych w procesie desugaringu L8

Nazwa klas syntetycznych generowanych przez D8 zwykle zawiera podciąg $$ExternalSynthetic, który informuje, że jest to klasa syntetyczna wygenerowana przez D8. Ponadto nazwa elementu syntetycznego zawiera też jego rodzaj (np. Backport, Lambda). Ma to negatywny wpływ na rozmiar wynikowego pliku DEX, ponieważ nazwy klas zajmują więcej miejsca w puli ciągów.

AGP 9.0 konfiguruje L8 (odcukrzanie biblioteki podstawowej) w taki sposób, aby plik DEX zawierający wszystkie klasy j$ używał nowego, skróconego formatu nazw klas syntetycznych. Nowa nazwa zajęć używa identyfikatora numerycznego (np. $1).

Usunięcie obsługi -addconfigurationdebugging

Wtyczka Androida do obsługi Gradle 9.0 nie obsługuje już -addconfigurationdebugging. Kompilator zgłasza teraz ostrzeżenie, jeśli używana jest ta flaga.

Wycofanie obsługi generowania reguł L8 z D8/R8

Ta zmiana dotyczy tylko deweloperów, którzy bezpośrednio korzystają z wiersza poleceń D8/R8 lub interfejsów API.

W R8 9.0 usunięto obsługę generowania reguł keep dla L8 z D8 i R8. Zamiast tego użyj w tym celu funkcji TraceReferences.

W szczególności usuwamy metody D8Command.builder.setDesugaredLibraryKeepRuleConsumerR8Command.Builder.setDesugaredLibraryKeepRuleConsumer, a także obsługę --desugared-lib-pg-conf-output z opcji wiersza poleceń D8 i R8.

Rozwiązane problemy

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-rc03

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
AGP 9.0.0-rc01 nie rozwiązuje bibliotek Kotlin za pomocą funkcji kotlin()

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-rc02

Rozwiązane problemy
W AGP 9.0.0-rc02 nie oznaczono żadnych publicznych problemów jako naprawionych

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-rc01

Rozwiązane problemy
W AGP 9.0.0-rc01 nie oznaczono żadnych publicznych problemów jako naprawionych

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-beta05

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Wbudowana obsługa języka Kotlin w AGP nie powinna synchronizować się z zestawami źródeł Kotlin.

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-beta04

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Wbudowana obsługa języka Kotlin w AGP nie powinna synchronizować się z zestawami źródeł Kotlin.
missingDimensionStrategy preferuje wersję pasującą do jego własnej nazwy, nawet jeśli pochodzi ona z niepowiązanego wymiaru.

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-beta03

Rozwiązane problemy
W AGP 9.0.0-beta03 nie oznaczono żadnych publicznych problemów jako naprawionych

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-beta02

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Prośba o dodanie funkcji: wstrzykiwanie idealnej wersji AGP jako właściwości
Stabilizacja SingleArtifact.VERSION_CONTROL_INFO_FILE
Błędne wyświetlanie danych wyjściowych logcat podczas androidTest connectedCheck
Linter
AGP 8.11.0: zadanie lintAnalyzeRelease ulega awarii podczas stosowania plików .gradle.kts z funkcją apply(from = "...")
Integracja z linterem
Brakujące wpisy w pamięci podręcznej AndroidLintAnalysisTask w przypadku różnych dostawców JDK lub wersji podrzędnych z powodu różnic w systemPropertyInputs.javaVersion

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-beta01

Rozwiązane problemy
W AGP 9.0.0-beta01 nie oznaczono żadnych publicznych problemów jako rozwiązanych

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha14

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Wbudowana obsługa języka Kotlin w AGP nie powinna synchronizować się z zestawami źródeł Kotlin.
Nie udało się opublikować biblioteki Androida, ponieważ plik zachowywania konsumenta zawiera -dontobfuscate
Brak opcji drukowania mapowania zoptymalizowanych zasobów
Wywoływanie funkcji finalizeDsl po zakończeniu tej fazy powinno powodować błąd.
AGP inicjuje konfigurację Jetifiera nawet wtedy, gdy jest on wyłączony
Wbudowany język Kotlin nie dodaje biblioteki kotlinStdlib jako zależności w czasie kompilacji, gdy w plikach modułu i pom.xml wartość parametru `kotlin.stdlib.default.dependency` to „true”.
Integracja z linterem
Lint automatycznie używa najnowszego zainstalowanego pakietu SDK pomimo compileSdk, nie rejestruje się jako dane wejściowe zadania i przerywa buforowanie
Shrinker (R8)
Optymalizacja zasobów R8 kończy się niepowodzeniem, jeśli używane są końcowe identyfikatory zasobów

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha13

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
AGP 9: `variant.sources.kotlin!!.addGeneratedSourceDirectory()` nie działa
Sprawdzanie metadanych pliku AAR w przypadku kompilowania pakietu SDK korzysta ze starego języka DSL
Usunięcie wycofanej właściwości „com.android.build.api.dsl.ManagedDevices.devices”

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha12

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Czysty projekt Java ma zależność od biblioteki standardowej Kotlin.
Usuwanie wycofanych właściwości KotlinMultiplatformAndroidCompilationBuilder we wtyczce Androida do obsługi Gradle 9.0
`com.android.tools.build:gradle:9.0.0-alpha05` powinna mieć zależność interfejsu API od KGP i gradle-api
Zmiana nazwy wtyczki Gradle com.android.experimental.built-in-kotlin

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha11

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Built-in-kotlin nie publikuje ograniczenia zależności kotlin-stdlib w pliku pom Maven
Dodawanie elementu testowania rozbieżności między compileSdk i targetSdk
pusta wartość resConfigs powoduje niejasny błąd aapt

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha10

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Wartości extractNativeLibs i useEmbeddedDex nie powinny pochodzić z pliku manifestu
Ostrzeżenia z R8 w AGP 9.0.0-alpha09
Linter
Wbudowany Kotlin nie dodaje pliku .kotlin_module do folderu META-INF
Lint classpath zawiera zduplikowane klasy w różnych wersjach
Obejście problemu z zastępowaniem zasobów prywatnych nie działa (tools:override = "true")

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha09

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Wtyczka `legacy-kapt` pomija przetwarzanie adnotacji w przeciwieństwie do wtyczki `kotlin-kapt`.
compileSdkSpec.minorApiLevel nie działa z SettingsExtension
[fused lib - public] Wygenerowana biblioteka połączona nie zawiera źródeł

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha08

Rozwiązane problemy
W AGP 9.0.0-alpha08 nie oznaczono żadnych publicznych problemów jako naprawionych

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha07

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Kompilacja nie powiedzie się, jeśli istnieją zadania generowania kodu
Jeśli ustawisz `android.builtInKotlin=false`, `android.newDsl=false` i `android.enableLegacyVariantApi=false`, użycie wtyczki `kotlin-android` spowoduje błąd „API 'applicationVariants' is obsolete” (API „applicationVariants” jest przestarzałe).
Wbudowany Kotlin nie może rozpoznać biblioteki kotlin-stdlib bez wersji, gdy kotlin.stdlib.default.dependency=false
DexData otwiera plik bez zamykania, co uniemożliwia czyszczenie
W AGP 9.0 klasa AndroidSourceDirectorySet nie powinna już rozszerzać klasy PatternFilterable
Błąd testu w modułach tylko do testowania
Nieprawidłowy błąd podczas używania odbiorników kontekstu w elementach testowania
Nieprawidłowe błędy IDE w przypadku kodu Kotlin w testFixtures

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha06

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Nowy język DSL optymalizacji domyślnie nie tworzy pliku configuration.txt
AGP 8.13.0 nie weryfikuje wykresu nawigacji w module
AGP używa wycofanego interfejsu Gradle API: notacja wielociągowa
Ostrzeganie użytkowników, którzy próbują używać starszej biblioteki multidex z parametrem minSdkVersion >=21
Linter
Sprawdzanie Lint ChecksSdkIntAtLeast nie sprawdza, czy adnotowana wartość jest prawidłowa

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha05

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
android.proguard.failOnMissingFiles nie działa w przypadku consumerProguardFiles
Aktualizacja zależności wtyczki Gradle do obsługi języka Kotlin do wersji 2.2.10
Tworzenie obiektu KotlinJvmAndroidCompilation za pomocą interfejsu KGP API
Tryb jawnego interfejsu API Kotlin zastosowany do źródeł testowych
Linter
Lintowanie zwraca ostrzeżenie „Nie udało się wyczyścić pamięci podręcznej K2”

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha04

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Przełącz domyślną wersję źródłową/docelową Javy z Javy 8 na Javę 11 w AGP 9.0
Zmiana domyślnej wartości android.useAndroidX na true
Lepszy wyjątek podczas stosowania wtyczki kapt z wbudowanym językiem Kotlin.
Linter
Lintowanie zwraca ostrzeżenie „Nie udało się wyczyścić pamięci podręcznej K2”

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha03

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Gdy parametr „isIncludeAndroidResources” jest włączony, zadanie „process{Variant}UnitTestManifest” nie scala użycia narzędzia tools:overrideLibrary w AGP 8.12.0
Wtyczka Androida do obsługi Gradle powoduje ostrzeżenia o wycofaniu w Gradle w przypadku zadań testowych JVM
Zadanie DependencyReportTask jest niezgodne z pamięcią podręczną konfiguracji
Linter
Błąd: usunięcie nieużywanych zasobów nie powoduje usunięcia ich tłumaczeń ani nie wyświetla pytania o to, czy je usunąć.

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha02

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Niepowodzenie kompilacji, gdy plik ProGuard nie istnieje
remove buildconfig defaults gradle.properties flags
Zmiana domyślnej wartości targetSdk aplikacji na podstawie compileSdk zamiast minSdk

Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha01

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Usunięcie wycofanego elementu AndroidSourceSet.jni w AGP 9.0
Usunięcie funkcji Installation.installOptions() we wtyczce AGP 9.0
Usunięcie BuildType.isRenderscriptDebuggable w AGP 9.0.
Usuwanie android.defaults.buildfeatures.renderscript
`com.android.kotlin.multiplatform.library` ulega awarii na urządzeniach zarządzanych przez Gradle
Usuwanie domyślnych flag `android.defaults.buildfeatures.aidl` w pliku gradle.properties

Wtyczka Androida do obsługi Gradle w wersji 9.0.0

Rozwiązane problemy
W AGP 9.0.0 nie oznaczono żadnych publicznych problemów jako naprawionych