Wtyczka Androida do obsługi Gradle w wersji 8.0.0 to duża wersja oferująca wiele nowych funkcji i udoskonaleń.
Zgodność
Wersja minimalna | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | z Androidem 8.0 | z Androidem 8.0 | Aby dowiedzieć się więcej, zobacz aktualizowanie Gradle. |
Narzędzia do kompilacji SDK | 30,0.3 | 30,0.3 | Zainstaluj lub skonfiguruj narzędzia do kompilacji SDK. |
Zestaw NDK | Nie dotyczy | 25.1.8937393 | Zainstaluj lub skonfiguruj inną wersję pakietu NDK. |
JDK | 17 | 17 | Więcej informacji znajdziesz w sekcji na temat ustawiania wersji JDK. |
Wersje poprawek
Poniżej znajduje się lista 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 AGP 8.0.2 znajdziesz w zamkniętych problemach z Androidem Studio 2022.2.1.
Wtyczka Androida do obsługi Gradle 8.0.1 (maj 2023 r.)
Ta drobna aktualizacja zawiera następujące poprawki błędów:
Rozwiązane problemy | |
---|---|
Po uaktualnieniu AGP do wersji 7.2.2 -> 7.4.0 błąd: „Brak wymogu wersji o danym ID w tabeli”
|
|
R8 NullPointerException i markTypeAsLive AGP 7.4.1
|
|
[R8 4.0.53] Błąd weryfikacji klasy na Androidzie 11
|
Zmiana niezbędna: 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ąć korzystać z właściwości DSL namespace
od wersji 7.3. Więcej informacji znajdziesz w artykule Ustawianie przestrzeni nazw.
Podczas migracji do DSL przestrzeni nazw pamiętaj o tych problemach:
- Poprzednie wersje AGP nieprawidłowo ustalają testową przestrzeń nazw z głównej przestrzeni nazw, czyli identyfikatora aplikacji, w niektórych przypadkach nieprawidłowo. Asystent uaktualniania AGP zablokuje uaktualnienie, jeśli wykryje, że główna przestrzeń nazw projektu i przestrzeni nazw testowe są takie same. Jeśli uaktualnienie jest zablokowane, musisz ręcznie zmienić
testNamespace
i odpowiednio zmodyfikować kod źródłowy. - Po zmianie przestrzeni nazw testowej może się zdarzyć, że kod się skompiluje, ale testy z instrumentacją zakończą się niepowodzeniem w czasie działania. Może się tak zdarzyć, jeśli instrumentowany kod źródłowy testu odwołuje się do zasobu zdefiniowanego zarówno w źródle
androidTest
, jak i w źródle aplikacji.
Więcej informacji znajdziesz w problemie nr 191813691 komentarz nr 19.
Zmiany powodujące niezgodność: wartości domyślne opcji kompilacji
Począwszy od AGP 8.0 domyślne wartości tych flag zmieniają się, aby poprawić wydajność kompilacji. Aby uzyskać pomoc w dostosowaniu kodu i uwzględnieniu niektórych z tych zmian, użyj Asystenta uaktualnienia AGP (Narzędzia > Asystent uaktualniania AGP). Asystent uaktualniania przeprowadzi Cię przez proces aktualizowania kodu, aby dostosować go do nowego działania lub flag ustawień, aby zachować poprzedni sposób działania.
Zgłoś | Nowa wartość domyślna | Poprzednia wartość domyślna | Uwagi |
---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
AGP 8.0 domyślnie nie generuje kodu BuildConfig . Musisz określić tę opcję za pomocą DSL w projektach, w których jest potrzebna. |
android.defaults.buildfeatures.aidl |
false |
true |
AGP 8.0 domyślnie nie włącza obsługi AIDL. Tę opcję musisz określić za pomocą DSL w projektach, w których jest potrzebna. Zamierzamy usunąć tę flagę w AGP 9.0. |
android.defaults.buildfeatures.renderscript |
false |
true |
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 potrzebna. Zamierzamy usunąć tę flagę w AGP 9.0. |
android.nonFinalResIds |
true |
false |
AGP 8.0 domyślnie generuje klasy R z polami niekońcowymi. |
android.nonTransitiveRClass |
true |
false |
AGP 8.0 generuje klasy R tylko dla zasobów zdefiniowanych 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 sekcji dotyczącej trybu pełnego 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
, wartość będzie ignorowana, a reguły AGP wyświetlą ostrzeżenia.
Zgłoś | Wymuszona wartość | Uwagi |
---|---|---|
android.dependencyResolutionAtConfigurationTime.warn |
true |
AGP 8.0 generuje ostrzeżenie, jeśli wykryje rozwiązanie konfiguracji na etapie konfiguracji, ponieważ wpływa to negatywnie na czas konfiguracji Gradle. |
android.r8.failOnMissingClasses |
true |
AGP 8.0 kończy się niepowodzeniem w kompilacjach korzystających z R8, jeśli brakuje klas, co zapewnia lepszą optymalizację DEX. Aby rozwiązać ten problem, musisz dodać brakujące biblioteki lub zachować reguły -dontwarn . Więcej informacji znajdziesz w artykule o brakujących ostrzeżeniach dotyczących klas w zmniejszaniu R8. |
android.testConfig.useRelativePath |
true |
Gdy włączona jest obsługa używania zasobów, zasobów i plików manifestu Androida w testach jednostkowych, AGP 8.0 generuje plik test_config.properties zawierający tylko ścieżki względne. Dzięki temu testy jednostkowe Androida zawsze mogą używać pamięci podręcznej kompilacji Gradle. |
android.useNewJarCreator |
true |
Podczas tworzenia plików JAR AGP korzysta z biblioteki Zipflinger, aby zwiększyć wydajność kompilacji. |
android.bundletool.includeRepositoriesInDependencyReport |
true |
Jeśli włączone jest dodawanie informacji o zależnościach SDK w pakietach AAB i plikach APK, AGP 8.0 dodaje też do tych informacji listę repozytoriów projektów. Więcej informacji znajdziesz w artykule Informacje o zależności w Konsoli Play. |
android.enableArtProfiles |
true |
Profile podstawowe są teraz zawsze generowane. Szczegółowe informacje znajdziesz w sekcji Profile podstawowe (w języku angielskim). |
android.enableNewResourceShrinker |
true |
Używaj domyślnie nowej implementacji skrętu zasobów. Nowy reduktor 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 aktualizowane. |
android.cacheCompileLibResources |
true |
Skompilowane zasoby biblioteki mogą być teraz domyślnie przechowywane w pamięci podręcznej, ponieważ Gradle śledzi pliki zasobów w odniesieniu do lokalizacji projektu. Wymaga włączenia android.enableSourceSetPathsMap . |
android.disableAutomaticComponentCreation |
true |
Domyślnie AGP 8.0 nie tworzy żadnego elementu oprogramowania. Zamiast tego AGP tworzy komponenty SoftwareKomponenty tylko w przypadku wariantów, które zostały skonfigurowane do publikowania za pomocą opublikowanego DSL. |
Nowa stabilna flaga profilu wykonywania
AGP zawiera nową flagę android.settings.executionProfile
. Użyj tej flagi, aby zastąpić domyślny profil wykonywania z SettingsExtension
.
Więcej informacji znajdziesz w dokumentacji wtyczki do ustawień.
Aby wyświetlić podgląd flag eksperymentalnych, przeczytaj informacje o wersji testowej.
Przypisanie leniwego elementu Kotlin nie jest obsługiwane
Jeśli w skryptach kompilacji używasz DSL Kotlin od Gradle, pamiętaj, że Android Studio i AGP 8.0 nie obsługują przypisywania właściwości eksperymentalnej za pomocą operatora =
. Więcej informacji o tej funkcji znajdziesz w informacjach o wersji i dokumentacji.
Kategorie zadań Analizatora kompilacji
Od wersji Android Studio Flamingo Analizator kompilacji udostępnia nowy widok domyślny dla zadań, które wpływają na czas kompilacji. Jeśli Twój projekt korzysta z AGP w wersji 8.0 lub nowszej, zamiast wyświetlać zadania pojedynczo, Analizator kompilacji grupuje je według kategorii. Na przykład zadania specyficzne dla zasobów Androida, Kotlin czy Dexing 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 tworzenia. Po rozwinięciu kategorii wyświetla się lista zadań. Aby wyświetlić zadania pojedynczo bez grupowania, użyj menu Pogrupuj według.
Nowa wtyczka ustawień
AGP 8.0.0-alpha09 wprowadza nową wtyczkę ustawień. Wtyczka ustawień umożliwia scentralizowanie konfiguracji globalnych (czyli tych, które mają zastosowanie do wszystkich modułów) w jednym miejscu, dzięki czemu nie trzeba kopiować i wklejać konfiguracji do wielu modułów. Możesz też korzystać z wtyczki do ustawień, aby tworzyć profile wykonania narzędzi lub różne instrukcje uruchamiania danego narzędzia i przełączać się między nimi.
Aby użyć wtyczki do 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 dla niektórych narzędzi. Profil wykonania określa sposób uruchamiania narzędzia. Możesz wybrać różne profile wykonania w zależności od środowiska. W profilu wykonania możesz ustawić argumenty JVM dla narzędzia i skonfigurować je tak, aby uruchamiało się w oddzielnym 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 także ustawić tę właściwość za pomocą wiersza poleceń, aby skonfigurować różne przepływy pracy. Jeśli na przykład korzystasz z przepływu pracy w trybie 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
Wymagany pakiet JDK 17 do korzystania z AGP w wersji 8.0
Jeśli do tworzenia aplikacji używasz wtyczki Androida do obsługi Gradle w wersji 8.0, do uruchomienia Gradle wymagany jest pakiet JDK 17. Android Studio Flamingo w pakiecie JDK 17 i skonfiguruje Gradle tak, aby używała go domyślnie. Oznacza to, że większość użytkowników Android Studio nie musi wprowadzać żadnych zmian w konfiguracji swoich projektów.
Jeśli musisz ręcznie ustawić wersję JDK używaną przez AGP w Android Studio, musisz użyć pakietu JDK w wersji 17 lub nowszej.
Jeśli używasz pakietu AGP niezależnego od Android Studio, uaktualnij JDK, ustawiając zmienną środowiskową JAVA_HOME
lub opcję wiersza poleceń -Dorg.gradle.java.home
na katalog instalacyjny JDK 17.