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

Wtyczka Androida do obsługi Gradle w wersji 8.0.0 to duża wersja, która zawiera wiele nowych funkcje i ulepszenia.

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 kompilowania pakietu SDK 30.0.3 30.0.3 Zainstaluj lub skonfiguruj narzędzia SDK Build Tools.
NDK Nie dotyczy 25.1.8937393 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 17 17 Więcej informacji znajdziesz w sekcji o ustawianiu wersji pakietu 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 8.0.2 (maj 2023 r.)

Listę błędów naprawionych w wersji AGP 8.0.2 znajdziesz w artykule Android Studio 2022.2.1: zamknięte problemy.

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: „Brak wymogu wersji z podanym identyfikatorem w tabeli” po aktualizacji AGP 7.2.2 -> 7.4.0
R8 NullPointerException at markTypeAsLive AGP 7.4.1
[R8 4.0.53] Błąd weryfikacji klasy niesprawnej w Androidzie 11

Zmiana powodująca przerwanie działania: w skrypcie kompilacji na poziomie modułu wymagana jest nazwa przestrzeni nazw

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

Podczas migracji do przestrzeni nazw DSL należy wziąć pod uwagę te problemy:

  • W poprzednich wersjach AGP w niektórych przypadkach przestrzeń nazw testu była nieprawidłowo wywnioskowana z przestrzeni nazw głównej lub identyfikatora aplikacji. Asystent uaktualniania AGP blokuje jeśli zauważy, że główna przestrzeń nazw i testowa przestrzeń nazw Twojego projektu są tak samo. Jeśli uaktualnienie jest zablokowane, musisz ręcznie zmienić testNamespacei odpowiednio zmodyfikować kod źródłowy.
  • Po zmianie przestrzeni nazw testów kod może się kompilować, ale testy z instrumentacją mogą się nie uruchomić. Może się tak zdarzyć, jeśli instrumentowany kod źródłowy testu odwołuje się do zasobu zdefiniowanego w obu androidTest i źródła aplikacji.

Więcej informacji: Problem nr 191813691 komentarz nr 19.

Zmiany wpływające na działanie aplikacji: domyślne wartości opcji kompilacji

Od wersji AGP 8.0 wartości domyślne tych flag uległy zmianie, aby poprawić wydajność kompilacji. Aby dowiedzieć się, jak dostosować kod do obsługi niektórych z tych zmian, skorzystaj z Asystenta przejścia na AGP (Narzędzia > Asystent przejścia na AGP). Asystent uaktualniania poprowadzi Cię przez proces aktualizowania kodu w celu dostosowania go do nowego zachowania lub ustawiania flag, aby zachować poprzednie zachowanie.

Zgłoś Nowa wartość domyślna Poprzednia wartość domyślna Uwagi
android.defaults.buildfeatures.buildconfig false true AGP 8.0 domyślnie nie generuje BuildConfig. Musisz określić tę opcję za pomocą wyrażenia regularnego w projektach, w których jest ona potrzebna.
android.defaults.buildfeatures.aidl false true W wersji AGP 8.0 obsługa AIDL nie jest domyślnie włączona. Musisz określić tę opcję za pomocą DSL w projektach, w których jest ona potrzebna. Zamierzamy usunąć tę flagę w wersji AGP 9.0.
android.defaults.buildfeatures.renderscript false true AGP 8.0 nie włącza domyślnie obsługi języka RenderScript. Czynności, które musisz wykonać określ tę opcję za pomocą DSL w projektach, w których jest potrzebna. Ten parametr zostanie usunięty w wersji AGP 9.0.
android.nonFinalResIds true false AGP 8.0 generuje R klas z polami, które nie są ostateczne, przez wartość domyślną.
android.nonTransitiveRClass true false AGP 8.0 generuje R klasy dla zasobów zdefiniowanych w tylko w bieżącym module.
android.enableR8.fullMode true false AGP 8.0 domyślnie włącza tryb całego ruchu R8. Więcej informacji znajdziesz w artykule Tryb pełny R8.

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

