Wtyczka Androida do obsługi Gradle 8.0.0 (kwiecień 2023 r.)

Wtyczka Androida do obsługi Gradle w wersji 8.0.0 to wersja główna, która zawiera wiele nowych funkcji i ulepszeń.

Zgodność

Wersja minimalna Wersja domyślna Uwagi
Gradle z Androidem 8.0 z Androidem 8.0 Więcej informacji znajdziesz w artykule o aktualizowaniu Gradle.
Narzędzia do kompilacji pakietu SDK 30.0.3 30.0.3 Zainstaluj lub skonfiguruj narzędzia SDK do kompilacji.
NDK Nie dotyczy 25.1.8937393 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 17 17 Więcej informacji znajdziesz w artykule o ustawianiu wersji JDK.

Wersje poprawek

Poniżej znajdziesz listę wersji poprawek wtyczki Androida do obsługi Gradle w wersji 8.0.

Wtyczka Androida do obsługi Gradle w wersji 8.0.2 (maj 2023 r.)

Listę błędów naprawionych w AGP 8.0.2 znajdziesz w artykule Zamknięte problemy w Androidzie Studio 2022.2.1.

Wtyczka Androida do obsługi Gradle w wersji 8.0.1 (maj 2023 r.)

Ta niewielka aktualizacja zawiera następujące poprawki błędów:

Rozwiązane problemy
Błąd: „No VersionRequirement with the given id in the table” (W tabeli nie ma elementu VersionRequirement o podanym identyfikatorze) po uaktualnieniu wtyczki AGP z wersji 7.2.2 do 7.4.0
R8 NullPointerException at markTypeAsLive AGP 7.4.1
[R8 4.0.53] Nie udało się zweryfikować klasy na Androidzie 11

Zmiana powodująca niezgodność: w skrypcie kompilacji na poziomie modułu wymagana jest przestrzeń nazw

Przestrzeń nazw musisz ustawić w pliku build.gradle.kts na poziomie modułu, a nie w pliku manifestu. Możesz zacząć używać namespace właściwości DSL od AGP 7.3. Więcej informacji znajdziesz w artykule Ustawianie przestrzeni nazw.

Podczas migracji do DSL przestrzeni nazw pamiętaj o tych kwestiach:

  • W niektórych przypadkach poprzednie wersje AGP nieprawidłowo wywnioskują przestrzeń nazw testu z głównej przestrzeni nazw lub identyfikatora aplikacji. Asystent uaktualniania AGP blokuje uaktualnienie, jeśli stwierdzi, że główna przestrzeń nazw projektu i przestrzeń nazw testu są takie same. Jeśli uaktualnienie jest zablokowane, musisz ręcznie zmienić testNamespace i odpowiednio zmodyfikować kod źródłowy.
  • Po zmianie przestrzeni nazw testu może się zdarzyć, że kod zostanie skompilowany, ale testy instrumentowane nie powiodą się w czasie działania. Może się to zdarzyć, jeśli kod źródłowy testu z instrumentacją odwołuje się do zasobu zdefiniowanego zarówno w androidTest, jak i w źródłach aplikacji.

Więcej informacji znajdziesz w komentarzu 19 do zgłoszenia 191813691.

Zmiany powodujące niezgodność: domyślne wartości opcji kompilacji

Od AGP 8.0 domyślne wartości tych flag zostały zmienione, aby poprawić wydajność kompilacji. Aby uzyskać pomoc w dostosowaniu kodu do tych zmian, użyj Asystenta uaktualniania AGP (Narzędzia > Asystent uaktualniania AGP). Asystent uaktualniania przeprowadzi Cię przez proces aktualizacji kodu, aby dostosować go do nowego działania, lub ustawienia flag, aby zachować poprzednie działanie.

