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
W wtyczce Androida do obsługi Gradle można teraz włączać i wyłączać podpisywanie aplikacji w przypadku poszczególnych wariantów.
Ten przykład pokazuje, 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, 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 w przypadku 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 pamięć podręczną 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 uruchamiania 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. 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 i nie wpłynie na JDK używany 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 i 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.
Pliki DEX nieskompresowane w plikach APK, gdy minSdk = 28 lub więcej
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.