Wtyczka Androida do obsługi Gradle w wersji 4.2.0 (marzec 2021 r.)
Zgodność
Wersja minimalna | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 6.7.1 | Nie dotyczy | Więcej informacji znajdziesz w sekcji Aktualizowanie Gradle. |
SDK Build Tools | 30.0.2 | 30.0.2 | Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK. |
NDK | Nie dotyczy | 21.4.7075529 | Zainstaluj lub skonfiguruj inną wersję NDK. |
Nowe funkcje
Ta wersja wtyczki Androida do obsługi Gradle zawiera te nowe funkcje:
Domyślnie wersja języka Java 8
Od wersji 4.2 AGP domyślnie używa poziomu języka Java 8. Java 8 zapewnia dostęp do wielu nowszych funkcji języka, w tym wyrażeń lambda, odwołań do metod i statycznych metod interfejsu. Pełną listę obsługiwanych funkcji znajdziesz w dokumentacji Javy 8.
Aby zachować stare działanie, w pliku build.gradle.kts
lub build.gradle
na poziomie modułu określ jawnie Javę 7:
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
Nowy kompilator zasobów JVM
Nowy kompilator zasobów JVM w narzędziu Android Gradle Plugin 4.2 zastępuje części kompilatora zasobów AAPT2, co może zwiększyć wydajność kompilacji, zwłaszcza na komputerach z systemem Windows. Nowy kompilator zasobów JVM jest domyślnie włączony.
Obsługa podpisywania w wersjach 3 i 4
Wtyczka Androida do obsługi Gradle w wersji 4.2 obsługuje teraz formaty podpisywania APK w wersji 3 i APK w wersji 4.
Aby włączyć w kompilacji jeden lub oba te formaty, dodaj te właściwości do pliku build.gradle
lub build.gradle.kts
na poziomie modułu:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}
// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}
Podpisywanie plików APK w wersji 4 umożliwia szybkie wdrażanie dużych plików APK za pomocą przyrostowej instalacji plików APK w ADB na Androidzie 11. Ten nowy znacznik obsługuje krok podpisywania pliku APK w procesie wdrażania.
Konfigurowanie podpisywania aplikacji dla poszczególnych wariantów
W wtyczce Androida do obsługi Gradle można teraz włączać i wyłączać podpisywanie aplikacji w przypadku poszczególnych wariantów.
W tym przykładzie pokazujemy, jak skonfigurować podpisywanie aplikacji dla każdego wariantu za pomocą metody
onVariants()
w języku Kotlin lub Groovy:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
Nowa właściwość Gradle:android.native.buildOutput
Aby zmniejszyć ilość informacji w danych wyjściowych kompilacji, AGP 4.2 filtruje komunikaty z kompilacji natywnych, które korzystają z CMake i ndk-build
, domyślnie wyświetlając tylko dane wyjściowe kompilatora C/C++. Wcześniej dla każdego utworzonego pliku generowany był wiersz danych wyjściowych, co powodowało wyświetlanie dużej liczby komunikatów informacyjnych.
Jeśli chcesz zobaczyć cały wynik natywny, ustaw nową właściwość Gradle android.native.buildOutput
na verbose
.
Możesz ustawić tę właściwość w pliku gradle.properties
lub w wierszu poleceń.
gradle.properties
android.native.buildOutput=verbose
Wiersz poleceń
-Pandroid.native.buildOutput=verbose
Domyślna wartość tej właściwości to quiet
.
Zmiana działania plików gradle.properties
Od wersji AGP 4.2 nie można już zastępować właściwości Gradle w projektach podrzędnych. Inaczej mówiąc, jeśli zadeklarujesz właściwość w pliku gradle.properties
w podprojekcie zamiast w projekcie głównym, zostanie ona zignorowana.
Na przykład w poprzednich wersjach AGP odczytywał wartości z plików <var>projectDir</var>/gradle.properties
, <var>projectDir</var>/app/gradle.properties
, <var>projectDir</var>/library/gradle.properties
itd. W przypadku modułów aplikacji, jeśli ta sama właściwość Gradle występowała w plikach <var>projectDir</var>/gradle.properties
i <var>projectDir</var>/app/gradle.properties
, wartość z pliku <var>projectDir</var>/app/gradle.properties
miała pierwszeństwo.
W AGP 4.2 to zachowanie zostało zmienione i AGP nie będzie wczytywać wartości z gradle.properties
w podprojektach (np.
<var>projectDir</var>/app/gradle.properties
).
Ta zmiana odzwierciedla nowe działanie Gradle i obsługuje buforowanie konfiguracji.
Więcej informacji o ustawianiu wartości w plikach gradle.properties
znajdziesz w dokumentacji Gradle.
Zmiany dotyczące zgodności i konfiguracji Gradle
Podczas działania w Android Studio narzędzie do kompilacji Gradle korzysta z JDK dołączonego do Studio. W poprzednich wersjach pakiet JDK 8 był dołączany do Studio. W wersji 4.2 jest jednak dołączony pakiet JDK 11. Jeśli do uruchamiania Gradle używasz nowego pakietu JDK, może to spowodować pewną niezgodność lub wpłynąć na wydajność JVM ze względu na zmiany w mechanizmie odśmiecania pamięci. Opis tych problemów znajdziesz poniżej.
Uwaga: zalecamy uruchamianie Gradle z JDK 11, ale w oknie Project Structure możesz zmienić wersję JDK używaną do uruchamiania Gradle. Zmiana tego ustawienia spowoduje zmianę tylko JDK używanego do uruchamiania Gradle, a nie JDK używanego do uruchamiania samego Studio.
Zgodność Studio z wtyczką Androida do obsługi Gradle (AGP)
Android Studio 4.2 może otwierać projekty, które korzystają z AGP 3.1 i nowszych, pod warunkiem że AGP działa w Gradle 4.8.1 i nowszych. Więcej informacji o zgodności z Gradle znajdziesz w artykule Aktualizowanie Gradle.
Optymalizowanie kompilacji Gradle pod kątem JDK 11
Ta aktualizacja do JDK 11 wpływa na domyślną konfigurację modułu odśmiecania pamięci JVM, ponieważ JDK 8 używa równoległego modułu odśmiecania pamięci, a JDK 11 – modułu odśmiecania pamięci G1.
Aby potencjalnie zwiększyć wydajność kompilacji, zalecamy testowanie kompilacji Gradle za pomocą równoległego modułu odśmiecania pamięci. W gradle.properties
ustaw te opcje:
org.gradle.jvmargs=-XX:+UseParallelGC
Jeśli w tym polu są już ustawione inne opcje, dodaj nową opcję:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Aby zmierzyć szybkość kompilacji przy różnych konfiguracjach, zapoznaj się z artykułem Profilowanie kompilacji.
Nieskompresowane pliki DEX w plikach APK, gdy minSdk
= 28 lub wyższa
AGP domyślnie pakuje nieskompresowane pliki DEX w plikach APK, gdy minSdk
= 28 lub nowszy. Powoduje to zwiększenie rozmiaru pliku APK, ale zmniejsza rozmiar instalacji na urządzeniu, a rozmiar pobierania pozostaje mniej więcej taki sam.
Aby wymusić na AGP spakowanie plików DEX w formacie skompresowanym, możesz dodać do pliku build.gradle
ten kod:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
Używanie DSL do pakowania skompresowanych bibliotek natywnych
Zalecamy pakowanie bibliotek natywnych w formie nieskompresowanej, ponieważ zmniejsza to rozmiar instalacji i pobierania aplikacji oraz skraca czas jej wczytywania. Jeśli jednak chcesz, aby wtyczka Androida do obsługi Gradle pakowała skompresowane biblioteki natywne podczas tworzenia aplikacji, ustaw wartość useLegacyPackaging
na true
w pliku build.gradle
aplikacji:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Flaga useLegacyPackaging
zastępuje atrybut pliku manifestu extractNativeLibs
. Więcej informacji znajdziesz w informacjach o wersji Nieskompresowane biblioteki natywne pakowane domyślnie.