Od wersji AGP 8.0 nie można już zmieniać wartości tych flag. Jeśli określisz je w pliku gradle.properties, zostaną zignorowane, a AGP wypisze ostrzeżenia.

Zgłoś Wymuszona wartość Uwagi
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 emituje ostrzeżenie, jeśli wykryje rozdzielczość konfiguracji podczas fazy konfiguracji, ponieważ negatywnie wpływa to na czas konfiguracji Gradle.
android.r8.failOnMissingClasses true Nieudane kompilacje AGP 8.0 korzystające z R8, jeśli brakuje klas aby lepiej optymalizować pliki DEX. Aby rozwiązać ten problem, musisz dodać parametr brakujące biblioteki lub -dontwarn zachowywanie reguł. Więcej informacji znajdziesz w artykule Missing class warnings in R8 shrinker (Angielski).
android.testConfig.useRelativePath true Gdy obsługa zasobów, zasobów i plików manifestu w Androidzie jest obsługiwana w testy jednostkowe są włączone, format AGP 8.0 generuje test_config.properties plik, który zawiera tylko względny ścieżek konwersji. Dzięki temu testy jednostkowe Androida zawsze mogą używać Gradle pamięci podręcznej kompilacji.
android.useNewJarCreator true AGP wykorzystuje bibliotekę Zipflinger do tworzenia plików JAR w celu ulepszenia i zwiększanie wydajności.
android.bundletool.includeRepositoriesInDependencyReport true Jeśli w pakietach aplikacji na Androida i plikach APK dodasz informacje o zależności od pakietów SDK, AGP 8.0 dodaje też do tych informacji listę repozytoriów projektów. Aby dowiedzieć się więcej, zapoznaj się z informacjami o zależnościach w Konsoli Play.
android.enableArtProfiles true Profile podstawowe są teraz zawsze generowane. Więcej informacji znajdziesz w artykule Profile bazowe.
android.enableNewResourceShrinker true Domyślnie używaj nowej implementacji zasobów. Nowy kurczący zasoby zapewnia obsługę funkcji dynamicznych.
android.enableSourceSetPathsMap true Służy do obliczania mapowań względnych ścieżek zasobów, dzięki czemu Gradle kompiluje są aktualizowane częściej.
android.cacheCompileLibResources true Skompilowane zasoby biblioteki mogą teraz być domyślnie przechowywane w pamięci podręcznej, ponieważ Gradle śledzi pliki zasobów względem lokalizacji projektu. Wymaga włączenia opcji android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true AGP 8.0 domyślnie nie tworzy komponentu SoftwareKomponent. Zamiast tego AGP tworzy komponenty oprogramowania tylko w przypadku wersji skonfigurowanych do opublikowania za pomocą języka DSL do publikowania.

Nowa flaga stabilnej dla profilu wykonania

AGP zawiera nową flagę android.settings.executionProfile. Użyj tej flagi do: zastąpi domyślny profil wykonywania SettingsExtension Więcej informacji znajdziesz w dokumentacji wtyczki do ustawień.

Aby wyświetlić flagi eksperymentalne, zapoznaj się z informacjami o wersji zapoznawczej.

Przypisanie leniwej właściwości Kotlin nie jest obsługiwane

Jeśli w swoich skryptach kompilacji używasz języka Kotlin DSL w 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 informacje o wersji oraz dokumentacji.

Kategorie zadań Analizatora kompilacji

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

Kategorie zadań Analizatora kompilacji.

Nowa wtyczka ustawień

AGP 8.0.0-alpha09 wprowadza nowy moduł ustawień. Wtyczka ustawień pozwala scentralizujesz konfiguracje globalne, które mają zastosowanie do wszystkich modułów, w w jednym miejscu, dzięki czemu nie musisz kopiować i wklejać konfiguracji w wielu różnych miejscach. modułów. Możesz też użyć wtyczki ustawień, by utworzyć narzędzie profili wykonania lub różne instrukcje uruchamiania narzędzia oraz przełączać się między nimi.

Aby korzystać z 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 wykonywania narzędzi