Zgłoś Nowa wartość domyślna Poprzednia wartość domyślna Uwagi
android.defaults.buildfeatures.buildconfig false true Wtyczka AGP 8.0 domyślnie nie generuje pliku BuildConfig. Musisz określić tę opcję za pomocą DSL w projektach, w których jest ona potrzebna.
android.defaults.buildfeatures.aidl false true Wtyczka AGP 8.0 nie włącza domyślnie obsługi AIDL. Musisz określić tę opcję za pomocą DSL w projektach, w których jest ona potrzebna. Planujemy usunąć ten flagę we wtyczce Androida do obsługi Gradle 9.0.
android.defaults.buildfeatures.renderscript false true Wtyczka AGP 8.0 domyślnie nie włącza obsługi RenderScript. Musisz określić tę opcję za pomocą DSL w projektach, w których jest ona potrzebna. Ten flag zostanie usunięty we wtyczce Androida do obsługi Gradle 9.0.
android.nonFinalResIds true false AGP 8.0 domyślnie generuje klasy R z polami niebędącymi polami ostatecznymi.
android.nonTransitiveRClass true false Wtyczka AGP 8.0 generuje klasy R tylko dla zasobów zdefiniowanych w bieżącym module.
android.enableR8.fullMode true false Wtyczka AGP 8.0 domyślnie włącza pełny tryb R8. Więcej informacji znajdziesz w sekcji Pełny tryb R8.

Zmiany powodujące niezgodność: wymuszanie wartości opcji kompilacji

Od AGP 8.0 nie możesz już zmieniać wartości tych flag. Jeśli określisz je w pliku gradle.properties, wartość zostanie zignorowana, a AGP wyświetli ostrzeżenia.

Zgłoś Wymuszona wartość Uwagi
android.dependencyResolutionAtConfigurationTime.warn true Wtyczka Androida do obsługi Gradle 8.0 wyświetla ostrzeżenie, jeśli wykryje rozwiązywanie konfiguracji w fazie konfiguracji, ponieważ ma to negatywny wpływ na czas konfiguracji Gradle.
android.r8.failOnMissingClasses true Wtyczka Androida do obsługi Gradle 8.0 przerywa kompilacje, które korzystają z R8, jeśli brakuje klas, aby zapewnić lepszą optymalizację DEX. Aby rozwiązać ten problem, musisz dodać brakujące biblioteki lub -dontwarnzachować reguły-dontwarn. Więcej informacji znajdziesz w artykule Missing class warnings in R8 shrinker (Ostrzeżenia o brakujących klasach w kompresorze R8).
android.testConfig.useRelativePath true Gdy włączona jest obsługa używania zasobów, komponentów i plików manifestu Androida w testach jednostkowych, AGP 8.0 generuje plik test_config.properties, który zawiera tylko ścieżki względne. Dzięki temu testy jednostkowe Androida mogą zawsze korzystać z pamięci podręcznej kompilacji Gradle.
android.useNewJarCreator true AGP używa biblioteki Zipflinger podczas tworzenia plików JAR, aby zwiększyć wydajność kompilacji.
android.bundletool.includeRepositoriesInDependencyReport true Gdy dodawanie informacji o zależnościach pakietu SDK w plikach AAB i APK jest włączone, AGP 8.0 dodaje do tych informacji również listę repozytoriów projektu. Więcej informacji znajdziesz w artykule Informacje o zależnościach w Konsoli Play.
android.enableArtProfiles true Profile podstawowe są teraz zawsze generowane. Więcej informacji znajdziesz w sekcji Profile podstawowe.
android.enableNewResourceShrinker true Domyślnie używaj nowej implementacji narzędzia do zmniejszania rozmiaru zasobów. Nowy kompresor zasobów obsługuje funkcje dynamiczne.
android.enableSourceSetPathsMap true Używane do obliczania mapowań względnych ścieżek zasobów, dzięki czemu kompilacje Gradle są częściej aktualne.
android.cacheCompileLibResources true Skompilowane zasoby biblioteki można teraz domyślnie przechowywać w pamięci podręcznej, ponieważ Gradle śledzi pliki zasobów względem lokalizacji projektu. Wymaga włączenia funkcji android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true AGP 8.0 domyślnie nie tworzy komponentu SoftwareComponent. Zamiast tego AGP tworzy SoftwareComponents tylko dla wariantów, które są skonfigurowane do publikowania za pomocą DSL publikowania.

