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 interfejsu API obsługiwany przez wtyczkę Gradle dla Androida w wersji 8.3 to poziom 34. Oto inne informacje o zgodności:

Minimalna wersja Wersja domyślna Uwagi
Gradle 8.4 8.4 Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilowania pakietu SDK 34.0.0 34.0.0 Zainstaluj lub skonfiguruj narzędzia do kompilowania pakietu SDK.
NDK Nie dotyczy 25.1.8937393 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 17 17 Więcej informacji znajdziesz w artykule Ustawianie wersji JDK.

Wtyczka Androida do obsługi Gradle w wersji 8.3 zawiera nowe funkcje.

Wersje poprawek

Poniżej znajduje się lista 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 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 katalogi wersji Gradle oparte na formacie TOML. Jest to funkcja, która umożliwia zarządzanie zależnościami w jednym centralnym miejscu i udostępnianie ich w ramach modułów lub projektów. 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 jak przenieść kompilację do katalogów wersji.

Uzupełnianie kodu i nawigacja

Android Studio oferuje uzupełnianie kodu podczas edytowania katalogu wersji w formacie pliku TOML lub dodawania zależności z katalogu wersji do pliku kompilacji. Aby korzystać z uzupełniania kodu, naciśnij Ctrl + Spacja (Command + Spacja w systemie macOS). Dodatkowo możesz szybko przejść od odwołania do zależności w pliku build.gradle aplikacji do miejsca, w którym jest ona zadeklarowana w katalogu wersji. Aby to zrobić, naciśnij Ctrl + B (Command + B na komputerze Mac).

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 Zmienna (Plik > Struktura projektu > Zmienne) w Android Studio. W przypadku każdego katalogu wersji jest menu, w którym znajdziesz listę zmiennych z tego katalogu. Aby edytować zmienną, kliknij jej wartość i zastąp ją inną. Po zapisaniu tych zmian plik TOML zostanie odpowiednio zaktualizowany.

zmienne z katalogu wersji w oknie Struktura projektu.

Możesz też zaktualizować zależności 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 Żądana wersja. 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 wersji w ten sposób spowoduje zastąpienie tej 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 do tego okna struktury projektu) nie powoduje usunięcia tej zależności z katalogu wersji.

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

Znane problemy i ograniczenia

Oto znane problemy i ograniczenia obsługi katalogów wersji Gradle w Android Studio.

  • Podświetlanie błędów w deklaracjach aliasów wtyczki w plikach skryptu Kotlina: gdy dodasz deklarację wtyczki w formie alias(libs.plugins.example), edytor podświetli czerwoną linią część libs. Jest to znany problem w Gradle w wersjach 8.0 i starszych. Zostanie rozwiązany w przyszłej wersji Gradle.

  • Obsługa Android Studio tylko w przypadku katalogów wersji w formacie TOML: obecnie funkcje uzupełniania kodu, nawigacji i dialogu Struktura projektu w Android Studio są dostępne tylko w przypadku katalogów wersji zdefiniowanych w pliku w formacie TOML. Nadal 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: w przypadku plików kompilacji napisanych w języku Kotlin nawigacja do definicji zależności w katalogu wersji za pomocą skrótu Control + klik (Command + klik na macOS) nie jest jeszcze obsługiwana.

  • Asystent Firebase dodaje zależności bezpośrednio w skryptach kompilacji: Asystent Firebase 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 w katalogu wersji w innych plikach kompilacji nie jest jeszcze obsługiwane, niezależnie od tego, czy plik kompilacji jest w KTS, czy w Groovy. Oznacza to, że kliknięcie Ctrl (Command na komputerze Mac) na definicji zmiennej w katalogu wersji nie powoduje przejścia do plików kompilacji, w których jest ona używana.

  • 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 będzie widoczny tylko plik katalogu aplikacji. Możesz użyć kompilacji złożonej, ale musisz bezpośrednio edytować jej plik TOML.

Dodatkowe statystyki pakietu SDK: problemy z zasadami

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

Obsługiwane wersje kompilacji pakietu SDK w Android Studio

Jeśli Twój projekt używa compileSdk, którego nie obsługuje bieżąca wersja Android Studio, pojawi się ostrzeżenie. Jeśli jest dostępna, zaleca też przejście na wersję Android Studio, która obsługuje compileSdk używaną przez Twój projekt. Pamiętaj, że aktualizacja Android Studio może wymagać również aktualizacji AGP. AGP wyświetla też ostrzeżenie w oknie narzędzia Kompiluj, jeśli compileSdk używany przez Twój projekt nie jest obsługiwany przez bieżącą wersję AGP.

