Wtyczka Androida do obsługi Gradle w wersji 7.0.0 (lipiec 2021 r.)
Wtyczka Androida do obsługi Gradle w wersji 7.0.0 to duża wersja, która zawiera wiele nowych funkcje i ulepszenia.
7.0.1 (sierpień 2021 r.)
Ta niewielka aktualizacja zawiera różne poprawki błędów. Aby zobaczyć listę ważnych poprawek, przeczytaj powiązany post na Blog o aktualizacjach wersji.
Zgodność
Wersja minimalna | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | Więcej informacji znajdziesz w artykule na temat aktualizowania Gradle. |
Narzędzia do tworzenia pakietów SDK | 30.0.2 | 30.0.2 | Zainstaluj lub skonfiguruj narzędzia SDK Build Tools. |
NDK | Nie dotyczy | 21.4.7075529 | Zainstaluj lub skonfiguruj inną wersję NDK. |
JDK | 11 | 11 | Więcej informacji znajdziesz w sekcji o ustawianiu wersji pakietu JDK. |
Do korzystania z pakietu AGP 7.0 wymagany jest pakiet JDK 11
Jeśli do tworzenia aplikacji używasz wtyczki Androida do obsługi Gradle w wersji 7.0, JDK 11 jest teraz wymagane do uruchomienia Gradle. Android Studio Arctic Fox zawiera pakiety JDK 11 i konfiguruje Gradle tak, aby używała go domyślnie, co oznacza, że większość narzędzi Android Studio użytkownicy nie muszą wprowadzać żadnych zmian w konfiguracji swoich projektów.
Jeśli musisz ręcznie ustawić wersji JDK używanej przez pakiet AGP w Android Studio, użyj pakietu JDK 11. lub wyższą.
Jeśli używasz AGP niezależnego od Android Studio, uaktualnij JDK do
ustawianie zmiennej środowiskowej JAVA_HOME,
lub -Dorg.gradle.java.home
opcji wiersza poleceń
do katalogu instalacyjnego JDK 11.
Pamiętaj, że SDK Manager i AVD Manager w wycofanym pakiecie SDK Tools nie działają w przypadku pakietu JDK 11. Aby nadal korzystać z SDK Manager i AVD Manager jeśli korzystasz ze standardu AGP 7.0 lub nowszego, musisz przełączyć się na nowe wersje narzędzi bieżącego Narzędzia wiersza poleceń pakietu Android SDK .
Wersja stabilna interfejsu API
Nowy interfejs API wariantu jest teraz stabilny. Poznaj nowe interfejsy w com.android.build.api.variant oraz przykłady w projektu GitHub gradle-recipes. W ramach nowej API wariantu, udostępniliśmy kilka plików pośrednich o nazwie artefaktów, w ramach Artefakty za pomocą prostego interfejsu online. Te artefakty, np. scalony plik manifestu, można bezpiecznie uzyskać i dostosowywać go za pomocą wtyczek i kodów innych firm.
Nadal będziemy rozszerzać interfejs API wariantów, dodając nowe funkcje. i zwiększając liczbę artefaktów pośrednich, które udostępniamy i personalizacji reklam.
Zmiany w działaniu Lint
W tej sekcji opisano wiele zmian w działaniu Lint w systemie Android Gradle wtyczka 7.0.0.
Ulepszony lint dla zależności bibliotek
Uruchamianie lintowania w aplikacji checkDependencies = true
jest teraz szybsze
niż do tej pory. W przypadku projektów na Androida, które obejmują aplikację z biblioteką
zależności, zalecamy ustawienie atrybutu checkDependencies
na
true
, jak pokazano poniżej, i uruchomić lint za pomocą
./gradlew :app:lint
, która przeanalizuje wszystkie zależności
modułów równolegle i wygenerować jeden raport zawierający problemy z
i wszystkich zależnościach od niej.
Odlotowe
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
Zadania Lint mogą być teraz AKTUALIZOWANE
Jeśli źródła i zasoby modułu nie uległy zmianie, analiza lintowania
dla modułu nie trzeba uruchamiać ponownie. W takim przypadku tag
wykonanie zadania ma stan „UP-TO-DATE” w Gradle
dane wyjściowe. Dzięki tej zmianie podczas uruchamiania lint w module aplikacji z funkcją checkDependencies = true
tylko zmodyfikowane moduły
przeprowadzić analizę. Dzięki temu platforma Lint działa jeszcze szybciej.
Zadanie raportu Lint nie musi być uruchamiane, jeśli jego dane wejściowe nie została zmieniona. Powiązany znany problem to brak lintowania dane wyjściowe tekstowe są drukowane jako standardowe, gdy zadanie lint jest ustawione na czas UP-TO-DATE (numer problemu 191897708).
Uruchamianie lintowania w modułach funkcji dynamicznych
AGP nie obsługuje już uruchamiania lint z modułów funkcji dynamicznych.
Uruchomienie lint z odpowiedniego modułu aplikacji spowoduje uruchomienie lintowania
modułów funkcji dynamicznych i uwzględnić wszystkie problemy w lincie aplikacji.
raport. Powiązany znany problem polega na tym, że podczas uruchamiania lintowania
z checkDependencies = true
w module aplikacji,
zależności biblioteki funkcji dynamicznych nie są sprawdzane, chyba że dotyczą aplikacji.
zależności (problem
#191977888).
Linter uruchomiony tylko w wariancie domyślnym
Uruchomienie polecenia ./gradlew :app:lint
pozwala teraz uruchamiać lint tylko dla
wariant domyślny. W poprzednich wersjach interfejsu AGP wykonywał on lint na wszystkich
wersji.
Brak ostrzeżeń dotyczących klas w ograniczaniu R8
R8.
stale obsługuje brakujące klasy oraz opcję -dontwarn
.
Dlatego należy zacząć oceniać wysyłane ostrzeżenia o brakujących klasach
R8.
Gdy R8 napotyka odwołanie do klasy, które nie jest zdefiniowane w aplikacji lub jedną z jego zależności, wyświetli ostrzeżenie w kompilacji dane wyjściowe. Na przykład:
R8: Missing class: java.lang.instrument.ClassFileTransformer
To ostrzeżenie oznacza, że definicja klasy
Nie można znaleźć adresu java.lang.instrument.ClassFileTransformer
przy analizowaniu kodu aplikacji. Zwykle oznacza to błąd,
możesz zignorować to ostrzeżenie. Dwie najczęstsze przyczyny
do zignorowania ostrzeżenia:
-
Biblioteki kierowane na JVM i brakującą klasę są zapisane w JVM (jak w przykładzie powyżej).
-
Jedna z zależności używa interfejsu API tylko podczas kompilacji.
Możesz zignorować ostrzeżenie o brakujących zajęciach, dodając -dontwarn
do pliku proguard-rules.pro
. Na przykład:
-dontwarn java.lang.instrument.ClassFileTransformer
Dla wygody AGP generuje plik zawierający potencjalnie wszystkie
reguł, zapisując je w ścieżce pliku, na przykład:
app/build/outputs/mapping/release/missing_rules.txt
Dodaj parametr
reguły ignorowania ostrzeżeń.proguard-rules.pro
W AGP 7.0 brakujące wiadomości dotyczące zajęć są wyświetlane jako ostrzeżenia. Możesz
zmienić je w błędy, ustawiając
android.r8.failOnMissingClasses = true
in
gradle.properties
W AGP 8.0 te ostrzeżenia będą:
które zakłócają kompilację. Działanie AGP 7.0 można zachować przez:
dodaję opcję -ignorewarnings
do
proguard-rules.pro
, ale nie jest to zalecane.
Usunięto pamięć podręczną kompilacji wtyczki Androida do obsługi Gradle
Pamięć podręczna kompilacji AGP została usunięta w AGP 4.1. Poprzednio wprowadzone w AGP Aby uzupełnić pamięć podręczną kompilacji Gradle, pamięć podręczna kompilacji AGP została zastąpiona wyłącznie z pamięci podręcznej kompilacji Gradle w AGP 4.1. Ta zmiana nie ma wpływu czas kompilacji.
W pakiecie AGP 7.0 za pomocą właściwości android.enableBuildCache
właściwości android.buildCacheDir
oraz
Usunięto cleanBuildCache
zadanie.
Użyj w projekcie kodu źródłowego Java 11
Możesz teraz skompilować w projekcie swojej aplikacji kod źródłowy Java 11 do wersji 11, korzystać z nowszych funkcji językowych, takich jak prywatne metody interfejsu, na potrzeby klas anonimowych i składni zmiennych lokalnych dla parametrów lambda.
Aby włączyć tę funkcję, ustaw compileOptions
na żądaną
wersji Javy i ustaw compileSdkVersion
na 30 lub nowszą:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
Konfiguracje zależności zostały usunięte
W AGP 7.0 zostały wprowadzone następujące konfiguracje (lub zakresy zależności) usunięto:
-
compile
W zależności od przypadku użycia zastąpiliśmy ją tekstemapi
. lubimplementation
.
Dotyczy to też wariantów typu *Kompiluj, np.debugCompile
. -
provided
Zastąpiła ich treść:compileOnly
.
Dotyczy to też wersji *dostarczonych, na przykład:releaseProvided
-
apk
Zastąpiła ich treść:runtimeOnly
. -
publish
Zastąpiła ich treść:runtimeOnly
.
W większości przypadków plik AGP Asystent uaktualniania automatycznie przeniesie projekt do nowej wersji konfiguracji.
Zmiana klasy Classpath podczas kompilowania danych na Androidzie Wtyczka Gradle
Jeśli kompilujesz dane za pomocą wtyczki Androida do obsługi Gradle,
ścieżka klasy może się zmienić. Ponieważ AGP używa teraz api/implementation
wewnętrznych konfiguracji, niektóre artefakty mogą zostać usunięte z kompilacji
classpath. Jeśli podczas kompilowania polegasz na zależności AGP,
dodaj ją jako zależność jawną.
Dodanie bibliotek natywnych do zasobów Javy folder nie jest obsługiwany
Wcześniej można było dodać bibliotekę natywną w folderze zasobów Java.
zarejestruj folder za pomocą funkcji android.sourceSets.main.resources.srcDirs
, aby wyodrębnić bibliotekę natywną i dodać ją do ostatecznej
plik APK. Nie jest ono obsługiwane od wersji AGP 7.0, a biblioteki natywne
Folder zasobów Java jest ignorowany. Zamiast tego użyj metody DSL przeznaczonej do
biblioteki natywne, android.sourceSets.main.jniLibs.srcDirs
. Dla:
więcej informacji znajdziesz w
jak skonfigurować
.
Znane problemy
W tej sekcji opisano znane problemy występujące we wtyczce Androida do obsługi Gradle 7.0.0
Niezgodność z wtyczką wieloplatformową Kotlin 1.4.x
Wtyczka Androida do obsługi Gradle w wersji 7.0.0 jest zgodna z Kotlin Wtyczka wieloplatformowa w wersji 1.5.0 lub nowszej. Projekty wykorzystujące Kotlin Aby używać Gradle Androida, należy zaktualizować obsługę wieloplatformową do wersji Kotlin 1.5.0 Wtyczka 7.0.0 Aby obejść ten problem, możesz zmienić wersję wtyczki Androida do obsługi Gradle na starszą do wersji 4.2.x, ale nie jest to zalecane.
Więcej informacji: KT-43944,
Brak danych wyjściowych lint
Gdy zadanie lint jest aktualne (numer problemu 191897708). Więcej informacji znajdziesz tutaj: Zmiany działania linta. Ten numer zostanie poprawiony we wtyczce Androida do obsługi Gradle w wersji 7.1.
Nie wszystkie zależności biblioteki funkcji dynamicznych są sprawdzane
Podczas uruchamiania lintowania za pomocą narzędzia checkDependencies = true
ze
modułu aplikacji, zależności biblioteki funkcji dynamicznych nie są sprawdzane,
to również zależności aplikacji
(numer problemu 191977888).
Aby obejść ten problem, w tych bibliotekach można uruchomić zadanie lintowania. Aby uzyskać więcej informacji,
Więcej informacji: Zmiany w działaniu linta.