Ta strona zawiera informacje o wersjach próbnych wtyczki Androida do Gradle (AGP).
Wtyczka Androida do obsługi Gradle w wersji 9.0
Wtyczka Androida do obsługi Gradle w wersji 9.0 to nowa wersja główna AGP, która wprowadza zmiany w interfejsie API i zachowaniu.
Aby zaktualizować wtyczkę Androida do obsługi Gradle do wersji 9.0.0-alpha05, użyj Asystenta uaktualniania wtyczki Androida do obsługi Gradle w Android Studio Narwhal 4 Feature Drop | 2025.1.4.
Asystent uaktualniania AGP pomaga zachować dotychczasowe zachowania podczas uaktualniania projektu, gdy jest to odpowiednie. Umożliwia to uaktualnienie projektu do AGP 9.0, nawet jeśli nie chcesz jeszcze stosować wszystkich nowych ustawień domyślnych w AGP 9.0.
Zgodność
Maksymalny poziom interfejsu Android API obsługiwany przez wtyczkę Androida do obsługi Gradle w wersji 9.0.0-alpha05 to poziom 36.
Wtyczka Androida do obsługi Gradle w wersji 9.0.0-alpha05 wymaga Gradle w wersji 9.0.0.
Wersja minimalna | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | Więcej informacji znajdziesz w sekcji Aktualizowanie Gradle. |
SDK Build Tools | 36.0.0 | 36.0.0 | Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK. |
NDK | Nie dotyczy | 28.2.13676358 | Zainstaluj lub skonfiguruj inną wersję NDK. |
JDK | 17 | 17 | Więcej informacji znajdziesz w artykule o ustawianiu 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. Wersje AGP 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. Ta zmiana usuwa też dostęp do starego, wycofanego interfejsu API wariantów.
Aby zaktualizować AGP do wersji 9.0, może być konieczne wykonanie tych czynności:
- Przełącz na wbudowany język Kotlin: 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 wtyczkicom.android.library
icom.android.application
jest niezgodne z nowym DSL.Zaktualizuj pliki kompilacji: zmiana interfejsów ma na celu zachowanie jak największego podobieństwa do 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 zamiana 1:1. Zastąp wszystkie użycia interfejsu
applicationVariants
i podobnych interfejsów API nowymandroidComponents
. Może to być bardziej skomplikowane, ponieważ interfejsandroidComponents
API został 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.
Jeśli po zaktualizowaniu do AGP 9.0 zobaczysz ten komunikat o błędzie, oznacza to, że Twój 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 dostępne są też nowe interfejsy, a Ty nadal możesz zaktualizować własną logikę kompilacji do nowego interfejsu API. Aby zrezygnować, umieść ten wiersz w pliku gradle.properties
:
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 będziemy kontaktować 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 Android Studio, aby przeprowadzić Cię przez proces migracji.
Jeśli zauważysz, że w nowym interfejsie DSL lub Variant API brakuje funkcji, jak najszybciej zgłoś problem.
Wbudowany Kotlin
Wtyczka Androida do obsługi Gradle w wersji 9.0 ma wbudowaną obsługę kompilacji w języku Kotlin, która zastępuje oddzielnie stosowaną wtyczkę Kotlin. Upraszcza to integrację z AGP, pozwala uniknąć korzystania z wycofanych interfejsów API i w niektórych przypadkach zwiększa wydajność.
Wtyczka Androida do obsługi Gradle w wersji 9.0 ma zależność środowiska wykonawczego od wtyczki Kotlin Gradle w wersji 2.2.10, która jest minimalną wersją wymaganą do obsługi wbudowanego języka Kotlin.
Możesz zrezygnować z wbudowanego języka Kotlin, ustawiając
android.builtInKotlin=false
.
Jeśli zrezygnowano z wbudowanego języka Kotlin i trzeba używać starszej wersji wtyczki Kotlin Gradle, można wymusić przejście na starszą wersję:
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
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 wyższego 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 wartość AarMetadata.minCompileSdk .
|
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 AGP 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 udostępniania starszych implementacji bloku android .Oznacza to również, że starsza wersja interfejsu API wariantów, np. android.applicationVariants
nie jest już dostępna.
|
false → true |
Możesz z niej zrezygnować, ustawiając parametr
android.newDsl=false .Gdy wszystkie wtyczki i logika kompilacji używane w projekcie będą zgodne, usuń rezygnację. |
android.builtInKotlin |
Włączono obsługę kompilowania kodu Kotlin bezpośrednio we wtyczce Androida do obsługi Gradle bez wtyczki org.jetbrains.kotlin.android .
|
false → true |
Zastosuj wbudowany język Kotlin, usuwając w miarę możliwości wtyczkę org.jetbrains.kotlin.android .
Jeśli nie chcesz tego robić, zrezygnuj z tej funkcji, ustawiając android.builtInKotlin=false .
|
android.uniquePackageNames |
Wymaga, aby każda biblioteka miała inną nazwę pakietu. | false → true |
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.dependency.useConstraints |
Określa, czy między konfiguracjami mają być używane ograniczenia zależności. W AGP 9.0 domyślnym ustawieniem jest 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.
|
true → false |
Nie używaj ograniczeń zależności wszędzie, chyba że jest to konieczne. Zaakceptowanie nowego domyślnego ustawienia tej flagi umożliwia też optymalizacje w procesie importowania projektu, co powinno skrócić czas importowania kompilacji z wieloma podprojektami biblioteki Androida. |
aandroid.enableAppCompileTimeRClass |
Kompiluj kod w aplikacjach z użyciem nieostatecznej klasy R, aby kompilacja aplikacji była zgodna z kompilacją biblioteki. Zwiększa to przyrostowość i przygotowuje grunt pod przyszłe optymalizacje wydajności w przepływie przetwarzania zasobów. |
false → true |
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, które wymagają stałej, 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. |
false → true |
Określ bezpośrednio docelową wersję pakietu SDK dla 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. |
false → true |
Jeśli Twój projekt nie wymaga uruchamiania testów w przypadku wersji debugowania i wersji do opublikowania, nie musisz wprowadzać żadnych zmian. |
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. | false → true |
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. | false → true |
Jeśli reguły przechowywania w projekcie są już kompletne, nie musisz wprowadzać żadnych zmian. |
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>(); } |
false → true |
Jeśli reguły przechowywania w projekcie są już kompletne, nie musisz wprowadzać żadnych zmian.
Zastąp -keep class A
w regułach przechowywania projektu
-keep class A { <init>(); }
we wszystkich przypadkach, w których chcesz zachować domyślny konstruktor.
|
android.defaults.buildfeatures.resvalues |
Włącza
resValues
we wszystkich podprojektach
|
true → false |
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. | true → false |
Włącz kompilację shaderów tylko w podprojektach, które zawierają shadery do skompilowania. W tym celu ustaw w plikach kompilacji Gradle tych projektów te wartości:
android { buildFeatures { shaders = true } } |
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 konfiguracjiwearApp
iAndroidSourceSet.wearAppConfigurationName
DSL. Więcej informacji o publikowaniu aplikacji na Wear OS znajdziesz w artykule Dystrybucja aplikacji na Wear OS. androidDependencies
isourceSets
zgłosić zadanie
Zmieniony DSL
Wtyczka Androida do obsługi Gradle w wersji 9.0 zawiera 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 uniknąć takich zmian w przyszłości. Oznacza to jednak również, że metody blokowania muszą zostać przeniesione z
CommonExtension
doApplicationExtension
,LibraryExension
,DynamicFeatureExtension
iTestExtension
.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 funkcji 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:
AndroidComponentsExtension.finalizeDSl
. Zastępuje jąfinalizeDsl
AndroidSourceSet.jni
, ponieważ nie działał.AndroidSourceSet.wearAppConfigurationName
, ponieważ dotyczy to usuniętej obsługi wbudowanej aplikacji na Wear OS.BuildType.isRenderscriptDebuggable
, ponieważ nie działał.Component.transformClassesWith
. Zastępuje jąInstrumentation.transformClassesWith
Component.setAsmFramesComputationMode
. Zastępuje jąInstrumentation.setAsmFramesComputationMode
DependenciesInfoBuilder.includedInApk
. Zastąpienie:includeInApk
DependenciesInfoBuilder.includedInBundle
. Zastąpienie:includeInBundle
ComponentBuilder.enabled
. Zastępuje jąComponentBuilder.enable
.DependencyVariantSelection
. Zastępuje jąDependencySelection
, która jest udostępniana jakokotlin.android
.GeneratesApk.targetSdkVersion
. Zastąpiono ją wartościątargetSdk
Installation.installOptions(String)
. Zastępuje ją modyfikowalna właściwośćInstallation.installOptions
.Variant.minSdkVersion
. Zastąpiono ją wartościąminSdk
Variant.maxSdkVersion
. Zastąpiono ją wartościąmaxSdk
Variant.targetSdkVersion
. Zastąpiono ją wartościątargetSdk
VariantBuilder.targetSdk
itargetSdkPreview
, ponieważ nie miały one znaczenia w bibliotekach. Zamiast tego użyjGeneratesApkBuilder.targetSdk
lubGeneratesApkBuilder.targetSdkPreview
.VariantOutput.enable
. Zastąpiono ją wartościąenabled
Blok
PostProcessing
, który jest eksperymentalny i nigdy nie został ustabilizowany.ProductFlavor.setDimension
, która jest zastępowana przez właściwośćdimension
LanguageSplitOptions
, która była przydatna tylko w przypadku aplikacji błyskawicznych w Google Play, które zostały wycofane.Variant.unitTest
, ponieważ nie dotyczyło to wtyczkicom.android.test
.unitTest
jest dostępna w przypadku podtypówVariantBuilder
rozszerzającychHasUnitTest
.VariantBuilder.enableUnitTest
, ponieważ nie dotyczyło to wtyczkicom.android.test
.enableUnitTest
jest dostępna w przypadku podtypówVariantBuilder
rozszerzającychHasUnitTestBuilder
.Typ
VariantBuilder.unitTestEnabled
został usunięty na rzecz bardziej spójnie nazwanego typuenableUnitTest
w przypadku podtypówVariantBuilder
rozszerzających typHasUnitTestBuilder
.
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 usprawnić kompilację.
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 } } |
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 } } |
Usunięte interfejsy API
Wtyczka Androida do obsługi Gradle w wersji 9.0 usuwa:
Wycofane i wyłączone interfejsy API
BaseExtension.registerTransform
, które były dostępne tylko po to, aby umożliwić kompilowanie pod kątem najnowszej wersji AGP przy jednoczesnym kierowaniu na AGP 4.2 lub starszą.Wycofane i wyłączone funkcje
FeaturePlugin
iFeatureExtension
.
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 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. |