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 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 Android do obsługi Gradle. 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 Android Studio 2022.2.1 – problemy zamknięte.

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 aktualizacji 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 zamiast niż w pliku manifestu. Możesz zacząć używać właściwości DSL namespace od wersji AGP 7.3. Więcej informacji: Ustaw przestrzeń nazw.

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

  • Poprzednie wersje AGP ustalają testową przestrzeń nazw z głównej przestrzeni nazw lub Identyfikator aplikacji, w niektórych przypadkach może być nieprawidłowy. 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ć testNamespace i odpowiednio zmodyfikuje kod źródłowy.
  • Gdy zmienisz testową przestrzeń nazw, możliwe, że Twój kod się skompiluje ale testy zdemonstrowane koń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 w obu androidTest i źródła aplikacji.

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

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

Od wersji AGP 8.0 domyślne wartości tych flag zmieniły się na i zwiększają wydajność kompilacji. Aby uzyskać pomoc w dostosowywaniu kodu, tak aby obsługiwał niektóre tych zmian, użyj Asystenta uaktualnień AGP (Narzędzia > Asystent aktualizacji AGP). Asystent uaktualniania przeprowadzi Cię przez zaktualizowanie kodu w celu dostosowania go do nowego zachowania lub ustawienie flag poprzedniego sposobu działania.

Zgłoś Nowa wartość domyślna Poprzednia wartość domyślna Uwagi
android.defaults.buildfeatures.buildconfig false true AGP 8.0 nie generuje domyślnie elementu BuildConfig. Potrzebujesz aby określić 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. Musisz określić za pomocą DSL w projektach, w których jest potrzebna. Ta flaga jest które powinny zostać usunięte 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 planujemy usunąć tę flagę w wersji AGP 9.0.
android.nonFinalResIds true false AGP 8.0 generuje R klasy 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: Tryb 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 wartość AGP wyświetla ostrzeżenia.

Zgłoś Wymuszona wartość Uwagi
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 generuje ostrzeżenie, jeśli wykryje rozdzielczość konfiguracji etapie konfiguracji, ponieważ negatywnie wpływa na konfigurację Gradle razy.
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ł. Aby dowiedzieć się więcej, zobacz Brak ostrzeżeń dotyczących zajęć w filtrze R8.
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. Do więcej informacji, patrz Informacje 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 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. Wymagane android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true AGP 8.0 domyślnie nie tworzy komponentu SoftwareKomponent. Zamiast tego tworzy Komponenty SoftwareKomponenty tylko dla wersji skonfigurowanych do opublikowania przy użyciu DSL do publikacji.

Nowa stabilna flaga 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ć podgląd flag eksperymentalnych, zobacz informacjami o wersji testowej.

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

Jeśli w skryptach kompilacji używasz biblioteki DSL Gradle'a Kotlin, pamiętaj, że Android Studio i AGP 8.0 nie obsługują przypisywania właściwości eksperymentalnej za pomocą funkcji =. 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ą zgrupowane, a następnie sortowane według czasu trwania kompilacji. Dzięki temu możesz łatwo aby wiedzieć, 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 Pogrupuj według.

Kategorie zadań Analizatora kompilacji.

Nowa wtyczka ustawień

AGP 8.0.0-alfa09 wprowadza nową wtyczkę 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 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ć domyślny profil, wybierz inny za pomocą właściwość android.experimental.settings.executionProfile w Plik 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. Na przykład, jeśli masz przepływ pracy w trybie ciągłej integracji możesz użyć wiersza poleceń, by zmienić profil wykonywania zmień plik 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, musisz mieć pakiet 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 w wersji 17 lub nowszej.

Jeśli używasz AGP niezależnego od Android Studio, uaktualnij JDK do Ustawianie: JAVA_HOME zmienna środowiskowa lub -Dorg.gradle.java.home opcja wiersza poleceń do katalogu instalacyjnego JDK 17.