Wtyczka Androida do obsługi Gradle 8.3.0 (luty 2024 r.)

Wtyczka Androida do obsługi Gradle w wersji 8.3.0 to wersja główna, która zawiera wiele nowych funkcji i ulepszeń.

Zgodność

Maksymalny poziom interfejsu API obsługiwany przez wtyczkę Androida do obsługi Gradle w wersji 8.3 to poziom 34. Inne informacje o zgodności:

Wersja minimalna Wersja domyślna Uwagi
Gradle 8.4 8.4 Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilacji pakietu SDK 34.0.0 34.0.0 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 artykule Ustawianie wersji JDK.

Oto nowe funkcje wtyczki Androida do obsługi Gradle w wersji 8.3.

Wersje poprawek

Poniżej znajdziesz listę wersji poprawek w Android Studio Iguana i wtyczce Androida do obsługi Gradle w wersji 8.3.

Android Studio Iguana | 2023.2.1 Patch 2 i AGP 8.3.2 (kwiecień 2024 r.)

Ta niewielka aktualizacja zawiera te poprawki błędów.

Android Studio Iguana | 2023.2.1 Patch 1 i AGP 8.3.1 (marzec 2024 r.)

Ta niewielka aktualizacja zawiera te poprawki błędów.

Obsługa katalogów wersji Gradle

Android Studio obsługuje katalogi wersji Gradle oparte na TOML-u, które umożliwiają zarządzanie zależnościami w jednym centralnym miejscu i udostępnianie ich w modułach lub projektach. Android Studio ułatwia teraz konfigurowanie katalogów wersji dzięki sugestiom edytora i integracji z oknem Struktura projektu. Dowiedz się, jak skonfigurować katalogi wersji Gradle lub przenieść kompilację do katalogów wersji.

Uzupełnianie kodu i nawigacja

Android Studio oferuje uzupełnianie kodu podczas edytowania katalogu wersji w pliku TOML lub dodawania zależności z katalogu wersji do pliku kompilacji. Aby użyć uzupełniania kodu, naciśnij Ctrl+Spacja (Command+Spacja na macOS). Dodatkowo możesz szybko przejść od odwołania do zależności w pliku build.gradle aplikacji do miejsca, w którym jest ono zadeklarowane w katalogu wersji, naciskając Ctrl+B (Command+B na macOS).

Uzupełnianie kodu podczas dodawania zależności

Integracja z oknem Struktura projektu

Jeśli Twój projekt korzysta z katalogu wersji zdefiniowanego w formacie pliku TOML, możesz edytować zdefiniowane w nim zmienne w oknie Struktura projektu w widoku Zmienne (Plik > Struktura projektu > Zmienne) w Android Studio. W przypadku każdego katalogu wersji dostępne jest menu, w którym są wymienione zmienne z tego katalogu. Aby edytować zmienną, kliknij jej wartość i zastąp ją nową. Gdy zapiszesz te zmiany, plik TOML zostanie odpowiednio zaktualizowany.

Zmienne z katalogu wersji w oknie Struktura projektu

Zależności możesz też aktualizować w oknie Struktura projektu w widoku Zależności (Plik > Struktura projektu > Zależności). Aby zaktualizować wersje za pomocą okna Struktura projektu, przejdź do modułu i zależności, które chcesz edytować, a następnie zaktualizuj pole Wersja wymagana. Gdy zapiszesz te zmiany, plik TOML zostanie odpowiednio zaktualizowany. Pamiętaj, że jeśli wersja zależności została zdefiniowana za pomocą zmiennej, zaktualizowanie jej w ten sposób spowoduje zastąpienie zmiennej zakodowaną na stałe wartością. Pamiętaj też, że usunięcie zależności z pliku kompilacji, niezależnie od tego, czy używasz okna Struktura projektu, nie powoduje usunięcia zależności z katalogu wersji.

Zależności z katalogu wersji w oknie Struktura projektu

Znane problemy i ograniczenia

