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 różne nowe funkcje i ulepszenia.

Zgodność

Wersja minimalna Wersja domyślna Notatki
Gradle z Androidem 8.0 z Androidem 8.0 Więcej informacji znajdziesz w artykule na temat aktualizowania Gradle.
Narzędzia do tworzenia pakietów 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 znajduje się lista poprawek dla 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 informacjach o zamkniętych problemach z Android Studio 2022.2.1.

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

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

Rozwiązane problemy
Błąd: „Brak wymogu wersji z podanym identyfikatorem w tabeli” po uaktualnieniu AGP 7.2.2 -> 7.4.0
R8 NullPointerException at markTypeAsLive AGP 7.4.1
[R8 4.0.53] Błąd weryfikacji klasy nieuprawnionej w Androidzie 11

Ważna zmiana: skrypt kompilacji na poziomie modułu wymaga przestrzeni 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 w wersji od AGP 7.3. Więcej informacji znajdziesz w artykule o ustawianiu przestrzeni nazw.

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

  • Poprzednie wersje pakietu AGP w niektórych przypadkach nieprawidłowo ustalają testową przestrzeń nazw na podstawie głównej przestrzeni nazw lub identyfikatora aplikacji. Asystent uaktualniania AGP zablokuje uaktualnienie, jeśli stwierdzi, że główna i testowa przestrzeń nazw Twojego projektu są taka sama. Jeśli uaktualnienie jest zablokowane, musisz ręcznie zmienić testNamespace i odpowiednio zmodyfikować kod źródłowy.
  • Gdy zmienisz przestrzeń nazw testu, może się zdarzyć, że kod się skompiluje, ale testy zdemontowane zakończą się niepowodzeniem w czasie działania. Może się tak zdarzyć, jeśli kod źródłowy testu instrumentu odwołuje się do zasobu zdefiniowanego zarówno w źródle androidTest, jak i w aplikacji.

Więcej informacji znajdziesz w komentarzu nr 19.

Niezbędne zmiany: domyślne wartości opcji kompilacji

Aby poprawić wydajność kompilacji, od wersji AGP 8.0 domyślne wartości tych flag zmieniły się. Aby uzyskać pomoc w dostosowywaniu kodu pod kątem niektórych z tych zmian, użyj Asystenta uaktualniania AGP (Narzędzia > Asystent uaktualniania AGP). Asystent uaktualniania przeprowadzi Cię przez proces aktualizowania kodu, aby dostosować go do nowego działania, lub ustawienia flag w celu zachowania poprzedniego działania.

Zgłoś Nowa wartość domyślna Poprzednia wartość domyślna Notatki
android.defaults.buildfeatures.buildconfig false true AGP 8.0 nie generuje domyślnie elementu BuildConfig. Określ tę opcję za pomocą DSL w projektach, w których jest potrzebna.
android.defaults.buildfeatures.aidl false true AGP 8.0 nie włącza domyślnie obsługi AIDL. Określ tę opcję za pomocą DSL w projektach, w których jest 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. Określ tę opcję za pomocą DSL w projektach, w których jest potrzebna. Zamierzamy usunąć tę flagę w wersji AGP 9.0.
android.nonFinalResIds true false AGP 8.0 domyślnie generuje klasy R z polami, które nie są ostateczne.
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 artykule o trybie całego ruchu 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 interfejs AGP wyświetli ostrzeżenia.