Wtyczka ustawień umożliwia też tworzenie profili wykonywania niektórych narzędzi. An profil wykonywania określa sposób uruchamiania narzędzia; możesz wybrać różne w zależności od środowiska. W profilu wykonania można ustawić argumenty JVM dla narzędzia i skonfigurować jego uruchamianie w oddzielnym procesie. Obecnie tylko Narzędzie R8 jest obsługiwane.

Utwórz profile wykonywania i ustaw domyślny profil wykonywania w settings.gradle, jak 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ść za pomocą wiersza poleceń. Pozwala to skonfigurować różne procesy. Jeśli na przykład masz proces 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 uruchamiania AGP 8.0 wymagana jest wersja JDK 17

Jeśli do tworzenia aplikacji używasz wtyczki Androida do obsługi Gradle w wersji 8.0, wymagana jest teraz wersja JDK 17 aby uruchomić Gradle. Android Studio Flamingo obejmuje pakiet JDK 17 i konfiguruje Gradle tak, domyślnie, co oznacza, że większość użytkowników Androida Studio nie musi zmian konfiguracji ich projektów.

Jeśli musisz ręcznie ustawić wersję pakietu JDK używanego przez AGP w Android Studio, musisz użyć pakietu JDK 17 lub nowszego.

Jeśli używasz AGP niezależnie od Android Studio, zaktualizuj wersję JDK, ustawiając zmienną środowiskową JAVA_HOME lub opcję -Dorg.gradle.java.home wiersza poleceń w katalogu instalacyjnym JDK 17.

Rozwiązane problemy

Wtyczka Androida do obsługi Gradle w wersji 8.0.0