Nowa stabilna flaga profilu wykonania

AGP zawiera nową flagę android.settings.executionProfile. Użyj tego parametru, aby zastąpić domyślny profil wykonania z SettingsExtension. Więcej informacji znajdziesz w dokumentacji wtyczki ustawień.

Aby wyświetlić podgląd eksperymentalnych flag, zapoznaj się z informacjami o wersji.

Przypisywanie właściwości leniwych w języku Kotlin nie jest obsługiwane

Jeśli w skryptach kompilacji używasz Kotlin DSL Gradle, pamiętaj, że Android Studio i AGP 8.0 nie obsługują eksperymentalnego przypisywania właściwości za pomocą operatora =. Więcej informacji o tej funkcji znajdziesz w informacjach o wersjidokumentacji.

Kategorie zadań analizatora kompilacji

Od Androida Studio Flamingo Analizator kompilacji ma nowy widok domyślny dla zadań, które wpływają na czas trwania kompilacji. Jeśli Twój projekt korzysta z AGP 8.0 lub nowszego, Analizator kompilacji nie wyświetla zadań pojedynczo, ale grupuje je według kategorii. Na przykład zadania związane z zasobami Androida, Kotlinem lub Dexingiem są grupowane, a następnie sortowane według czasu trwania kompilacji. Dzięki temu łatwo sprawdzić, która kategoria ma największy wpływ na czas kompilacji. Po rozwinięciu każdej kategorii wyświetli się lista odpowiednich zadań. Aby wyświetlać zadania pojedynczo, bez grupowania, użyj menu Grupuj według.

Kategorie zadań Analizatora kompilacji.

Nowa wtyczka ustawień

W AGP 8.0.0-alpha09 wprowadzono nową wtyczkę ustawień. Wtyczka ustawień umożliwia centralizację konfiguracji globalnych – konfiguracji, które mają zastosowanie do wszystkich modułów – w jednym miejscu, dzięki czemu nie musisz kopiować i wklejać konfiguracji w wielu modułach. Możesz też użyć wtyczki ustawień, aby utworzyć profile wykonywania narzędzi lub różne instrukcje dotyczące sposobu uruchamiania narzędzia i przełączać się między nimi.

Aby użyć wtyczki ustawień, zastosuj ją w pliku settings.gradle:

apply plugin 'com.android.settings'

Scentralizuj konfiguracje globalne

Aby skonfigurować konfiguracje globalne, użyj nowego bloku android w pliku settings.gradle. Oto przykład:

android {
  compileSdk 31
  minSdk 28
  ...
}

Profile wykonania narzędzia

Wtyczka ustawień umożliwia też tworzenie profili wykonywania dla niektórych narzędzi. Profil wykonania określa sposób działania narzędzia. W zależności od środowiska możesz wybrać różne profile wykonania. W profilu wykonania możesz ustawić argumenty JVM dla narzędzia i skonfigurować je tak, aby działało w osobnym procesie. Obecnie obsługiwane jest tylko narzędzie R8.

Utwórz profile wykonania i ustaw domyślny profil wykonania w pliku settings.gradle, jak pokazano w tym przykładzie:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Aby zastąpić profil domyślny, wybierz inny profil za pomocą właściwości android.experimental.settings.executionProfile w pliku gradle.properties:

android.experimental.settings.executionProfile=high

Możesz też ustawić tę właściwość przy użyciu wiersza poleceń, co pozwala skonfigurować różne procesy. Jeśli na przykład masz przepływ pracy ciągłej integracji, możesz użyć wiersza poleceń, aby zmienić profil wykonania bez konieczności zmiany pliku settings.gradle:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

Do uruchomienia wtyczki Androida do obsługi Gradle 8.0 wymagany jest pakiet JDK 17