Poniżej znajdziesz znane problemy i ograniczenia związane z obsługą katalogów wersji Gradle w Android Studio.

  • Błąd podświetlania deklaracji aliasów wtyczek w plikach skryptów Kotlin: gdy dodasz deklarację wtyczki w formie alias(libs.plugins.example), edytor doda czerwone podkreślenie pod częścią libs. Jest to znany problem w Gradle w wersji 8.0 i starszych, który zostanie rozwiązany w przyszłej wersji Gradle.

  • Android Studio obsługuje tylko katalogi wersji w formacie TOML: obecnie funkcja autouzupełniania kodu, nawigacji i okna dialogowego Struktura projektu w Android Studio jest dostępna tylko w przypadku katalogów wersji zdefiniowanych w pliku w formacie TOML. Możesz jednak dodać katalog wersji bezpośrednio w pliku settings.gradle i używać jego zależności w projekcie.

  • Nawigacja w plikach kompilacji KTS nie jest obsługiwana: przechodzenie do definicji zależności w katalogu wersji za pomocą kombinacji Ctrl+kliknięcie (Command+kliknięcie na macOS) nie jest jeszcze obsługiwane w przypadku plików kompilacji napisanych za pomocą skryptu Kotlin.

  • Firebase Assistant dodaje zależności bezpośrednio w skryptach kompilacji: Firebase Assistant dodaje zależności bezpośrednio do skryptów kompilacji zamiast za pomocą katalogów wersji.

  • Funkcja „Znajdź użycia” nie jest obsługiwana: znajdowanie użyć zmiennej katalogu wersji w innych plikach kompilacji nie jest jeszcze obsługiwane, niezależnie od tego, czy plik kompilacji jest w KTS czy Groovy. Oznacza to, że kliknięcie definicji zmiennej w katalogu wersji z naciśniętym klawiszem Control (Command na macOS) nie powoduje przejścia do plików kompilacji, w których jest używana ta zmienna.

  • Okno Struktura projektu w Androidzie Studio wyświetla wiele plików katalogu, jeśli znajdują się one w folderze głównym gradle, ale nie wyświetla katalogów dla kompilacji złożonej. Jeśli na przykład masz 2 pliki katalogu – jeden dla aplikacji, a drugi dla kompilacji złożonej – w oknie Struktura projektu będzie widoczny tylko plik katalogu aplikacji. Możesz użyć kompilacji kompozytowej, ale musisz bezpośrednio edytować jej plik TOML.

Dodatkowe informacje o pakiecie SDK: problemy związane z zasadami

Android Studio wyświetla ostrzeżenia lintera w plikach build.gradle.ktsbuild.gradle oraz w oknie Struktura projektu w przypadku publicznych pakietów SDK, które naruszają zasady Google Play i są wymienione na platformie Google Play SDK Index. Zaktualizuj wszystkie zależności, które naruszają zasady Google Play, ponieważ te naruszenia mogą w przyszłości uniemożliwić Ci publikowanie w Konsoli Google Play. Ostrzeżenia o naruszeniu zasad uzupełniają ostrzeżenia o nieaktualnej wersji wyświetlane przez Android Studio.

Obsługa wersji compileSdk w Android Studio

Android Studio wyświetli ostrzeżenie, jeśli Twój projekt używa compileSdk, który nie jest obsługiwany przez bieżącą wersję Androida Studio. Jeśli to możliwe, sugeruje też przejście na wersję Androida Studio, która obsługuje compileSdk używany w projekcie. Pamiętaj, że aktualizacja Androida Studio może wymagać też zaktualizowania wtyczki Androida do obsługi Gradle. AGP wyświetla też ostrzeżenie w oknie narzędzia Build, jeśli compileSdk używany w projekcie nie jest obsługiwany przez bieżącą wersję AGP.

Zmiany w działaniu lintera

Od wersji 8.3.0-alpha02 wtyczki Androida do obsługi Gradle podczas uruchamiania lintera w module są wykonywane oddzielne zadania analizy lintowania dla głównych i testowych komponentów modułu. Przyczyną tej zmiany jest chęć zwiększenia skuteczności. Aby przywrócić wcześniejsze działanie, ustaw wartość android.experimental.lint.analysisPerComponent=false w pliku gradle.properties.

Domyślnie włączone precyzyjne zmniejszanie zasobów

Precyzyjne zmniejszanie zasobów, które usuwa nieużywane wpisy z pliku resources.arsc i nieużywane pliki zasobów, jest domyślnie włączone. Gdy to zmniejszanie jest włączone, tabela zasobów jest zmniejszana i w pliku APK uwzględniane są tylko wpisy folderów, do których odwołuje się res.

Aby wyłączyć precyzyjne zmniejszanie zasobów, ustaw w pliku gradle.properties projektu wartość android.enableNewResourceShrinker.preciseShrinking jako false.

Rozwiązane problemy

Wtyczka Androida do obsługi Gradle w wersji 8.3.2

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
W AGP 8.3 z włączonym usuwaniem cukru syntaktycznego może wystąpić zakleszczenie
AGP 8.3 powoduje błąd zadania zipApksFor
Integracja z linterem
Linter nie może rozróżnić zależności KMP

Wtyczka Androida do obsługi Gradle w wersji 8.3.1

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Problem z obsługą przyrostowych danych wejściowych w przypadku zadania MergeJavaResourcesTask
Integracja z linterem
Linter nie radzi sobie z typami zbiorów źródeł równorzędnych w AGP 8.3.0-rc02

Wtyczka Androida do obsługi Gradle w wersji 8.3.0