Zmiany w działaniu lintowania

Począwszy od wtyczki Androida do obsługi Gradle w wersji 8.3.0-alpha02, podczas uruchamiania lint w module są wykonywane osobne zadania analizy lint dla głównego komponentu i komponentu testowego. Powodem tej zmiany jest poprawa wydajności. Aby przywrócić poprzednie działanie, ustaw wartość android.experimental.lint.analysisPerComponent=false w pliku gradle.properties.

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

Domyślnie włączone jest precyzyjne kompresowanie zasobów, które usuwa z pliku resources.arsc nieużywane wpisy i usuwane nieużywane pliki zasobów. Gdy ta funkcja jest włączona, tabela zasobów jest zmniejszana, a w pliku APK uwzględniane są tylko odwołania do folderu res.

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

Rozwiązane problemy

Wtyczka Androida do obsługi Gradle 8.3.0

Rozwiązane problemy
Wtyczka Android Gradle
Pamięć podręczna kompilacji jest zbędna w przypadku zadania PackageForUnitTest
[AGP 8.1.0] ./gradlew test fails with "Unable to find manifest output" if both splits.abi.isEnable and testOptions.unitTests.isIncludeAndroidResources are true
Tworzenie modelu AGP kończy się niepowodzeniem w przypadku zagnieżdżonych kompilacji złożonych w Gradle
Narzędzie do zmniejszania rozmiaru zasobów zniekształca identyfikatory zasobów, co powoduje awarie w czasie wykonywania
Sprawdzanie minimalnej wersji Gradle nie jest wykonywane w przypadku drugiego kompilowania i kolejnych
Nie udało się wykonać zadania „:app:mergeReleaseClasses” po zaktualizowaniu AGP z wersji 8.0.2 do 8.1.0
[Gradle 8.4][upgrade] Niepowodzenie testu integracji po uaktualnieniu z powodu użycia przestarzałej funkcji w pluginie gradle kotlin
Nie sprawdzaj istnienia plików nakładek manifestu podczas fazy konfiguracji
Nieprawidłowy link do dokumentu Gradle dotyczącego 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 pliku podczas konfiguracji w ProcessJavaResTask przerywa buforowanie konfiguracji
Interfejs API wersji produktu do pobierania tabeli symboli (R.txt)
Samodzielny wtyczka lint nie obsługuje prawidłowo zależności gradleApi()
Słaba jakość kDocs w przypadku klas/właściwości AGP. `VariantOutput.enable` sugeruje, że należy go zastąpić parametrem `VariantOutput.enable`
AGP 8.3.0-alpha02 nie może instalować profili wersji na hostach w systemie Windows
Wymuś ustawienie `android.enableDexingArtifactTransform=true`
[Gradle 8.4][upgrade] Niepowodzenie testu integracji po uaktualnieniu z powodu obsługi plików na etapie konfiguracji
AGP 8.3.0-alpha-02 – „Błąd: nie udało się zdeserializować repozytorium zasobów w pamięci podręcznej”.
[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 7.4.2 tego nie robi
Przekształcanie pliku APK powoduje błąd w ListingFileRedirectTask
Przekształcanie artefaktu ASSETS powoduje nieprawidłowe lokalizacje wejścia/wyjścia
Ustawienie android.experimental.r8.dex-startup-optimization=true jako domyślne
Migracja do nowego interfejsu API do dopasowywania konfiguracji Gradle
Kompilacja zasobów kończy się niepowodzeniem, gdy kompilator Kotlina próbuje zaktualizować do wersji IDEA 21.3
Reaktywne wywołanie get() za pomocą interfejsu Artifacts API
Przejście właściwości AGP „android.lint.printStackTrace” do wersji stabilnej
AGP 8.1.0: funkcja dynamiczna: ukryta zależność między exportReleaseConsumerProguardFiles i extractProguardFiles powoduje błędy kompilacji
Wygląda na to, że parametr `variant.unitTest.jniLibs.addGeneratedSourceDirectory` nic nie robi
Aktualizacja parsowania XML używanego w AGP w celu zapewnienia zgodności z Gradle 8.4
Pakiet AGP 8.0.1 z instrumentacją Jacoco nie działa w wersji AGP 8.0.1
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
Przejście właściwości AGP „android.lint.printStackTrace” do wersji stabilnej
Prośba o funkcję: promowanie interfejsu com.android.build.api.extension.impl.CURRENT_AGP_VERSION jako publicznego interfejsu API
Menedżer pakietu SDK nie powinien już spamować informacjami z logu na wyjściu standardowym.
DexArchiveBuilderTaskDelegate nie powiodło się w przypadku modułu biblioteki zawierającego tylko zasoby
AGP7.4 wariant wtyczki niestandardowej toTransform for all throw duplicate entry: META-INF/MANIFEST.MF exception
obsługa nowych tagów pliku manifestu,
Link do „Projektów z oddzielonymi komponentami” w ustawieniach Studia prowadzi do nieprawidłowego miejsca.
Podaj opcje uwzględniania wygenerowanych źródeł w Javadoc i SourceJar
Need quick fix for discrepancy between compileSdk and dependency with minCompileSdkVersion
[Gradle] narzędzia:overrideLibrary powinny obsługiwać gwiazdkę (*)
Blokada interfejsu podczas edytowania pliku manifestu
Nie można ustawić wersji JaCoCo w AGP 8.2.0
Zadaniem instalacji wtyczki Androida do obsługi Gradle w wersji 8.2.0 nie udaje się wykonać w projekcie, który korzysta z dynamicznych funkcji
Zadaniem instalacji wtyczki Androida do obsługi Gradle w wersji 8.2.0 nie udaje się wykonać w projekcie, który korzysta z dynamicznych funkcji
Dexer (D8)
[desugared library] Desugared library version 2.1 is not compatible with previous versions of R8
Czy optymalizacje są przeprowadzane tylko z D8?
Lint
[Lint] Wyjątek w funkcji filterIncident powoduje awarię klasy TranslucentViewDetector i nieprawidłowy wynik kontroli jakości
TranslucentViewDetector powinien akceptować wartość „behind”.
Android Lint nie działa w przypadku biblioteki KMP, gdy „właściwość 'variantInputs.name' nie ma skonfigurowanej wartości”.
TranslucentViewDetector report wrong line in manifest
lintDebug fałszywie zgłasza ostrzeżenia UseTomlInstead podczas używania zależności projektu
nieoczekiwane problemy z innego projektu oznaczone przez Android Lint,
LINT check Unused Resource false positive detection inside of binding and click listener
Nie udało się wczytać pliku jar niestandardowego narzędzia do sprawdzania błędów: Node cannot be cast to TreeNode
Lint visitAnnotationUsage not called for usages of annotated classes in variable declarations
Lint 31.0.2 nie działa z java.util.NoSuchElementException: Array is empty.
Brak ostrzeżenia Lint o funkcji kotlin.text.MatchNamedGroupCollection#get(String) wymagającej interfejsu API 26
lint:TypographyQuotes fałszywie negatywne: więcej niż jeden cudzysłów ujęty w cudzysłów jest ignorowany
AGP 8.0.2 lint InvalidId detector false positive
Do baz linii bazowych lint dodano problemy LintError
Szybkie rozwiązanie: lint nie działa i powoduje błąd w IDE
Niespójny błąd testu z powodu częściowej analizy
Nieprawidłowe wyróżnienie ostrzeżenia, które jest fałszywie pozytywne
Lint visitAnnotationUsage not called for usages of annotated classes in variable declarations
Przetwarzanie nieużywanych zasobów może spowodować usunięcie pliku kompilacji Gradle
Nowa weryfikacja lint 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 BOM Firebase, które należy uaktualnić do nowszej wersji.
Integracja z lintem
Błąd lint DuplicatePlatformClasses z powodu zależności od testImplementation
Shrinker (R8)
R8 nie działa po przejściu z wersji AGP 8.0.2 na 8.1.0
W wersji 8.3.0-alpha11 do alpha14 funkcja isShrinkResources nadmiernie optymalizuje.
Awaria pakietu Flurry SDK w wersji 8.2.0 w ramach AGP
Android – R8 powoduje awarię podklasy LinearLayoutManager
R8 w wersji 8.2.33, awaria w czasie wykonywania spowodowana błędem „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 zawodzi w przypadku bota kotlin_dev

Wtyczka Androida do obsługi Gradle 8.3.1

Rozwiązane problemy
Wtyczka Android Gradle
Problem z obsługą przyrostowych danych wejściowych w programie MergeJavaResourcesTask
Integracja z lintem
Lincz nie może rozpoznać typów zestawów źródeł w AGP 8.3.0-rc02

Wtyczka Androida do obsługi Gradle 8.3.2

Rozwiązane problemy
Wtyczka Android Gradle
W wersji AGP 8.3 z włączonym desugaringiem może wystąpić blokada.
AGP 8.3 powoduje błąd zipApksFor Task
Integracja z lintem
Lint nie może rozstrzygnąć zależności KMP