Jeśli do kompilacji aplikacji używasz wtyczki Androida do obsługi Gradle w wersji 8.0, do uruchomienia Gradle jest teraz wymagany pakiet JDK 17. Android Studio Flamingo zawiera JDK 17 i domyślnie konfiguruje Gradle do używania. Oznacza to, że większość użytkowników Androida Studio nie musi wprowadzać żadnych zmian w konfiguracji swoich projektów.

Jeśli trzeba ręcznie ustawić wersję JDK używaną przez wtyczkę Androida do obsługi Gradle w Android Studio, musisz zastosować JDK 17 lub nowszy.

Jeśli używasz wtyczki Androida do obsługi Gradle niezależnie od Androida Studio, zaktualizuj wersję JDK, ustawiając JAVA_HOME zmienną środowiskową lub -Dorg.gradle.java.home opcję wiersza poleceń na katalog instalacyjny JDK 17.

Rozwiązane problemy

Wtyczka Androida do obsługi Gradle w wersji 8.0.2

Rozwiązane problemy
Kompresor (R8)
R8 kończy się niepowodzeniem podczas kompilacji Compose z błędem ArrayIndexOutOfBoundsException
VerifyError: klasa odrzucona przez weryfikator podczas używania R8 z Kotlinem w wersji 1.8.20
R8 w AGP 8 powoduje awarię usługi Google Fit
Informacje o pliku źródłowym z nazwami resztkowymi, które pokrywają się z nazwami wejściowymi, nie są prawidłowo reprezentowane.

Wtyczka Androida do obsługi Gradle w wersji 8.0.1

Rozwiązane problemy
Kompresor (R8)
Błąd: „No VersionRequirement with the given id in the table” (W tabeli nie ma elementu VersionRequirement o podanym identyfikatorze) po uaktualnieniu wtyczki AGP z wersji 7.2.2 do 7.4.0
R8 NullPointerException at markTypeAsLive AGP 7.4.1
[R8 4.0.53] Nie udało się zweryfikować klasy na Androidzie 11