Rozwiązane problemy
Wtyczka Androida do obsługi Gradle
Pamięć podręczna kompilacji jest zbędna w przypadku zadania PackageForUnitTest
[AGP 8.1.0] Test ./gradlew kończy się niepowodzeniem z błędem „Unable to find manifest output”, jeśli zarówno splits.abi.isEnable, jak i testOptions.unitTests.isIncludeAndroidResources mają wartość true
Tworzenie modelu AGP kończy się niepowodzeniem w przypadku zagnieżdżonych kompozytowych kompilacji Gradle
Zmniejszanie zasobów powoduje zniekształcenie identyfikatorów zasobów, co prowadzi do awarii w czasie działania
Sprawdzanie minimalnej wersji Gradle nie jest przeprowadzane podczas drugiej i kolejnych kompilacji.
Nie udało się wykonać zadania „:app:mergeReleaseClasses” po zaktualizowaniu AGP z wersji 8.0.2 do 8.1.0
[Gradle 8.4][uaktualnienie] Błąd testu integracji po uaktualnieniu z powodu użycia wycofanej funkcji we wtyczce Gradle do obsługi języka Kotlin
Pominięcie sprawdzania istnienia plików nakładki manifestu podczas fazy konfiguracji.
Uszkodzony link do dokumentacji Gradle dotyczący błędu MergeJavaResWorkAction
Gradle 8.1 przerywa buforowanie konfiguracji z powodu pliku .gradle/.android/analytics.settings
AGP nie powinien używać ProjectComponentIdentifier.projectPath bez ProjectComponentIdentifier.build
Zmniejsz lub usuń rejestrowanie na poziomie informacji w przypadku AGP „Analytics other plugin to proto: ...”
[Gradle 8.4][uaktualnienie] Operacja na pliku podczas konfiguracji w ProcessJavaResTask przerywa buforowanie konfiguracji
Interfejs API wersji do pobierania tabeli symboli (R.txt)
Samodzielna wtyczka lintera nie obsługuje prawidłowo zależności gradleApi()
Słaba jakość dokumentacji kDocs w przypadku klas/właściwości AGP. „VariantOutput.enable” sugeruje, że należy go zastąpić „VariantOutput.enable”
AGP 8.3.0-alpha02 nie może instalować profili wersji na hostach z systemem Windows
Wymuszanie „android.enableDexingArtifactTransform=true”
[Gradle 8.4][uaktualnienie] Niepowodzenie testu integracji po uaktualnieniu z powodu obsługi plików w fazie konfiguracji
AGP 8.3.0-alpha-02 – „Error: Failed to deserialize cached resource repository.”
[Gradle 8.4][uaktualnienie] Niepowodzenie testu integracji po uaktualnieniu z powodu obsługi plików w fazie konfiguracji usługi TestLabBuildService
AGP 8.1.0 odinstalowuje aplikację po uruchomieniu testów instrumentalnych, a wersja 7.4.2 tego nie robi
Przekształcenie pliku APK powoduje błąd w przypadku zadania ListingFileRedirectTask
Przekształcanie artefaktu ASSETS powoduje podanie nieprawidłowych lokalizacji wejściowych/wyjściowych
Promowanie ustawienia android.experimental.r8.dex-startup-optimization=true jako domyślnego
Migracja do nowego interfejsu API do wyrównywania konfiguracji Gradle
Kompilacja zasobów nie powiodła się, gdy kompilator Kotlin próbował zaktualizować się do wersji IDEA 21.3
Reaktywne wywołanie get() za pomocą interfejsu Artifacts API
Przeniesienie właściwości AGP „android.lint.printStackTrace” do wersji stabilnej
AGP 8.1.0: funkcja dynamiczna: niejawna zależność między exportReleaseConsumerProguardFiles a extractProguardFiles powoduje błędy kompilacji
„variant.unitTest.jniLibs.addGeneratedSourceDirectory” wydaje się nic nie robić
Aktualizacja parsera XML używanego w AGP w celu zapewnienia zgodności z Gradle 8.4
Pakiet AGP 8.0.1 jacoco instrument nie działa
HEDGEHOG REGRESSION: przycisk uruchamiania jest opóźniony o kilka sekund (tworzenie specyfikacji)
AGP 8.3.0-alpha11 tworzy plik APK wersji, który ulega awarii podczas uruchamiania z błędem android.content.res.Resources$NotFoundException
Przeniesienie właściwości AGP „android.lint.printStackTrace” do wersji stabilnej
Prośba o dodanie funkcji: promowanie com.android.build.api.extension.impl.CURRENT_AGP_VERSION do publicznego interfejsu API
SDK Manager nie powinien już wysyłać spamu z informacjami o dzienniku do stdout
DexArchiveBuilderTaskDelegate nie powiodło się w przypadku modułu biblioteki tylko z zasobami
Błąd duplikatu wpisu META-INF/MANIFEST.MF przy próbie transformacji wszystkich wariantów przez niestandardową wtyczkę w AGP 7.4
Obsługa nowych tagów pliku manifestu
Link do „odłączonych projektów” w ustawieniach Studio prowadzi w niewłaściwe miejsce.
Podaj opcje uwzględniania wygenerowanych źródeł w dokumentacji Javadoc i pliku SourceJar
Potrzebujesz szybkiego rozwiązania problemu z niezgodnością między compileSdk a zależnością z minCompileSdkVersion
[Gradle] tools:overrideLibrary powinno obsługiwać gwiazdkę (*)
Zawieszanie się interfejsu podczas edytowania pliku manifestu
Nie można ustawić wersji JaCoCo w AGP 8.2.0
Zadanie instalacji wtyczki Androida do obsługi Gradle w wersji 8.2.0 kończy się niepowodzeniem w projekcie, który korzysta z dynamicznych funkcji
Zadanie instalacji wtyczki Androida do obsługi Gradle w wersji 8.2.0 kończy się niepowodzeniem w projekcie, który korzysta z dynamicznych funkcji
Dexer (D8)
[desugared library] Biblioteka desugared w wersji 2.1 jest niezgodna z poprzednimi wersjami R8
Optymalizacje wykonywane już na poziomie kompilatora D8?
Linter
[Linter] Detektor TranslucentViewDetector ulega awarii w funkcji filterIncident i powoduje, że linter zwraca nieprawidłowy wynik
TranslucentViewDetector powinien akceptować wartość „behind”
Android Lint zgłasza nie działa w przypadku biblioteki KMP, gdy „właściwość 'variantInputs.name' nie ma skonfigurowanej wartości”.
Detektor TranslucentViewDetector zgłasza nieprawidłowy wiersz w pliku manifestu
lintDebug fałszywie zgłasza ostrzeżenia UseTomlInstead podczas korzystania z zależności projektu
Nieoczekiwane problemy z innego projektu zgłoszone przez Android Lint
Fałszywe wykrywanie niewykorzystanego zasobu w linterze w przypadku powiązania i detektora kliknięć
Nie udało się wczytać pliku JAR z niestandardowymi regułami lintowania: węzła Node nie można rzutować na TreeNode
Brak wywołania visitAnnotationUsage dla klas z adnotacjami użytych w deklaracjach zmiennych
Linter w wersji 31.0.2 nie działa z powodu błędu java.util.NoSuchElementException: Array is empty.
Brak ostrzeżenia lintera o tym, że kotlin.text.MatchNamedGroupCollection#get(String) wymaga API 26
Wyniki fałszywie negatywne w regule lint:TypographyQuotes: więcej niż jeden apostrof poprzedzony znakiem ucieczki jest ignorowany
Fałszywy alarm detektora InvalidId w linterze w AGP 8.0.2
Problemy LintError dodane do linii bazowych lintera
Szybka poprawka lintera nie działa i powoduje błąd IDE
Niespójne niepowodzenie testu z powodu częściowej analizy
Nieprawidłowe wyróżnienie ostrzeżenia, które jest fałszywie pozytywne
Brak wywołania visitAnnotationUsage dla klas z adnotacjami użytych w deklaracjach zmiennych
Procesor nieużywanych zasobów może usunąć plik kompilacji Gradle
Sprawdzanie kodu za pomocą narzędzia NewApi nie rozumie pola końcowego „isAtleastU() && otherCondition()”
StackOverflow z „LintClient.getSdkHome”
Android Studio / Lint nie informuje, kiedy zależności „platform” są nieaktualne
Błąd: brak sugestii dotyczącej aktualizacji zależności Firebase-bom
Struktura projektu (i Gradle (?)) nie wykrywa zależności Firebase BOM, które można uaktualnić do nowszej wersji.
Integracja z linterem
Błąd lintera DuplicatePlatformClasses z zależności testImplementation
Shrinker (R8)
R8 nie działa po uaktualnieniu AGP z wersji 8.0.2 do 8.1.0
isShrinkResources nadmiernie optymalizuje w wersjach 8.3.0-alpha11–alpha14
Awaria pakietu SDK Flurry w R8 w przypadku wtyczki Androida do obsługi Gradle 8.2.0
Android – R8 powoduje awarię podklasy LinearLayoutManager
R8 w wersji 8.2.33, błąd wykonania „java.lang.VerifyError: Bad type on operand stack” po uaktualnieniu
[R8 8.3.21] R8 8.3.21 jest o 1,57 MB większy niż R8 8.1.56
[R8 8.3.21] R8 8.3.21 jest o 1,57 MB większy niż R8 8.1.56
class.getInterfaces() zwraca pustą wartość
Test SimpleKotlinEnumUnboxingTest kończy się niepowodzeniem na bocie kotlin_dev