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 aktualizacja, która zawiera wiele nowych funkcji i ulepszeń.

Zgodność

Minimalna wersja Wersja domyślna Uwagi
Gradle z Androidem 8.0 z Androidem 8.0 Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilowania pakietu SDK 30.0.3 30.0.3 Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK.
NDK Nie dotyczy 25.1.8937393 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 17 17 Więcej informacji znajdziesz w artykule Ustawianie 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 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 8.0.1 (maj 2023 r.)

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

Rozwiązane problemy
Błąd: „Brak wymagań dotyczących wersji o podanym identyfikatorze w tabeli” po uaktualnieniu AGP 7.2.2 do 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

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ąć korzystać z usługi DSL namespace, począwszy od wersji AGP 7.3. Więcej informacji znajdziesz w artykule Konfigurowanie przestrzeni nazw.

Podczas migracji do DSL nazwy domeny pamiętaj o tych kwestiach:

  • W poprzednich wersjach AGP w niektórych przypadkach przestrzeń nazw testu była nieprawidłowo wywnioskowywana z przestrzeni głównej lub identyfikatora aplikacji. Asystent uaktualnienia AGP blokuje uaktualnienie, jeśli stwierdzi, że główna i testowa przestrzeń nazw Twojego projektu są takie same. 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 zmodyfikowany kod źródłowy testu odwołuje się do zasobu zdefiniowanego zarówno w źródłach androidTest, jak i w źródłach aplikacji.

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

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

Od wersji AGP 8.0 domyślne wartości tych flag zostały zmienione, 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ą składni DSL 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 W AGP 8.0 obsługa RenderScript nie jest domyślnie włączona. Musisz określić tę opcję za pomocą DSL w projektach, w których jest ona potrzebna. Ten parametr zostanie usunięty w wersji AGP 9.0.
android.nonFinalResIds true false AGP 8.0 domyślnie generuje klasy R z polami nieostatecznymi.
android.nonTransitiveRClass true false AGP 8.0 generuje klasy R dla zasobów zdefiniowanych tylko w bieżącym module.
android.enableR8.fullMode true false AGP 8.0 domyślnie włącza tryb pełny R8. Więcej informacji znajdziesz w artykule Tryb pełny R8.

Zmiany powodujące przerwanie działania: wymuszone wartości opcji kompilacji

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

Zgłoś Wartość wymuszona Uwagi
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 wyświetla ostrzeżenie, jeśli wykryje rozdzielczość konfiguracji podczas fazy konfiguracji, ponieważ negatywnie wpływa to na czas konfiguracji Gradle.
android.r8.failOnMissingClasses true AGP 8.0 powoduje niepowodzenie kompilacji, które używają R8, jeśli brakuje klas zapewniających lepszą optymalizację DEX. Aby rozwiązać ten problem, musisz dodać brakujące biblioteki lub -dontwarn zachować reguły. Więcej informacji znajdziesz w artykule Brakujące ostrzeżenia dotyczące klasy w narzędziu do kompresji R8.
android.testConfig.useRelativePath true Gdy włączysz obsługę zasobów, komponentów i pliku manifestu Androida w testach jednostkowych, AGP 8.0 wygeneruje plik test_config.properties zawierający tylko ścieżki względne. Dzięki temu testy jednostkowe Androida mogą zawsze korzystać z pamięci podręcznej Gradle.
android.useNewJarCreator true AGP używa biblioteki Zipflinger do tworzenia plików JAR, aby zwiększyć wydajność kompilacji.
android.bundletool.includeRepositoriesInDependencyReport true Gdy włączysz dodawanie informacji o zależnościach pakietu SDK w plikach AAB i APK, A Group 8.0 doda do tych informacji także listę repozytoriów projektu. 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 kompresor zasobów obsługuje funkcje dynamiczne.
android.enableSourceSetPathsMap true Służy do obliczania względnych mapowań ścieżek zasobów, dzięki czemu kompilacje Gradle są częściej aktualne.
android.cacheCompileLibResources true Zkompilowane zasoby biblioteki mogą być teraz domyślnie umieszczane w pamięci podręcznej, ponieważ Gradle śledzi pliki zasobów względem lokalizacji projektu. Wymaga włączenia android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true AGP 8.0 domyślnie nie tworzy komponentu SoftwareComponent. Zamiast tego AGP tworzy komponenty oprogramowania tylko w przypadku wersji skonfigurowanych do opublikowania za pomocą języka DSL do publikowania.