Zgłoś Wymuszona wartość Notatki
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 generuje ostrzeżenie, jeśli wykryje rozwiązanie konfiguracji na etapie konfiguracji, ponieważ negatywnie wpływa na czas konfiguracji Gradle.
android.r8.failOnMissingClasses true Nieudane kompilacje AGP 8.0 korzystające z R8 w przypadku braku klas zapewniają lepszą optymalizację DEX. Aby rozwiązać ten problem, dodaj brakujące biblioteki lub -dontwarn reguły Keep. Więcej informacji znajdziesz w artykule o brakujących ostrzeżeniach klas w filtrze R8.
android.testConfig.useRelativePath true Gdy w testach jednostkowych włączona jest obsługa zasobów, zasobów i plików manifestu Androida, AGP 8.0 generuje plik test_config.properties zawierający tylko ścieżki względne. Dzięki temu testy jednostkowe Androida zawsze mogą korzystać z pamięci podręcznej kompilacji Gradle.
android.useNewJarCreator true AGP używa biblioteki Zipflinger do tworzenia plików JAR, aby zwiększyć wydajność kompilacji.
android.bundletool.includeRepositoriesInDependencyReport true Jeśli włączysz dodawanie informacji o zależności od SDK w pakietach aplikacji na Androida i plikach APK, AGP 8.0 doda do tych informacji listę repozytoriów projektów. Więcej informacji znajdziesz w artykule o zależności 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 shinkera zasobów. Nowy ograniczanie zasobów zapewnia obsługę funkcji dynamicznych.
android.enableSourceSetPathsMap true Służy do obliczania mapowań ścieżek względnych zasobów, dzięki czemu kompilacje Gradle są częściej aktualizowane.
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 usługi android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true AGP 8.0 domyślnie nie tworzy komponentu SoftwareKomponent. Zamiast tego AGP tworzy komponenty SoftwareKomponent tylko dla wersji skonfigurowanych do publikowania z użyciem publikowania DSL.

Nowa flaga stabilnej dla profilu wykonania

AGP zawiera nową flagę android.settings.executionProfile. Za pomocą tej flagi możesz zastąpić domyślny profil wykonania SettingsExtension. Więcej informacji znajdziesz w dokumentacji wtyczki do ustawień.

Podgląd flag eksperymentalnych znajdziesz w informacjach o wersji testowej.

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

Jeśli w skryptach kompilacji używasz DSL Kotlina 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

Począwszy od Android Studio Flamingo, Analizator kompilacji ma nowy domyślny widok zadań, które wpływają na czas trwania kompilacji. Jeśli Twój projekt korzysta z interfejsu 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 lub Dexing są grupowane, a następnie sortowane według czasu trwania kompilacji. Dzięki temu łatwo zorientujesz się, która kategoria ma największy wpływ na czas kompilacji. Po rozwinięciu kategorii zobaczysz 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-alfa09 wprowadza nową wtyczkę ustawień. Wtyczka ustawień umożliwia scentralizowanie konfiguracji globalnych (konfiguracji, które dotyczą wszystkich modułów) w jednym miejscu, dzięki czemu nie musisz kopiować i wklejać konfiguracji w wielu modułach. Dodatkowo za pomocą wtyczki ustawień możesz tworzyć profile wykonania narzędzia lub różne instrukcje uruchamiania narzędzia i 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. Profil wykonania określa sposób uruchamiania narzędzia. W zależności od środowiska możesz wybrać różne profile wykonywania. W profilu wykonywania możesz ustawić argumenty JVM dla narzędzia i skonfigurować je tak, aby uruchamiało się w osobnym procesie. Obecnie obsługiwane jest tylko narzędzie R8.

Utwórz profile wykonywania i ustaw domyślny profil wykonywania w pliku 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 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 pozwala 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

Do korzystania z pakietu AGP 8.0 wymagany jest pakiet JDK 17

Jeśli do tworzenia aplikacji używasz wtyczki Androida do obsługi Gradle w wersji 8.0, do uruchomienia Gradle jest wymagany pakiet JDK 17. Android Studio Flamingo obejmuje pakiet JDK 17 i konfiguruje narzędzie Gradle tak, aby domyślnie używało go. Oznacza to, że większość użytkowników Androida Studio nie musi wprowadzać żadnych zmian w konfiguracji w swoich projektach.

Jeśli chcesz 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 AGP niezależnego od Android Studio, uaktualnij wersję JDK, ustawiając JAVA_HOME zmienną środowiskową lub -Dorg.gradle.java.home opcję wiersza poleceń jako katalog instalacyjny pakietu JDK 17.