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 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.

Kategorie zadań Analizatora kompilacji.

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.