Nowa flaga stabilności dla profilu wykonania

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

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

Nieobsługiwane przypisanie właściwości opóźnionej w Kotlinie

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 informacjach o wersjidokumentacji.

Kategorie zadań w analizatorze

Począwszy od Android Studio Flamingo, analiza kompilacji ma nowy widok domyślny zadań, które wpływają na czas kompilacji. Jeśli Twój projekt używa AGP 8.0 lub nowszej wersji, zamiast wyświetlać zadania pojedynczo, analizator kompilacji grupował 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 dowiesz się, która kategoria ma największy wpływ na czas kompilacji. Rozwinięcie każdej kategorii powoduje wyświetlenie listy odpowiednich zadań. Aby wyświetlać zadania pojedynczo, bez grupowania, użyj menu Grupuj według.

Tworzenie kategorii zadań analizy kompilacji.

Nowa wtyczka ustawień

Wersja AGP 8.0.0-alpha09 wprowadza nowy moduł ustawień. Dzięki niemu możesz centralizować konfiguracje globalne (czyli konfiguracje, które mają zastosowanie do wszystkich modułów) w jednym miejscu, dzięki czemu nie musisz kopiować i wklejać konfiguracji w różnych modułach. Dodatkowo za pomocą wtyczki ustawień możesz tworzyć profile wykonania narzędzia lub różne instrukcje dotyczące jego uruchamiania i przełączać się między nimi.

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

apply plugin 'com.android.settings'

Centralizacja konfiguracji globalnych

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

Dzięki wtyczce z ustawieniami możesz też tworzyć profile wykonywania 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ść za pomocą wiersza poleceń, co pozwoli Ci skonfigurować różne przepływy pracy. 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 kompilowania aplikacji używasz wtyczki Androida do obsługi Gradle w wersji 8.0, do uruchomienia Gradle wymagana jest teraz wersja JDK 17. Android Studio Flamingo zawiera pakiet JDK 17 i konfiguruje Gradle do użycia go domyślnie, co oznacza, że większość użytkowników Android Studio nie musi wprowadzać żadnych zmian konfiguracyjnych w swoich projektach.

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ę wiersza poleceń -Dorg.gradle.java.home w katalogu instalacyjnym JDK 17.

Rozwiązane problemy

Wtyczka Androida do obsługi Gradle 8.0.0

