Wtyczka Androida do obsługi Gradle w wersji 7.1.0 (styczeń 2022 r.)
Wtyczka Androida do obsługi Gradle w wersji 7.1.0 to ważna wersja, 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:
- Problemy z duplikatami klas zgłoszone przez R8
Pełną listę poprawek błędów w tej wersji znajdziesz w poście na blogu o Android Studio Bumblebee Patch 3.
7.1.2 (luty 2022)
Ta niewielka aktualizacja zawiera następujące poprawki błędów:
- Wtyczka Androida do obsługi Gradle w wersji 7.1.0-rc01 nie wykonuje transformacji kodu bajtowego ASM podczas testów jednostkowych
- Synchronizacja Gradle kończy się niepowodzeniem z komunikatem „Nie można wczytać klasy 'com.android.build.api.extension.AndroidComponentsExtension'”.
- Niektórych nowych bloków DSL nie można używać w Groovy DSL w wtyczce Androida do obsługi Gradle w wersji 7.0.0
- Nowy interfejs API publikowania w AGP 7.1: utworzony plik JAR javadoc nie jest podpisany
- ClassesDataSourceCache powinna używać najnowszej wersji Asm
- Android Studio BumbleBee nie zawsze wdraża najnowsze zmiany
Pełną listę poprawek błędów w tej wersji znajdziesz w poście na blogu o Android Studio Bumblebee Patch 2.
7.1.1 (luty 2022)
Ta niewielka aktualizacja odpowiada wydaniu Androida Studio Bumblebee w wersji Patch 1.
Listę poprawek błędów w tej wersji znajdziesz w poście na blogu o Android Studio Bumblebee Patch 1.
Zgodność
Wersja minimalna | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 7.2 | 7.2 | Więcej informacji znajdziesz w sekcji Aktualizowanie Gradle. |
SDK Build Tools | 30.0.3 | 30.0.3 | Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK. |
NDK | Nie dotyczy | 21.4.7075529 | Zainstaluj lub skonfiguruj inną wersję NDK. |
JDK | 11 | 11 | Więcej informacji znajdziesz w artykule o ustawianiu wersji JDK. |
Zadanie analizy Lint można teraz zapisywać w pamięci podręcznej
AndroidLintAnalysisTask
jest teraz zgodny z pamięcią podręczną kompilacji Gradle. Jeśli włączysz pamięć podręczną kompilacji, ustawiając org.gradle.caching=true
w pliku gradle.properties
, zadanie analizy lint będzie w miarę możliwości pobierać dane wyjściowe z pamięci podręcznej kompilacji.
Zadanie analizy lint jest często największym wąskim gardłem podczas uruchamiania lint z wtyczką Androida do Gradle, więc włączenie pamięci podręcznej kompilacji w wielu sytuacjach przyspiesza kompilację podczas uruchamiania lint. Powinieneś zauważyć znaczną poprawę wydajności, np. jeśli masz projekt wielomodułowy i czyścisz 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 Androida z kodem C/C++ można teraz skonfigurować tak, aby odwoływał się do plików nagłówkowych i kodu biblioteki w innym module Gradle. Protokół Prefab służy do przekazywania nagłówków i bibliotek między modułami Gradle.
Wymagania
-
Moduł consuming musi mieć wartość
CMake
, a niendk-build
. Obsługa ndk-build będzie wymagać przyszłej aktualizacji NDK. Moduł publikowania może mieć wartośćCMake
lubndk-build
. -
Moduł consuming musi włączyć
prefab
w plikubuild.gradle
.
android {
buildFeatures {
prefab true
}
}
- Moduł publishing musi włączyć
prefabPublishing
w plikubuild.gradle
.
android {
buildFeatures {
prefabPublishing true
}
}
- Moduł odbiorczy musi odwoływać się do modułu publikującego, dodając wiersz w bloku
dependencies
plikubuild.gradle
. 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ćfind_package()
do lokalizowania 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ć jeden plik STL. Dzięki temu na przykład zarówno moduły korzystające z udostępnionego STL w C++, jak i moduły publikujące mogą go używać.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}
Więcej informacji o konfigurowaniu natywnych odbiorców i producentów AAR za pomocą AGP znajdziesz w artykule Natywne zależności w 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 następnie 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 build.gradle
najwyższego poziomu, 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 uległ zmianie. Użyj więc pliku build.gradle
najwyższego poziomu i pliku settings.gradle
, aby zdefiniować konfiguracje kompilacji, które mają zastosowanie do wszystkich modułów w projekcie, lub repozytoria 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 program do zmniejszania zasobów
Android Studio Bumblebee zawiera ulepszone narzędzie do zmniejszania zasobów, które pomaga zmniejszyć rozmiar aplikacji.
Obsługa aplikacji z funkcjami dynamicznymi
Domyślna implementacja narzędzia do zmniejszania rozmiaru zasobów Androida została zaktualizowana we wtyczce Androida do obsługi Gradle w wersji 7.1.0-alpha09. Nowa implementacja umożliwia zmniejszanie rozmiaru aplikacji za pomocą funkcji dynamicznych.
Eksperymentalne dalsze zmniejszanie rozmiaru aplikacji
Nowa implementacja narzędzia do zmniejszania rozmiaru 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 program do zmniejszania rozmiaru zasobów może całkowicie usuwać nieużywane zasoby plików, co dodatkowo zmniejsza rozmiar aplikacji. To zachowanie nie jest jeszcze domyślnie włączone, ale możesz je wypróbować, dodając do pliku gradle.properties
projektu opcję eksperymentalną android.experimental.enableNewResourceShrinker.preciseShrinking=true
.
Zgłaszaj wszelkie problemy, które napotkasz w nowym narzędziu do zmniejszania rozmiaru zasobów lub w eksperymentalnej fladze. Aby zdiagnozować problemy lub tymczasowo je obejść, możesz wrócić do poprzedniej implementacji, dodając android.enableNewResourceShrinker=false
do pliku gradle.properties
projektu.
Nowy kompresor zastępuje nieużywane zasoby oparte na plikach nieco innymi minimalnymi plikami niż poprzedni kompresor zasobów, ale nie powinno to mieć wpływu na działanie aplikacji.
Starsza implementacja zostanie usunięta we wtyczce Androida do obsługi Gradle w wersji 8.0.0.
Publikowanie wariantów kompilacji
Wtyczka Androida do obsługi Gradle w wersji 7.1.0 lub nowszej umożliwia skonfigurowanie wariantów kompilacji, które mają być publikowane w repozytorium Apache Maven. AGP tworzy komponent z 1 lub kilkoma wariantami kompilacji na podstawie nowego języka DSL publikowania, którego możesz użyć do dostosowania publikacji w repozytorium Maven. W porównaniu z poprzednimi wersjami pozwala to uniknąć niepotrzebnej pracy, ponieważ domyślnie nie będą tworzone żadne komponenty. Więcej informacji znajdziesz w przykładowym kodzie publikowania.
Publikowanie pliku JAR Javadoc
AGP 7.1.0 i nowsze umożliwiają generowanie dokumentacji Javadoc ze źródeł Java i Kotlin oraz publikowanie plików JAR dokumentacji Javadoc oprócz plików AAR w przypadku projektów bibliotek. Dokumentacja Javadoc jest dodawana do plików POM i Gradle Module Metadata{:.external}. Aby włączyć tę funkcję, dodaj withJavadocJar()
w singleVariant
lub multipleVariants
bloku publikowania.
Więcej informacji znajdziesz w przykładowym kodzie opcji publikowania.
Publikowanie plików JAR ze źródłami
AGP 7.1.0 i nowsze umożliwiają publikowanie plików JAR z kodem źródłowym w językach Java i Kotlin oprócz plików AAR w przypadku projektów bibliotek. Źródła zostaną dodane do plików POM i Gradle Module Metadata{:.external}. Możesz włączyć tę funkcję, dodając withSourcesJar()
w singleVariant
lub multipleVariants
bloku publikowania. Więcej informacji znajdziesz w przykładowym kodzie opcji publikowania.
Zmiana semantyczna bloku lintowania
Wszystkie metody lint, które zastępują podany poziom ważności problemu – enable
, disable
/ignore
, informational
, warning
, error
, fatal
– uwzględniają teraz kolejność konfiguracji. Na przykład ustawienie problemu jako krytycznego w finalizeDsl()
zastępuje teraz wyłączenie go w głównym DSL. Więcej informacji znajdziesz w lint{}
dokumentacji dotyczącej bloków i punktów rozszerzeń oraz przepływu kompilacji Androida.
Zgodność z Safe Args w nawigacji
Usunięto interfejsy API AGP, od których zależy wtyczka Gradle Safe Args. 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. W międzyczasie możesz używać AGP 7.1 z wersją Navigation Safe Args w postaci migawki, czyli Navigation 2.5.0-SNAPSHOT. Aby użyć kompilacji zrzutu, postępuj zgodnie z instrukcjami dotyczącymi zrzutu z identyfikatorem kompilacji 8054565.
Ponadto wersje 2.4.1 i 2.5.0 Navigation Safe Args nie będą już działać z AGP 4.2. Aby używać tych wersji Safe Args, musisz używać AGP 7.0 lub nowszego.
Wyłączanie automatycznego tworzenia komponentów
Od AGP 8.0 automatyczne tworzenie komponentów będzie domyślnie wyłączone.
Obecnie AGP 7.1 automatycznie tworzy komponent dla każdego wariantu kompilacji, który ma taką samą nazwę jak wariant kompilacji, oraz komponent all
, który zawiera wszystkie warianty kompilacji. Automatyczne tworzenie komponentów 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
AGP 7.1 jest niezgodny z wtyczką 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 firebase-perf
i chcesz uaktualnić AGP do wersji 7.1, musisz to zrobić ręcznie.
Znane problemy
W tej sekcji opisujemy znane problemy występujące we wtyczce Androida do obsługi Gradle w wersji 7.1.0.
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 w celu obsługi wstrzykiwania zależności podczas przeprowadzania testów jednostkowych.
Ten problem zostanie rozwiązany w wersji 7.1.1. Więcej informacji znajdziesz w tym zgłoszeniu.