Rozwiązane problemy
Wtyczka Android Gradle
Niepewne niepowodzenie kompilacji w założeniu MergeResources
Tagi JavaPluginConvention i HasConvention są wycofane
Nieprawidłowa i niespójna lokalizacja pliku w nowym interfejsie transformacji API
Wtyczka Android Gradle nie powinna używać wycofanej funkcji GUtil.toWords(string).
Wtyczka Android Gradle nie powinna używać wycofanej funkcji ConfigureUtil.configure(closure, target).
Aktualizowanie testów AGP, aby używać KGP w wersji 1.7.20 (beta)
Gradle 7.4 nie działa (nie udało się utworzyć instancji AnalyticsService)
Nowa „nieznana stała enum” z javac w wersji AGP 7.4.0-alpha09
Konfiguracja MergeGeneratedProguardFilesCreationAction jest powolna, nawet przy włączonym buforowaniu konfiguracji
[AGP] Dodaj wygenerowany katalog źródłowy do modelu IDE (interfejs API wariantu)
Tagi JavaPluginConvention i HasConvention są wycofane
Domyślnie nie dodawaj ostrzeżeń do R8
Ostrzegaj, gdy pliki ProGuard nie istnieją
AGP 7.3.0 powoduje przerwanie synchronizacji Gradle w projektach na platformie Gradle
Biblioteka apksig: pakiet ApkVerifier$Result.getV4SchemeSigners() jest oznaczony jako prywatny
Zatrzymaj tworzenie konfiguracji androidJacoAnt, jeśli zasięg nie jest włączony
Użycie tagu @IntDef w komponencie biblioteki nie powoduje wygenerowania w pliku AAR adnotacji.zip.
Nie można znaleźć wspólnego typu supertypu dla i
Dodaj wersję właściwości gradle LINT_PRINT_STACKTRACE=true
Nieaktualne gotowe artefakty pakowane w AAR
Przechodzenie z usługi docelowej na usługę outputLocation, aby usunąć ostrzeżenie o wycofaniu i przygotować się do Gradle 9.0
Podczas konfigurowania zadania JavaCompile weź pod uwagę flagę „--release”
[AGP-7.3.0-beta03] Niepowodzenie zadania ShrinkResourcesNewShrinkerTask, jeśli po deklaracji w formacie XML po deklaracjach XML jest pusty wiersz
Wartość docelowa lintVital jest uruchamiana domyślnie w wariancie debugowania
Ostrzegaj, gdy pliki ProGuard nie istnieją
AGP próbuje dodać kotlinOptions.freeCompilerArgs w etapie wykonywania zadania
Nie udało się zsynchronizować Gradle: synchronizacja nie powiodła się: przyczyna nieznana
DependencyReportTask jest niezgodny z pamięcią podręczną konfiguracji
Zastąpienie zasobów za pomocą resValue w pliku build.gradle powoduje błąd: Duplikaty zasobów
Typ kompilacji „debug” ma domyślny klucz podpisywania, inne typy nie mają klucza podpisywania.
Używanie funkcji dynamicznych i zmniejszanie zasobów powoduje awarię środowiska wykonawczego
„debuguj” typ kompilacji ma domyślny klucz podpisywania, inne nie mają
wygenerowany katalog źródeł podany jako katalog Javy w głównym dostawcy źródła modelu lint
Gradle 8.0-milestone-2 powoduje wyjątek w AGP
Optymalizacja scalania pliku manifestu w przypadku aplikacji i biblioteki
Dodawanie gradle-settings-api do generowania javadoc
Nowa „nieznana stała enum” z javac w AGP 7.4.0-alpha09
AGP 7.4.0-alpha09 generuje wersje, które nie będą się przesyłać do Firebase App Distribution
Plik lint.xml w modułach nie jest uwzględniany w procesie sprawdzania aktualności zadań lint
Problem z wtyczką Android do obsługi Gradle w wersji 7.0 lub nowszej oraz Android Tests: nie można znaleźć zasobu: id
configureCMakeDebug niestabilnie się zawiesza z wyjątkiem wskaźnika o wartości null
IllegalAccessError podczas uaktualniania projektu do wersji AS2022.2.1.5, FireBasePerfPlugin
Synchronizacja kończy się niepowodzeniem i wyświetlany jest niejawny błąd „Kolekcja zawiera brak elementu pasującego do predykatu”.
Interfejs Instrumentation API nie przekształca zależności plików lokalnych
Błąd „AnnotationProcessorOptions.arguments są kwerendy” podczas aktualizowania do wersji 7.4 Beta 1
Przenieś publiczne wtyczki Gradle do gradle-api i usuń BasePlugin.getExtension.
r8.jvmArgs nie są używane
JDK17 jako minimalna wersja wymagana przez AGP
AGP 8.0.0 A8 powoduje rozbicie profili podstawowych
Zmiana „kompilacjiSdkVersion” na „kompilowaćSdk”, w komunikacie CheckAarMetadataTask w AGP 8.0
Wersja AGP 7.4.0-rc01 powoduje błąd w interfejsie Variant API: „Wysyłanie zapytania o zmapowaną wartość map(provider(java.util.Set)) przed zakończeniem zadania '...' nie jest obsługiwane”.
Problemy z „com.android.build.gradle.tasks.ShaderCompile” z pamięcią podręczną konfiguracji
Dodawanie do zasobów Java za pomocą interfejsów AGP powoduje błąd pamięci podręcznej konfiguracji
Wtyczka Lint nie jest częścią gradle-api
DexingFileDependenciesTask.outputKeepRules to katalog, ale jest oznaczony jako OutputFile (Plik wyjściowy)
Uaktualnienie do wersji AGP 7.4 powoduje błąd StackOverflowError
Funkcja processDebugUnitTestManifest nie działa prawidłowo w przypadku obiektów zastępczych w pliku manifestu dla wariantów testowych
Lint uzyskuje dostęp do źródła ustawia informacje bez zależności
Błąd kompilacji odnosi się do poziomu API 34, który nie istnieje
„Zalecamy użycie nowszego wtyczki Gradle dla Androida”, gdy nie ma nowszego
Parametr android.injected.testOnly=false nie działa
Dexer (D8)
Po uaktualnieniu AS Canary 6 do wersji 7 wystąpił błąd łączenia plików DX dotyczących globalnych systemów syntetycznych.
Aktualizacja biblioteki metadanych Kotlina do wersji 0.6.0
Obejście problemu JDK-8272564 wydaje się być wymagane na poziomach API 28–30
Lint
Sprawdzanie lint ResourceType nie działa w przypadku źródeł Kotlin
Weryfikacja wersji nie obsługuje sprawdzania zakresu w Kotlinie
Wynik fałszywie pozytywny dla InlinedApi, gdy jest zawinięty
Nieprawidłowa informacja o błędach w funkcji Recyklingu dotyczącej openInputStream
[BuildTool/Lint] ChecksSdkIntAtLeast constructor property
Lint: nieprawidłowe działanie scalania PartialResults
Android Studio nieprawidłowo oznacza wybraną wersję jako nieaktualną.
AndroidDeprecationInspection.DeprecationFilter EP nigdy nie jest zarejestrowany w pliku android-plugin.xml
Wyjaśnienie sprawdzania lintowania narzędzia AccessibilityDetector jest nieaktualne
Sprawdzanie Lint SDK_INT powinno uwzględniać tymczasowe zmienne lokalne
Błąd podczas zastępowania typu funkcji za pomocą typu aliasu w TestMode.TYPE_ALIAS
Błąd: gdy obiekt ObjectAnimator jest tworzony poza bieżącym blokiem kodu, pojawiają się ostrzeżenia o fałszywie dodatnich wynikach nieuruchamiania #38
Lint: NPE z powodu zapytania instancji aplikacji w trybie mergeOnly
Reguła lintowania NonConstantResourceId nie może wykryć, by przypisać stałe wartości z identyfikatora zasobu
nie wyświetla się błąd przy identyfikatorze widoku danych
Brak deserializacji zasobów lintowanych w pamięci podręcznej skutkuje błędem lintowania (które powinno być ostrzeżeniem).
AGP Flamingo Alpha 8 Lint NewApi Desugar Regression
Parametr TypedTrack#close (API 31) nie został usunięty, ale serwer AS nie wyświetla ostrzeżenia w przypadku użycia funkcji try-with-resources
Lint nie sprawdza prawidłowego przesyłania dla odbiorników
Lint sprawdza bezpieczne konwersje tylko w przypadku bezpośrednio zaimplementowanych interfejsów, a nie dziedziczonych
Integracja z lintem
Plik bazowy jest obecnie wejściem i wyjściem zadań Lint
Shrinker (R8)
Błąd NPE / asercji w weryfikatorze ramek CF
Wsteczny regres po usunięciu pamięci podręcznej wyszukiwania pól
Parametr „:app:minifyVariantWithR8” zgłasza wyjątek NullPointerException w AGP 7.4.0-beta02
R8: ClassNotFoundException, gdy ustawiono -allowaccessmodification
Dodanie obsługi odbiorników kontekstu w metadanych
. . . . . . void androidx.compose.ui.ui......google.
AGP 7.4.0/7.3.1 – próba umieszczenia działania w kolejce na liście pracy kolejki, której nie można przekazać do kolejki
Zmniejszanie kodu Renderscript: ogromny spadek wydajności po uaktualnieniu AGP z 7.3.1 do 7.4.0

Wtyczka Androida do obsługi Gradle w wersji 8.0.1

Rozwiązane problemy
Zmniejszająca (R8)
Błąd: „Brak wymogu wersji z podanym identyfikatorem w tabeli” po aktualizacji AGP 7.2.2 -> 7.4.0
R8 NullPointerException w markTypeAsLive AGP 7.4.1
[R8 4.0.53] Nie udało się zweryfikować twardej klasy na Androidzie 11

Wtyczka Androida do obsługi Gradle w wersji 8.0.2

Rozwiązane problemy
Shrinker (R8)
R8 kończy się niepowodzeniem podczas kompilacji z użyciem metody ArrayIndexOutOfBoundsException
VerifyError: Weryfikator odrzucił klasę podczas korzystania z R8 z Kotlin 1.8.20
R8 na AGP 8 powoduje błąd usługi Google Fit
Uwzględnianie informacji o pliku źródłowym z nazwami resztowymi, które nakładają się na nazwy danych wejściowych, jest nieprawidłowo reprezentowane