Wtyczka Androida do obsługi Gradle 4.2.0 (marzec 2021 r.)
Zgodność
Wersja minimalna | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 6.7.1 | Nie dotyczy | Aby dowiedzieć się więcej, zobacz aktualizowanie Gradle. |
Narzędzia do tworzenia pakietów SDK | 30.0.2 | 30.0.2 | Zainstaluj lub skonfiguruj narzędzia do kompilacji SDK. |
NDK | Nie dotyczy | 21.4.7075529 | Zainstaluj lub skonfiguruj inną wersję pakietu NDK. |
Nowe funkcje
Ta wersja wtyczki Androida do obsługi Gradle zawiera te nowe funkcje.
Domyślny język Java w wersji 8
Od wersji 4.2 AGP domyślnie używa języka Java 8. Java 8 zapewnia dostęp do wielu nowszych funkcji językowych, takich jak wyrażenia lambda, odwołania do metod i statyczne metody interfejsu. Pełną listę obsługiwanych funkcji znajdziesz w dokumentacji języka Java 8.
Aby zachować stare zachowanie, określ wyraźnie język Java 7 w pliku build.gradle.kts
lub build.gradle
na poziomie modułu:
// 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 we wtyczce Androida do obsługi Gradle w wersji 4.2 zastępuje fragmenty 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.
Podpisywanie w wersjach 3 i 4 jest już obsługiwane
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 z tych formatów, 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ą instalacji dodatkowych plików APK ADB w Androidzie 11. Ta nowa flaga zajmuje się etapem podpisywania pakietu APK w procesie wdrażania.
Skonfiguruj podpisywanie aplikacji według wariantu
Teraz można włączać i wyłączać podpisywanie aplikacji we wtyczce Androida do obsługi Gradle w przypadku poszczególnych wariantów.
Ten przykład pokazuje, jak ustawić podpisywanie aplikacji dla każdego wariantu za pomocą metody onVariants()
w 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 zwiększyć przejrzystość danych wyjściowych kompilacji, AGP 4.2 odfiltrowuje wiadomości z kompilacji natywnych, które korzystają z CMake i ndk-build
, i domyślnie wyświetlają tylko dane wyjściowe kompilatora C/C++. Wcześniej dla każdego tworzonego pliku generowany był wiersz danych wyjściowych, co powodowało generowanie dużej liczby wiadomości informacyjnych.
Aby zobaczyć całość danych wyjściowych, ustaw nową właściwość Gradle android.native.buildOutput
na verbose
.
Możesz ustawić tę właściwość w pliku gradle.properties
lub za pomocą wiersza poleceń.
gradle.properties
android.native.buildOutput=verbose
Wiersz poleceń
-Pandroid.native.buildOutput=verbose
Wartość domyślna tej właściwości to quiet
.
Zmiana działania plików gradle.properties
Od wersji 4.2 nie można już zastępować właściwości Gradle z podprojektów. Inaczej mówiąc, jeśli zadeklarujesz właściwość w pliku gradle.properties
w podprojekcie, a nie w głównym projekcie, zostanie ona zignorowana.
Na przykład w poprzednich wersjach AGP odczytuje wartości z <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 była dostępna zarówno w <var>projectDir</var>/gradle.properties
, jak i w <var>projectDir</var>/app/gradle.properties
, pierwszeństwo miałaby wartość z kolumny <var>projectDir</var>/app/gradle.properties
.
W AGP 4.2 ten sposób działania uległ zmianie – AGP nie będzie wczytywać wartości z projektu gradle.properties
w podprojektach (np.
<var>projectDir</var>/app/gradle.properties
). Ta zmiana odzwierciedla nowy sposób działania Gradle i obsługuje buforowanie konfiguracji
Więcej informacji o ustawianiu wartości w plikach gradle.properties
znajdziesz w dokumentacji Gradle.
Zmiany w konfiguracji i zgodności Gradle
Gdy narzędzie do tworzenia Gradle działa w Android Studio, korzysta z pakietu JDK należącego do Studio. W poprzednich wersjach pakiet JDK 8 był połączony ze Studio. Jednak w wersji 4.2 pakiet JDK 11 jest teraz dostępny w pakiecie. Jeśli do uruchamiania Gradle używasz nowego pakietu JDK, może to spowodować niezgodność lub wpłynąć na wydajność JVM z powodu zmian w module czyszczenia pamięci. Te problemy opisujemy poniżej.
Uwaga: chociaż zalecamy uruchamianie Gradle z pakietem JDK 11, możesz zmienić JDK używany do uruchamiania Gradle w oknie Struktura projektu. Zmiana tego ustawienia spowoduje tylko zmianę pakietu JDK używanego do uruchamiania Gradle. Nie zmieni to pakietu JDK używanego do uruchamiania samego Studio.
Zgodność Studio z wtyczką Android Gradle (AGP)
W Android Studio w wersji 4.2 można otwierać projekty korzystające z protokołu AGP w wersji 3.1 lub nowszej, pod warunkiem że AGP obsługuje Gradle w wersji 4.8.1 lub nowszej. Więcej informacji o zgodności Gradle znajdziesz w artykule o aktualizowaniu Gradle.
Optymalizacja kompilacji Gradle dla JDK 11
Ta aktualizacja do JDK 11 ma wpływ na domyślną konfigurację modułu czyszczenia pamięci JVM, ponieważ JDK 8 używa równoległego modułu do czyszczenia pamięci, a JDK 11 korzysta z kolektora śmieci G1.
Aby potencjalnie zwiększyć wydajność kompilacji, zalecamy przetestowanie kompilacji Gradle przy użyciu równoległego kolektora czyszczenia pamięci. W gradle.properties
ustaw te opcje:
org.gradle.jvmargs=-XX:+UseParallelGC
Jeśli w tym polu znajdują się już inne opcje, dodaj nową opcję:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Aby zmierzyć szybkość kompilacji w różnych konfiguracjach, przeczytaj o profilowaniu kompilacji.
Pliki DEX nieskompresowane w pakietach APK, gdy minSdk
ma wartość 28 lub więcej.
AGP domyślnie pakuje pliki DEX nieskompresowane w pakietach APK, gdy minSdk
ma wartość 28 lub więcej. Powoduje to zwiększenie rozmiaru pliku APK, ale zmniejsza rozmiar instalacji na urządzeniu i przybliżony rozmiar pobieranego pliku.
Aby wymusić utworzenie pakietu skompresowanych plików DEX przez AGP, możesz dodać do pliku build.gradle
ten fragment:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
Pakowanie skompresowanych bibliotek natywnych za pomocą DSL
Zalecamy tworzenie pakietów bibliotek natywnych w postaci nieskompresowanej, ponieważ zmniejsza to rozmiar instalacji aplikacji, zmniejsza się rozmiar pobieranej aplikacji i przyspiesza wczytywanie aplikacji. Jeśli jednak chcesz, by wtyczka Androida do obsługi Gradle w pakiecie skompresowanych bibliotek natywnych podczas tworzenia aplikacji ustaw w pliku build.gradle
aplikacji ustawienie useLegacyPackaging
na true
:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Flaga useLegacyPackaging
zastępuje atrybut extractNativeLibs
w pliku manifestu. Więcej informacji znajdziesz w informacjach o wersji: Biblioteki natywne domyślnie spakowane nieskompresowane.