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 artykule Aktualizowanie Gradle. |
| Narzędzia do kompilacji pakietu 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. |
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 wtyczka Androida do obsługi Gradle będzie 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 wtyczki Androida do obsługi Gradle w wersji 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 za pomocą ADB w Androidzie 11. Ten nowy znacznik obsługuje krok podpisywania pliku APK w procesie wdrażania.
Konfigurowanie podpisywania aplikacji dla poszczególnych wariantów
We 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, wtyczka Androida do obsługi Gradle 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ć pełne dane wyjściowe w języku natywnym, 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 podprojektach. 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 itp. W przypadku modułów aplikacji, jeśli ta sama właściwość Gradle występowała zarówno w pliku <var>projectDir</var>/gradle.properties, jak i w pliku <var>projectDir</var>/app/gradle.properties, pierwszeństwo miała wartość z pliku <var>projectDir</var>/app/gradle.properties.
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 używa pakietu 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 pakietem JDK 11, ale w oknie Project Structure możesz zmienić pakiet JDK używany 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 wtyczki Androida do obsługi Gradle w wersji 3.1 lub nowszej, pod warunkiem że wtyczka Androida do obsługi Gradle działa w Gradle 4.8.1 lub nowszym. Więcej informacji o zgodności z Gradle znajdziesz w artykule Aktualizowanie Gradle.
Optymalizowanie kompilacji Gradle pod kątem pakietu JDK 11
Ta aktualizacja 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 używa 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:+UseParallelGCJeśli w tym polu są już ustawione inne opcje, dodaj nową opcję:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGCAby zmierzyć szybkość kompilacji przy różnych konfiguracjach, zapoznaj się z artykułem Profilowanie kompilacji.
Nieskompresowane pliki DEX w plikach APK, gdy minSdk ≥ 28
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 kompilowania aplikacji, ustaw wartość useLegacyPackaging na true w pliku build.gradle aplikacji:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}Flaga useLegacyPackaging zastępuje atrybut manifestu extractNativeLibs. Więcej informacji znajdziesz w informacjach o wersji Nieskompresowane biblioteki natywne pakowane domyślnie.