Wtyczka Androida do obsługi Gradle w wersji 8.0.0

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Niepewne niepowodzenie kompilacji w zadaniu MergeResources
JavaPluginConvention i HasConvention zostały wycofane
Nieprawidłowa i niespójna lokalizacja pliku w przypadku nowego interfejsu API przekształceń
Wtyczka Androida do obsługi Gradle nie powinna używać wycofanej funkcji GUtil.toWords(string)
Wtyczka Androida do obsługi Gradle nie powinna używać wycofanej funkcji ConfigureUtil.configure(closure, target)
Aktualizacja testów wtyczki Androida do obsługi Gradle, aby korzystały z KGP w wersji 1.7.20-beta
Błąd Gradle 7.4 (nie udało się utworzyć instancji AnalyticsService)
Nowy błąd „unknown enum constant” (nieznana stała wyliczeniowa) z kompilatora javac w AGP 7.4.0-alpha09
Konfiguracja MergeGeneratedProguardFilesCreationAction działa wolno nawet przy włączonym buforowaniu konfiguracji
[AGP] Dodawanie wygenerowanego katalogu źródłowego do modelu IDE (interfejs API wariantów)
JavaPluginConvention i HasConvention zostały wycofane
Nie dodawaj domyślnie do R8 opcji ignorewarnings
Ostrzeganie, gdy pliki ProGuard nie istnieją
AGP 7.3.0 powoduje przerwanie synchronizacji Gradle w projektach platformy Gradle
Biblioteka apksig: metoda ApkVerifier$Result.getV4SchemeSigners() jest oznaczona jako prywatna
Przestań tworzyć konfigurację androidJacocoAnt, jeśli nie jest włączone pokrycie
Użycie adnotacji @IntDef w komponencie biblioteki nie powoduje wygenerowania pliku annotations.zip w pliku AAR
Nie udało się znaleźć wspólnego typu nadrzędnego dla i
Dodaj wersję właściwości Gradle LINT_PRINT_STACKTRACE=true
Nieaktualne artefakty prefabrykowane są pakowane do AAR
Migracja z właściwości destination do właściwości outputLocation w celu wyeliminowania ostrzeżenia o wycofaniu i przygotowania się na Gradle 9.0
Uwzględnianie flagi `--release` podczas konfigurowania zadania JavaCompile
[AGP-7.3.0-beta03] Zadanie ShrinkResourcesNewShrinkerTask kończy się niepowodzeniem, gdy po deklaracji XML występuje pusty wiersz
Domyślne uruchamianie lintera w przypadku wariantu debugowania
Ostrzeganie, gdy pliki ProGuard nie istnieją
AGP próbuje dodać kotlinOptions.freeCompilerArgs w fazie wykonywania zadania
Synchronizacja Gradle nie powiodła się: nie udało się zsynchronizować: nieznana przyczyna
Zadanie DependencyReportTask jest niezgodne z pamięcią podręczną konfiguracji
Zastępowanie zasobów za pomocą resValue w pliku build.gradle powoduje błąd: Duplicate resources
Rodzaj kompilacji „debug” ma domyślny klucz podpisywania, a pozostałe nie.
Używanie funkcji dynamicznych i zmniejszania zasobów powoduje awarię w czasie działania
Rodzaj kompilacji „debug” ma domyślny klucz podpisywania, a pozostałe nie.
wygenerowany katalog źródłowy wymieniony jako katalog Java w głównym dostawcy źródła modelu linter
Gradle 8.0-milestone-2 powoduje wyjątek w AGP
Optymalizacja scalania plików manifestu w przypadku aplikacji i bibliotek
Dodawanie gradle-settings-api do generowania dokumentacji Javadoc
Nowy błąd „unknown enum constant” (nieznana stała wyliczeniowa) z kompilatora javac w AGP 7.4.0-alpha09
AGP 7.4.0-alpha09 generuje kompilacje, których nie można przesłać do Rozpowszechniania aplikacji przez Firebase
Plik lint.xml w modułach nie jest brany pod uwagę podczas sprawdzania, czy zadania Lint są aktualne
Problem z wtyczką Androida do obsługi Gradle w wersji 7.0 lub nowszej i testami Androida: nie można znaleźć zasobu: id
configureCMakeDebug sporadycznie ulega awarii z wyjątkiem wskaźnika o wartości null
Błąd IllegalAccessError podczas uaktualniania projektu do AS2022.2.1.5, FireBasePerfPlugin
Synchronizacja kończy się niepowodzeniem z tajemniczym błędem „Collection contains no element matching the predicate”.
Interfejs Instrumentation API nie przekształca zależności plików lokalnych
Błąd „Zapytanie o AnnotationProcessorOptions.arguments” podczas aktualizacji do wersji 7.4 Beta 1
Przeniesienie publicznych wtyczek Gradle do gradle-api i usunięcie BasePlugin.getExtension
argumenty r8.jvmArgs nie są używane
Wtyczka Androida do obsługi Gradle wymaga JDK17 jako minimalnej wersji
AGP 8.0.0 A8 powoduje problemy z profilami podstawowymi
Zmiana „compileSdkVersion” na „compileSdk” w komunikacie CheckAarMetadataTask w AGP 8.0
Wtyczka Androida do obsługi Gradle w wersji 7.4.0-rc01 powoduje błąd w interfejsie Variant API z komunikatem „Querying the mapped value of map(provider(java.util.Set)) before task '...' has completed is not supported” (Zapytanie o zmapowaną wartość map(provider(java.util.Set)) przed ukończeniem zadania „...” nie jest obsługiwane).
Problemy z `com.android.build.gradle.tasks.ShaderCompile` w pamięci podręcznej konfiguracji
Dodawanie do zasobów Java za pomocą interfejsów AGP API powoduje uszkodzenie pamięci podręcznej konfiguracji
Wtyczka Lint nie jest częścią interfejsu Gradle API
DexingFileDependenciesTask.outputKeepRules to katalog, ale jest oznaczony jako OutputFile
Uaktualnienie do AGP 7.4 powoduje błąd StackOverflowError
processDebugUnitTestManifest kończy się niepowodzeniem z obiektami zastępczymi w pliku manifestu w przypadku wariantów testowych
Lint uzyskuje dostęp do informacji o zestawach źródeł bez zależności
Błąd kompilacji odnosi się do poziomu interfejsu API 34, który nie istnieje
„Zalecamy użycie nowszej wtyczki Androida do obsługi Gradle”, gdy nie ma nowszej wersji
android.injected.testOnly=false nie działa
Dexer (D8)
Błąd scalania plików Dex związany z globalnymi syntetykami po uaktualnieniu AS Canary z wersji 6 do 7
Aktualizacja biblioteki metadanych Kotlin do wersji 0.6.0
Obejście problemu JDK-8272564 wydaje się wymagane w przypadku interfejsu API na poziomie 28–30
Linter
Sprawdzanie kodu ResourceType nie działa w przypadku źródeł w języku Kotlin
VersionChecks nie obsługuje sprawdzania zakresu w języku Kotlin
Fałszywie pozytywny wynik w przypadku funkcji InlinedApi, gdy jest ona opakowana
Fałszywie pozytywny błąd lintera dotyczący metody Recycle w przypadku metody openInputStream
[BuildTool/Lint] ChecksSdkIntAtLeast constructor property
Lint: scalanie PartialResults działa nieprawidłowo
Android Studio nieprawidłowo oznacza określoną wersję jako nieaktualną.
AndroidDeprecationInspection.DeprecationFilter EP nigdy nie jest rejestrowany w pliku android-plugin.xml
Wyjaśnienie kontroli lint AccessibilityDetector jest nieaktualne
Lint SDK_INT checks should understand temporary local variables
Błąd podczas zastępowania typu funkcji przez alias typu w TestMode.TYPE_ALIAS
Błąd: gdy obiekt ObjectAnimator jest tworzony poza bieżącym blokiem kodu, pojawiają się fałszywe ostrzeżenia o jego nieuruchomieniu (#38)
Lint: NPE due to querying Application instance in mergeOnly mode
Reguła lint NonConstantResourceId nie może wykryć przypisywania stałych wartości z identyfikatora zasobu
nie wyświetla błędu w przypadku identyfikatora widoku
Nieudana deserializacja pamięci podręcznej zasobów lintera powoduje błąd lintera (ale powinien to być komunikat ostrzegawczy)
Regresja w narzędziu Lint w AGP Flamingo Alpha 8 dotycząca usuwania cukru z interfejsu NewApi
TypedArray#close (API 31) nie jest przekształcany, ale AS nie wyświetla ostrzeżenia, gdy jest używany w bloku try-with-resources
Lint nie sprawdza prawidłowych rzutowań w przypadku odbiorców wywołań
Lint sprawdza bezpieczne rzutowanie tylko w przypadku interfejsów zaimplementowanych bezpośrednio, a nie tych odziedziczonych.
Integracja z linterem
Plik podstawowy jest obecnie danymi wejściowymi i wyjściowymi zadań Lint.
Kompresor (R8)
Błąd NPE lub błąd asercji w weryfikatorze ramek CF
Regresja po usunięciu pamięci podręcznej wyszukiwania pól
`:app:minifyVariantWithR8` zgłasza wyjątek NullPointerException w AGP 7.4.0-beta02
R8: ClassNotFoundException przy użyciu opcji -allowaccessmodification
Dodanie obsługi odbiorców kontekstu w metadanych
java.lang.VerifyError: klasa odrzucona przez weryfikator androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) failed to verify: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object): [0x0] cannot access instance field java.lang.Object androidx.compose.ui.graphics.colorspace.n.a from object of type Precise Reference: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1 – próba umieszczenia działania na liście zadań kolejki, która nie obsługuje umieszczania
Zmniejszanie kodu Renderscript: znaczny spadek wydajności po uaktualnieniu wtyczki Androida do obsługi Gradle z wersji 7.3.1 do 7.4.0