Wtyczka Androida do obsługi Gradle w wersji 4.2.0 (marzec 2021 r.)
Zgodność
Minimalna wersja | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 6.7.1 | Nie dotyczy | Więcej informacji znajdziesz w artykule Aktualizowanie Gradle. |
Narzędzia do kompilowania pakietu SDK | 30.0.2 | 30.0.2 | Zainstaluj lub skonfiguruj narzędzia do kompilowania pakietu SDK. |
NDK | Nie dotyczy | 21.4.7075529 | Zainstaluj lub skonfiguruj inną wersję NDK. |
Nowe funkcje
Ta wersja wtyczki Gradle do Androida zawiera te nowe funkcje:
Domyślnie wersja języka Java 8
Począwszy od wersji 4.2, AGP 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 Java 8.
Aby zachować stare działanie, w pliku na poziomie modułu build.gradle.kts
lub build.gradle
określ Java 7 w sposób jawny:
// 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 pliku Android Gradle plugin 4.2 zastępuje części kompilatora zasobów AAPT2, co może poprawić wydajność kompilacji, zwłaszcza na komputerach z systemem Windows. Nowy kompilator zasobów JVM jest domyślnie włączony.
Obsługa podpisywania w wersji 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ć jeden lub oba te formaty w kompilacji, dodaj do pliku build.gradle
lub build.gradle.kts
na poziomie modułu te właściwości:
// 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 przyrostowej APK za pomocą ADB w Androidzie 11. Ten nowy znacznik odpowiada za etap podpisywania pliku APK w procesie wdrażania.
Konfigurowanie podpisywania aplikacji na podstawie wariantu
Teraz możesz włączać i wyłączać podpisywanie aplikacji w pliku Android Gradle wtyczka na podstawie wariantu.
Ten przykład pokazuje, jak skonfigurować podpisywanie aplikacji na podstawie wariantu za pomocą metody onVariants()
w Kotlinie lub Groovy:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
Nowa właściwość Gradle:
android.native.buildOutput
Aby ograniczyć ilość danych wyjściowych kompilacji, AGP 4.2 filtruje komunikaty z kompilacji natywnych, które używają CMake i ndk-build
, wyświetlając domyślnie tylko dane wyjściowe kompilatora C/C++. Wcześniej dla każdego utworzonego pliku generowano wiersz danych wyjściowych, co powodowało dużą ilość wiadomości informacyjnych.
Jeśli chcesz zobaczyć cały natywny wynik, ustaw nową właściwość Gradle android.native.buildOutput
na verbose
.
Możesz ją ustawić w pliku gradle.properties
lub w wierszu poleceń.
gradle.properties
android.native.buildOutput=verbose
Wiersz polecenia
-Pandroid.native.buildOutput=verbose
Wartością domyślną tej właściwości jest quiet
.
Zmiana działania plików gradle.properties
Od wersji AGP 4.2 nie można już zastąpić właściwości Gradle z podprojektów. Inaczej mówiąc, jeśli w pliku gradle.properties
w podprojekcie zamiast w projekcie głównym zadeklarujesz właściwość, zostanie ona zignorowana.
Na przykład w poprzednich wersjach AGP odczytywał wartości z <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 była obecna w obu plikach <var>projectDir</var>/gradle.properties
i <var>projectDir</var>/app/gradle.properties
, pierwszeństwo miała wartość z <var>projectDir</var>/app/gradle.properties
.
W wersji 4.2 AGP to zachowanie zostało zmienione i nie będzie ona już wczytywać wartości z poziomu gradle.properties
w projektach podrzędnych (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
Gdy działa w Android Studio, narzędzie do kompilowania Gradle korzysta z załączonego pakietu JDK. W poprzednich wersjach JDK 8 był dołączany do Studio. W wersji 4.2 JDK 11 jest jednak dołączony. Używanie nowej wersji pakietu JDK do uruchamiania Gradle może spowodować pewne niezgodności lub wpłynąć na wydajność JVM z powodu zmian w zbieraczu pamięci podręcznej. Te problemy opisujemy poniżej.
Uwaga: chociaż zalecamy uruchamianie Gradle za pomocą JDK 11, w oknie struktury projektu można 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 wtycką Androida do obsługi Gradle (AGP)
Android Studio 4.2 może otwierać projekty korzystające z AGP 3.1 lub nowszej, o ile w AGP jest uruchomione Gradle 4.8.1 lub nowsza wersja. Więcej informacji o zgodności Gradle znajdziesz w artykule Aktualizowanie Gradle.
Optymalizacja kompilacji Gradle pod kątem JDK 11
Ta aktualizacja JDK 11 wpływa na domyślną konfigurację zbieracza śmieci JVM, ponieważ JDK 8 używa równoległego zbieracza śmieci, a JDK 11 używa zbieracza śmieci G1.
Aby potencjalnie zwiększyć wydajność kompilacji, zalecamy testowanie kompilacji Gradle za pomocą równoległego zbieracza. W gradle.properties
ustaw te opcje:
org.gradle.jvmargs=-XX:+UseParallelGC
Jeśli w tym polu są już inne opcje, dodaj nową:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Aby zmierzyć szybkość kompilacji przy użyciu różnych konfiguracji, przeczytaj artykuł Profilowanie kompilacji.
nieskompresowane pliki DEX w plikach APK, gdy minSdk
= 28 lub więcej;
AGP domyślnie pakuje nieskompresowane pliki DEX w plikach APK, gdy wartość minSdk
= 28 lub wyższa. Spowoduje to zwiększenie rozmiaru pliku APK, ale zmniejszy rozmiar instalacyjny na urządzeniu, a rozmiar pliku do pobrania pozostanie mniej więcej taki sam.
Aby wymusić skompresowanie plików DEX przez AGP, dodaj do pliku build.gradle
te informacje:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
Pakowanie skompresowanych bibliotek natywnych za pomocą DSL
Zalecamy pakowanie bibliotek natywnych w formie nieskompresowanej, ponieważ powoduje to zmniejszenie rozmiaru instalacji i pobrania aplikacji oraz skrócenie czasu ładowania aplikacji dla użytkowników. Jeśli jednak chcesz, aby wtyczka Androida do obsługi Gradle pakowała skompresowane biblioteki natywne podczas kompilowania aplikacji, w pliku build.gradle
aplikacji ustaw wartość useLegacyPackaging
na true
:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Flaga useLegacyPackaging
zastępuje atrybut pliku manifestu extractNativeLibs
. Więcej informacji znajdziesz w informacji o wersji Nieskompresowane biblioteki natywne są domyślnie pakowane.