Rozwiązane problemy
Wtyczka Gradle na Androida
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 Gradle na Androida nie powinna używać wycofanej funkcji ConfigureUtil.configure(closure, target).
Zaktualizuj testy AGP, aby używały 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 AGP 7.4.0-alpha09
Konfiguracja MergeGeneratedProguardFilesCreationAction jest powolna, nawet przy włączonym buforowaniu konfiguracji
[AGP] Dodawanie wygenerowanego katalogu źródeł do modelu IDE (interfejs Variant API)
Tagi JavaPluginConvention i HasConvention są wycofane
Nie dodawaj domyślnie ignorewarnings do R8
Ostrzeżenie, gdy pliki Proguard nie istnieją
Wersja AGP 7.3.0 powoduje przerwanie synchronizacji Gradle w przypadku projektów platformy Gradle
biblioteka apksig: ApkVerifier$Result.getV4SchemeSigners() jest oznaczona jako prywatna
Zatrzymanie tworzenia konfiguracji androidJacocoAnt, jeśli pokrycie nie jest włączone
Użycie elementu @IntDef w komponencie biblioteki nie powoduje wygenerowania pliku annotations.zip w pliku aar
Nie udało się znaleźć wspólnego typu super 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ę parametr `--release`.
[AGP-7.3.0-beta03] ShrinkResourcesNewShrinkerTask nie działa, gdy po deklaracji XML znajduje się pusty wiersz
domyślne uruchamianie celu lintVital w wersji debugowania,
Ostrzeżenie, gdy pliki Proguard nie istnieją
AGP próbuje dodać kotlinOptions.freeCompilerArgs w etapu wykonywania zadania
Nie udało się zsynchronizować Gradle: nie udało się zsynchronizować: nieznany powód
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ą.
Korzystanie z funkcji dynamicznych i zmniejszanie zasobów powodują awarię w czasie wykonywania
Typ kompilacji „debug” ma domyślny klucz podpisywania, inne typy nie mają.
wygenerowany katalog źródłowy podany jako główny dostawca źródła modelu lint jako katalog Java
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 ramach sprawdzania aktualności zadań lint
Problem z wtycką Androida do obsługi Gradle w wersji 7.0 lub nowszej i testami Androida: nie można znaleźć zasobu o identyfikatorze id
configureCMakeDebug niestabilnie się zawiesza z wyjątkiem wskaźnika o wartości null
IllegalAccessError uaktualnia projekt do wersji AS2022.2.1.5, FireBasePerfPlugin
Synchronizacja kończy się niepowodzeniem z niejasnym komunikatem o błędzie „Kolekcja nie zawiera elementu pasującego do predykatu”.
Interfejs Instrumentation API nie przekształca lokalnych zależności plików
Błąd „AnnotationProcessorOptions.arguments are queried” podczas aktualizacji 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
Zmień „compileSdkVersion” na „compileSdk” w wiadomości 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 modułem „com.android.build.gradle.tasks.ShaderCompile” dotyczące pamięci podręcznej 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
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 informacji o zestawach źródeł 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)
Błąd scalania dex związany z globalnymi syntetycznymi po przejściu z wersji 6 na 7 w AS Canary
Aktualizacja biblioteki metadanych Kotlina do wersji 0.6.0
Wygląda na to, że obejście problemu JDK-8272564 jest wymagane na poziomie interfejsu 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ąca metody openInputStream
[BuildTool/Lint] ChecksSdkIntAtLeast constructor property
Lint: nieprawidłowe działanie scalania PartialResults
Android Studio nieprawidłowo oznacza wybraną wersję jako nieaktualną.
Element EP AndroidDeprecationInspection.DeprecationFilter nigdy nie jest rejestrowany w pliku android-plugin.xml
wyjaśnienie sprawdzania 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 lint NonConstantResourceId nie może wykryć przypisania stałych wartości z identyfikatora zasobu
nie wyświetla błędu w przypadku identyfikatora widoku
Niemożność zdeserializowania pamięci podręcznej zasobów lint powoduje błąd lint (ale powinno to być ostrzeżenie)
AGP Flamingo Alpha 8 Lint NewApi Desugar Regression
TypedArray#close (interfejs API 31) nie został odsłodzony, ale AS nie wyświetla ostrzeżenia, gdy metoda jest używana w ramach instrukcji try-with-resources
Lint nie sprawdza prawidłowych typów danych w przypadku odbiorców wywołania
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)
NPE / błąd twierdzenia w weryfikatorze ramki CF
Regresja po usunięciu pamięci podręcznej wyszukiwania pól
`:app:minifyVariantWithR8` powoduje wyjątek NullPointerException w AGP 7.4.0-beta02
R8: ClassNotFoundException, gdy ustawiono -allowaccessmodification
Dodanie obsługi odbiorników kontekstu w metadanych
java.lang.VerifyError: Verifier rejected class 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 w kolejce na liście zadań, do której nie można przesłać danych
Kompilowanie kodu Renderscript: duży spadek wydajności podczas aktualizacji AGP z wersji 7.3.1 na 7.4.0

Wtyczka Androida do obsługi Gradle 8.0.1

Rozwiązane problemy
Shrinker (R8)
Błąd: „Brak wymagań dotyczących wersji o podanym identyfikatorze w tabeli” po uaktualnieniu AGP 7.2.2 do 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 8.0.2

Rozwiązane problemy
Shrinker (R8)
R8 nie tworzy kompilacji Compose z wyjątkiem ArrayIndexOutOfBoundsException
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
R8 na AGP 8 powoduje błąd usługi Google Fit
Podanie informacji o pliku źródłowym z nazwami resztek, które pokrywają się z nazwami wejściowymi, nie jest prawidłowo wyświetlane