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 kompilowania 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 -> 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 nieprawidłowo wywnioskowano przestrzeń nazw testu 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ć
testNamespace
i 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 zinstrumentowany 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, aby uwzględnić nowe działanie, lub ustawiania flag, aby zachować poprzednie działanie.
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ą 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ą 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 Missing class warnings in R8 shrinker (Angielski). |
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 opcji 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 wersji i dokumentacji.
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świetlić zadania indywidualnie, bez grupowania, użyj menu Grupuj według.
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 do działania 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żywaną 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 Android Gradle |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dexer (D8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Integracja z lintem |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Shrinker (R8) |
|
Wtyczka Androida do obsługi Gradle 8.0.1
Rozwiązane problemy | ||||
---|---|---|---|---|
Shrinker (R8) |
|
Wtyczka Androida do obsługi Gradle 8.0.2
Rozwiązane problemy | |||||
---|---|---|---|---|---|
Shrinker (R8) |
|