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

Wtyczka Androida do obsługi Gradle w wersji 8.3.0 to duża aktualizacja, która zawiera wiele nowych funkcji i ulepszeń.

Zgodność

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

Wersja minimalna Wersja domyślna Uwagi
Gradle 8.4 8.4 Więcej informacji znajdziesz w sekcji Aktualizowanie Gradle.
SDK Build Tools 34.0.0 34.0.0 Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK.
NDK Nie dotyczy 25.1.8937393 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 17 17 Więcej informacji znajdziesz w artykule o ustawianiu wersji JDK.

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

Wersje poprawek

Oto lista wersji poprawek w Android Studio Iguana i wtyczce Androida do obsługi Gradle 8.3.

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

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

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

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

Obsługa katalogów wersji Gradle

Android Studio obsługuje oparte na TOML katalogi wersji Gradle, czyli funkcję, która umożliwia zarządzanie zależnościami w jednym centralnym miejscu i udostępnianie zależności 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 w 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 w systemie 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 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 znajduje się menu, w którym wyświetlane są 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 Project Structure (Struktura projektu), przejdź do modułu i zależności, które chcesz edytować, a następnie zaktualizuj pole Requested Version (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 Project Structure, 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 formacie 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 settings.gradlepliku i używać jego zależności w projekcie.

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

  • Asystent Firebase dodaje zależności bezpośrednio w skryptach kompilacji: Asystent Firebase dodaje zależności bezpośrednio do skryptów kompilacji, a nie 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 komputerach Mac) nie powoduje przejścia do plików kompilacji, w których używana jest ta zmienna.

  • Okno Struktura projektu w Android 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 wyświetlany jest tylko plik katalogu aplikacji. Możesz użyć kompozytowej wersji, ale musisz bezpośrednio edytować jej plik TOML.

Dodatkowe informacje o pakietach SDK: problemy związane ze zgodnością z zasadami

Android Studio wyświetla ostrzeżenia narzędzia lint w plikach build.gradle.ktsbuild.gradle oraz w oknie struktury 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óra nie jest obsługiwana przez bieżącą wersję Androida Studio. Jeśli to możliwe, sugeruje też przejście na wersję Androida Studio, która obsługuje compileSdkużywane w projekcie. Pamiętaj, że aktualizacja Androida Studio może wymagać aktualizacji AGP. AGP wyświetla też ostrzeżenie w oknie narzędzia Build, jeśli compileSdk używany przez projekt nie jest obsługiwany przez bieżącą wersję AGP.

Zmiany w działaniu narzędzia Lint

Od wersji 8.3.0-alpha02 wtyczki Androida do obsługi Gradle podczas uruchamiania narzędzia lint w module są wykonywane oddzielne zadania analizy lint dla głównych i testowych komponentów modułu. Przyczyną tej zmiany jest zwiększenie 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 mniejsza i zawiera tylko wpisy folderu res, do których odwołuje się kod.

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

Rozwiązane problemy

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] ./gradlew test 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 uruchamiane podczas drugiej i kolejnych kompilacji.
Nie udało się wykonać zadania „:app:mergeReleaseClasses” po zaktualizowaniu AGP z 8.0.2 do 8.1.0
[Gradle 8.4][upgrade] Niepowodzenie testu integracji po uaktualnieniu z powodu użycia wycofanej funkcji we wtyczce Gradle do obsługi Kotlin
Nie sprawdzaj istnienia plików nakładki manifestu podczas fazy konfiguracji
Uszkodzony link do dokumentacji Gradle w przypadku błędu MergeJavaResWorkAction
Gradle 8.1 powoduje przerwanie buforowania 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][upgrade] Operacja na pliku podczas konfiguracji w ProcessJavaResTask powoduje przerwanie buforowania konfiguracji
Interfejs API wariantu do pobierania tabeli symboli (R.txt)
Samodzielna wtyczka Lint nie obsługuje prawidłowo zależności gradleApi()
Słaba jakość dokumentacji kDocs w przypadku klas i 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][upgrade] 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][upgrade] 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 z instrumentacją, 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 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 zadaniami exportReleaseConsumerProguardFiles i extractProguardFiles powoduje błędy kompilacji
`variant.unitTest.jniLibs.addGeneratedSourceDirectory` nie wydaje się nic 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 Uruchom jest opóźniony o kilka sekund (tworzenie specyfikacji)
AGP 8.3.0-alpha11 generuje 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 funkcję: promowanie com.android.build.api.extension.impl.CURRENT_AGP_VERSION do publicznego interfejsu API
Menedżer SDK 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
Wariant wtyczki niestandardowej AGP 7.4 do przekształcenia dla wszystkich zgłaszających wyjątek duplikatu wpisu: META-INF/MANIFEST.MF
obsługiwać nowe tagi 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
Narzędzie [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
Czy optymalizacje działają nawet w przypadku D8?
Lint
[Lint] TranslucentViewDetector powoduje awarię funkcji filterIncident i generuje nieprawidłowe wyniki
TranslucentViewDetector powinien akceptować wartość „behind”
Narzędzie Android Lint zgłasza błąd w bibliotece KMP z komunikatem „property 'variantInputs.name' doesn't have a configured value.” (właściwość „variantInputs.name” nie ma skonfigurowanej wartości).
TranslucentViewDetector zgłasza nieprawidłową linię w pliku manifestu
lintDebug fałszywie zgłasza ostrzeżenia UseTomlInstead podczas korzystania z zależności projektu
Nieoczekiwane problemy z innego projektu wykryte przez narzędzie Android Lint
Sprawdzanie LINT – fałszywe wykrywanie nieużywanych zasobów w przypadku powiązania i detektora kliknięć
Nie udało się wczytać niestandardowego pliku JAR sprawdzania lint: węzła nie można przekształcić w węzeł drzewa
Lint visitAnnotationUsage nie jest wywoływany w przypadku użycia klas z adnotacjami w deklaracjach zmiennych
Lint w wersji 31.0.2 zwraca błąd java.util.NoSuchElementException: Array is empty.
Brak ostrzeżenia Lint o tym, że kotlin.text.MatchNamedGroupCollection#get(String) wymaga API 26
lint:TypographyQuotes false negatives: more than one escaped apostrophe are ignored
AGP 8.0.2 lint InvalidId detector false positive
Problemy LintError dodane do linii bazowych Lint
Szybka poprawka Lint 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
Lint visitAnnotationUsage nie jest wywoływany w przypadku użycia klas z adnotacjami 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 Lint
Błąd lint DuplicatePlatformClasses z zależności testImplementation
Shrinker (R8)
R8 nie działa po uaktualnieniu z AGP 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 AGP 8.2.0
Android – R8 powoduje awarię podklasy LinearLayoutManager
Błąd środowiska wykonawczego R8 w wersji 8.2.33 „java.lang.VerifyError: Bad type on operand stack” po uaktualnieniu
[R8 8.3.21] R8 8.3.21 jest o 1,57 MB większa niż R8 8.1.56
[R8 8.3.21] R8 8.3.21 jest o 1,57 MB większa niż R8 8.1.56
class.getInterfaces() zwraca pustą wartość
Test SimpleKotlinEnumUnboxingTest kończy się niepowodzeniem na bocie kotlin_dev

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 zadaniu MergeJavaResourcesTask
Integracja z Lint
Lint nie może rozwiązać typów zestawów źródeł równorzędnych w AGP 8.3.0-rc02

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 niepotrzebnych elementów może wystąpić zakleszczenie
AGP 8.3 przerywa zadanie zipApksFor
Integracja z Lint
Lint nie może rozróżnić zależności KMP