Wtyczka Androida do obsługi Gradle 7.1.0 (styczeń 2022 r.)
Wtyczka Androida do obsługi Gradle w wersji 7.1.0 to ważna aktualizacja, która zawiera wiele nowych funkcji i ulepszeń.
7.1.3 (kwiecień 2022 r.)
Ta niewielka aktualizacja zawiera następujące poprawki błędów:
- Zduplikowane problemy z zajęciami zgłoszone przez R8
Pełną listę poprawek błędów zawartych w tej wersji znajdziesz w poście na blogu Android Studio o Bumblebee Patch 3.
7.1.2 (luty 2022 r.)
Ta niewielka aktualizacja zawiera następujące poprawki błędów:
- Wtyczka Androida do obsługi Gradle 7.1.0-rc01 nie wykonuje przekształceń kodu bajtowego ASM podczas testów jednostkowych
- Synchronizacja Gradle kończy się niepowodzeniem z komunikatem „Nie udało się wczytać klasy 'com.android.build.api.extension.AndroidComponentsExtension'”.
- Niektórych nowych bloków DSL nie można używać w Groovy DSL w Android Gradle Plugin w wersji 7.0.0
- AGP 7.1 nowy interfejs API do publikowania: utworzony plik javadoc jar nie jest podpisywany
- ClassesDataSourceCache powinien używać najnowszej wersji Asm
- Android Studio BumbleBee nie zawsze wdraża najnowsze zmiany
Pełną listę poprawek błędów zawartych w tej wersji znajdziesz w artykule Android Studio Bumblebee Patch 2 w postach na blogu.
7.1.1 (luty 2022 r.)
Ta drobna aktualizacja odpowiada wersji Android Studio Bumblebee Patch 1.
Aby zobaczyć listę błędów naprawionych w tej wersji, przeczytaj ten post na blogu.
Zgodność
Minimalna wersja | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 7.2 | 7.2 | Więcej informacji znajdziesz w artykule Aktualizowanie Gradle. |
Narzędzia do kompilowania pakietu SDK | 30.0.3 | 30.0.3 | Zainstaluj lub skonfiguruj narzędzia do kompilowania pakietu SDK. |
NDK | Nie dotyczy | 21.4.7075529 | Zainstaluj lub skonfiguruj inną wersję NDK. |
JDK | 11 | 11 | Więcej informacji znajdziesz w artykule Ustawianie wersji JDK. |
Zadanie analizy Lint może być teraz przechowywane w pamięci podręcznej
Usługa AndroidLintAnalysisTask
jest teraz zgodna z pamięcią podręczną kompilacji Gradle. Jeśli włączysz pamięć podręczną kompilacji, ustawiając wartość org.gradle.caching=true
w pliku gradle.properties
, zadanie analizy błędów będzie pobierać dane z pamięci podręcznej kompilacji, gdy tylko będzie to możliwe.
Największym ograniczeniem podczas uruchamiania linta za pomocą wtyczki Gradle dla Androida jest często zadanie analizy linta, dlatego w wielu sytuacjach włączenie pamięci podręcznej kompilacji zwiększa szybkość kompilacji podczas uruchamiania linta. Powinieneś zauważyć znaczną poprawę wydajności, np. jeśli masz projekt wielomodułowy i oczyszczasz katalog kompilacji przed uruchomieniem lint na serwerze CI.
moduły C/C++ mogą teraz odwoływać się do innych modułów C/C++ w tym samym projekcie;
Moduł Gradle na Androida z kodem C/C++ może być teraz skonfigurowany tak, aby odwoływał się do plików nagłówków i kodu biblioteki w innym module Gradle. Protokół Prefab służy do przesyłania nagłówków i bibliotek między modułami Gradle.
Wymagania
-
Moduł korzystający musi być
CMake
, a niendk-build
. Obsługa ndk-build będzie wymagać przyszłej aktualizacji NDK. Moduł publikowania może byćCMake
lubndk-build
. -
Moduł przetwarzający musi włączyć
prefab
w plikubuild.gradle
.
android {
buildFeatures {
prefab true
}
}
- Moduł publikowania musi włączyć
prefabPublishing
w plikubuild.gradle
.
android {
buildFeatures {
prefabPublishing true
}
}
- Moduł korzystający musi odwoływać się do modułu publikującego przez dodanie wiersza w pliku
build.gradle
w blokudependencies
. Na przykład:
dependencies {
implementation project(':mylibrary')
}
- Moduł publikowania musi udostępniać pakiet za pomocą sekcji
prefab
. Na przykład:
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}
- Plik
CMakeLists.txt
modułu korzystającego może używać elementufind_package()
do znajdowania pakietu opublikowanego przez moduł produkujący. Na przykład:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)
- W przypadku całej aplikacji musi być 1 plik STL. Na przykład moduły korzystające z biblioteki i publikujące ją mogą używać współdzielonej biblioteki STL w C++.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}
Więcej informacji o konfigurowaniu obsługiwanych i wytwarzanych natywnych interfejsów AAR za pomocą interfejsu AGP znajdziesz w artykule Natywnych zależności w interfejsie AGP.
Ustawienia repozytorium w pliku settings.gradle
Gdy w Android Studio Bumblebee utworzysz nowy projekt, plik najwyższego poziomu build.gradle
będzie zawierać blok plugins
, a zaraz po nim kod do czyszczenia katalogu kompilacji:
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Ustawienia repozytorium, które wcześniej znajdowały się w pliku najwyższego poziomu build.gradle
, są teraz w pliku settings.gradle
:
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'
Plik build.gradle
na poziomie modułu nie został zmieniony. Dlatego użyj najwyższego poziomu pliku build.gradle
i pliku settings.gradle
, aby zdefiniować konfiguracje kompilacji, które mają zastosowanie do wszystkich modułów w projekcie, lub repozytoriów i zależności, które mają zastosowanie do samego Gradle. Użyj pliku build.gradle
na poziomie modułu, aby zdefiniować konfiguracje kompilacji, które są specyficzne dla danego modułu w projekcie.
Ulepszony kompresor zasobów
Android Studio Bumblebee zawiera ulepszony kompresor zasobów, który pomaga zmniejszyć rozmiar aplikacji.
Obsługa aplikacji z funkcjami dynamicznymi
Domyślna implementacja kompresora zasobów Androida została zaktualizowana w wersji 7.1.0-alpha09 wtyczki Androida do obsługi Gradle. Nowa implementacja umożliwia zmniejszanie aplikacji z funkcjami dynamicznymi.
Eksperymentalne dalsze zmniejszanie rozmiaru aplikacji
Nowa implementacja narzędzia do kompresji zasobów może jeszcze bardziej zmniejszyć rozmiar skompresowanej aplikacji, modyfikując tabelę zasobów w celu usunięcia nieużywanych zasobów wartości i odwołań do nieużywanych zasobów plików. Nowy moduł do usuwania zasobów może całkowicie usunąć nieużywane zasoby plików, co jeszcze bardziej zmniejszy rozmiar aplikacji. Ta funkcja nie jest jeszcze domyślnie włączona, ale możesz ją wypróbować, dodając opcję eksperymentalną android.experimental.enableNewResourceShrinker.preciseShrinking=true
do pliku gradle.properties
projektu.
Zgłaszaj wszelkie problemy z nowym narzędziem do kompresowania zasobów lub z flagą eksperymentalną. Aby ułatwić diagnozowanie problemów lub jako tymczasowe obejście, możesz przełączyć się z powrotem na poprzednią implementację, dodając android.enableNewResourceShrinker=false
do gradle.properties
projektu.
Nowy program do kompresowania zastępuje nieużywane zasoby oparte na plikach nieco innymi minimalnymi plikami niż poprzedni program do kompresowania zasobów, ale nie powinno to mieć wpływu na czas wykonywania.
Stara implementacja zostanie usunięta w wersji 8.0.0 wtyczki Androida do obsługi Gradle.
Budowanie wariantów publikowania
Wtyczka Androida do obsługi Gradle w wersji 7.1.0 lub nowszej umożliwia konfigurowanie wariantów kompilacji, które mają zostać opublikowane w repozytorium Apache Maven. AGP tworzy komponent z jednym lub wieloma wariantami kompilacji na podstawie nowego języka publikowania DSL, którego możesz użyć do dostosowania publikacji do repozytorium Maven. W porównaniu z poprzednimi wersjami pozwala to też uniknąć niepotrzebnej pracy, ponieważ domyślnie nie są tworzone żadne komponenty. Więcej informacji znajdziesz w przykładowym kodzie publikowania.
Publikowanie pliku JAR Javadoc
Wersja AGP 7.1.0 i nowsze umożliwia generowanie Javadoca ze źródeł Java i Kotlin oraz publikowanie plików Javadoc JAR oprócz plików AAR dla projektów bibliotek. Javadoc jest dodawany do plików POM i metadanych modułu Gradle{:.external}. Aby włączyć tę funkcję, dodaj withJavadocJar()
w bloku publikowania singleVariant
lub multipleVariants
.
Więcej informacji znajdziesz w przykładowym kodzie opcji publikacji.
Publikowanie pliku JAR ze źródłami
AGP w wersji 7.1.0 lub nowszej umożliwia publikowanie plików źródłowych JAR w języku Java i Kotlin, a także plików AAR w przypadku projektów bibliotek. Źródła są dodawane do plików POM i metadanych modułu Gradle{:.external}. Możesz włączyć tę funkcję, dodając withSourcesJar()
w bloku publikowania singleVariant
lub multipleVariants
. Więcej informacji znajdziesz w przykładowym kodzie opcji publikacji.
Zmiana semantyczna bloku lint
Wszystkie metody lint, które zastępują dany poziom powagi problemu (enable
, disable
/ignore
, informational
, warning
, error
, fatal
), teraz przestrzegają kolejności konfiguracji. Na przykład ustawienie problemu jako krytycznego w finalizeDsl()
zastępuje teraz wyłączenie w głównym DSL. Więcej informacji znajdziesz w dokumentacji dotyczącej bloków lint{}
oraz w artykule Proces kompilacji Androida i punkty rozszerzenia.
Zgodność z Safe Args na potrzeby nawigacji
Usunięto interfejsy AGP, od których zależy wtyczka Navigation Safe Args Gradle. AGP 7.1 nie działa z wersjami Navigation Safe Args 2.4.0-rc1 ani 2.4.0, ale będzie działać z wersjami 2.5.0-alpha01 i 2.4.1. Tymczasem jako obejście problemu możesz użyć AGP 7.1 z kompilacją snapshota Argumentów Bezpiecznej Nawigacji Navigation 2.5.0-SNAPSHOT. Aby korzystać z kompilacji zrzutu, postępuj zgodnie z instrukcjami dotyczącymi zrzutu dla kompilacji o identyfikatorze #8054565.
Dodatkowo wersje 2.4.1 i 2.5.0 biblioteki Navigation Safe Args nie będą już działać z AGP 4.2. Aby używać tych wersji biblioteki Safe Args, musisz użyć wersji 7.0 lub nowszej.
Wyłączanie automatycznego tworzenia komponentów
Od wersji 8.0 AGP automatyczne tworzenie komponentów będzie domyślnie wyłączone.
Obecnie AGP 7.1 automatycznie tworzy komponent dla każdej wersji kompilacji, który ma tę samą nazwę co wersja kompilacji, oraz komponent all
, który zawiera wszystkie wersje kompilacji. Tworzenie tego komponentu automatycznego zostanie wyłączone. Aby przejść na nowe działanie, musisz ręcznie wyłączyć automatyczne tworzenie komponentów, ustawiając wartość android.disableAutomaticComponentCreation
na true.
. Więcej informacji znajdziesz w artykule Korzystanie z wtyczki Maven Publish.
Zgodność z Monitorowaniem wydajności Firebase
Wersja AGP 7.1 jest niezgodna z pluginem Gradle do monitorowania wydajności Firebase w wersji 1.4.0 lub starszej. Asystent uaktualniania AGP nie zaktualizuje automatycznie wtyczki do wersji 1.4.1, więc jeśli używasz wersji firebase-perf
i chcesz uaktualnić AGP do wersji 7.1, musisz wykonać to uaktualnienie ręcznie.
Znane problemy
W tej sekcji opisano znane problemy występujące w wersji 7.1.0 wtyczki Androida do obsługi Gradle.
Problemy z testowaniem jednostkowym projektu aplikacji, który korzysta z wtyczki Hilt
Ścieżka klas testów jednostkowych zawiera nieinstrumentowane klasy aplikacji, co oznacza, że Hilt nie instrumentuje klas aplikacji, aby obsługiwać wstrzykiwanie zależności podczas wykonywania testów jednostkowych.
Ten problem zostanie rozwiązany w wersji 7.1.1. Zobacz problem #213534628.