פלאגין של Android Gradle גרסה 4.2.0 (מרץ 2021)
תאימות
| גרסת המינימום | גרסת ברירת המחדל | הערות | |
|---|---|---|---|
| Gradle | 6.7.1 | לא רלוונטי | יש מידע נוסף במאמר בנושא עדכון Gradle. |
| SDK Build Tools | 30.0.2 | 30.0.2 | צריך להתקין או להגדיר את SDK Build Tools. |
| NDK | לא רלוונטי | 21.4.7075529 | צריך להתקין או להגדיר גרסה אחרת של NDK. |
תכונות חדשות
הגרסה הזו של הפלאגין של Android Gradle כוללת את התכונות החדשות הבאות.
גרסה 8 של שפת Java כברירת מחדל
החל מגרסה 4.2, AGP ישתמש ברמת השפה של Java 8 כברירת מחדל. Java 8 מספקת גישה לכמה תכונות חדשות של השפה, כולל ביטויי למבדה, הפניות לשיטות ושיטות ממשק סטטיות. הרשימה המלאה של התכונות הנתמכות מופיעה במסמכי התיעוד של Java 8.
כדי לשמור על ההתנהגות הישנה, צריך לציין את Java 7 באופן מפורש בקובץ build.gradle.kts או build.gradle ברמת המודול:
// 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"
}
}קומפיילר חדש של משאבי JVM
מהדר משאבים חדש של JVM בפלאגין של Android Gradle בגרסה 4.2 מחליף חלקים של מהדר המשאבים AAPT2, וכך משפר את ביצועי ה-build, במיוחד במכונות Windows. הקומפיילר החדש של משאבי JVM מופעל כברירת מחדל.
עכשיו יש תמיכה בחתימה בגרסאות v3 ו-v4
פלאגין של Android Gradle 4.2 תומך עכשיו בפורמטים של חתימה APK v3 ו-APK v4.
כדי להפעיל אחד מהפורמטים האלה או את שניהם ב-build, מוסיפים את המאפיינים הבאים לקובץ build.gradle או build.gradle.kts ברמת המודול:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}חתימת APK v4 מאפשרת לפרוס במהירות חבילות APK גדולות באמצעות התקנת APK מצטברת של ADB ב-Android 11. הדגל החדש הזה מטפל בשלב החתימה על ה-APK בתהליך הפריסה.
הגדרת חתימת אפליקציה לכל וריאנט
עכשיו אפשר להפעיל או להשבית את חתימת האפליקציות בפלאגין של Android Gradle לכל וריאנט.
בדוגמה הזו מוסבר איך להגדיר חתימת אפליקציה לכל וריאנט באמצעות השיטה onVariants() ב-Kotlin או ב-Groovy:
androidComponents {
onVariants(selector().withName("fooDebug")) {
signingConfig {
enableV1Signing false
enableV2Signing true
}
}
}
מאפיין Gradle חדש:
android.native.buildOutput
כדי לצמצם את העומס בפלט של ה-build, גרסה 4.2 של AGP מסננת הודעות מ-builds של C/C++ שמשתמשים ב-CMake וב-ndk-build, ומציגה רק פלט של קומפיילר C/C++ כברירת מחדל. בעבר, נוצרה שורת פלט לכל קובץ שנבנה, וכתוצאה מכך נוצרה כמות גדולה של הודעות מידע.
כדי לראות את כל הפלט של C/C++, צריך להגדיר את המאפיין החדש של Gradle android.native.buildOutput לערך verbose.
אפשר להגדיר את המאפיין הזה בקובץ gradle.properties או דרך שורת הפקודה.
gradle.properties
android.native.buildOutput=verbose
שורת הפקודה
-Pandroid.native.buildOutput=verbose
ערך ברירת המחדל של המאפיין הזה הוא quiet.
שינוי בהתנהגות של קובצי gradle.properties
החל מגרסה 4.2 של AGP, אי אפשר יותר לשנות מאפייני Gradle מפרויקטי משנה. במילים אחרות, אם תצהירו על מאפיין בקובץ gradle.properties בפרויקט משנה במקום בפרויקט הבסיס, המערכת תתעלם ממנו.
לדוגמה, בגרסאות קודמות, AGP היה קורא ערכים מ-<var>projectDir</var>/gradle.properties, מ-<var>projectDir</var>/app/gradle.properties, מ-<var>projectDir</var>/library/gradle.properties וכו'. במודולים של אפליקציות, אם אותו מאפיין Gradle היה קיים גם ב-<var>projectDir</var>/gradle.properties וגם ב-<var>projectDir</var>/app/gradle.properties, הערך מ-<var>projectDir</var>/app/gradle.properties היה מקבל עדיפות.
ב-AGP 4.2, ההתנהגות הזו השתנתה, ו-AGP לא יטען ערכים מ-gradle.properties בפרויקטים משניים (למשל, <var>projectDir</var>/app/gradle.properties). השינוי הזה משקף את ההתנהגות החדשה של Gradle ותומך בשמירת הגדרות במטמון.
מידע נוסף על הגדרת ערכים בקובצי gradle.properties זמין במסמכי התיעוד של Gradle.
שינויים בתאימות ובהגדרות של Gradle
כשמפעילים את כלי ה-build של Gradle ב-Android Studio, הוא משתמש ב-JDK שמצורף ל-Studio. בגרסאות קודמות, JDK 8 היה כלול ב-Studio. אבל בגרסה 4.2, JDK 11 הוא זה שמצורף. כשמשתמשים ב-JDK החדש שכלול בחבילה כדי להריץ את Gradle, יכול להיות שיהיו בעיות תאימות או השפעה על הביצועים של JVM בגלל שינויים במנגנון איסוף האשפה. הבעיות האלה מתוארות בהמשך.
הערה: למרות שאנחנו ממליצים להריץ את Gradle עם JDK 11, אפשר לשנות את ה-JDK שמשמש להרצת Gradle בתיבת הדו-שיח Project Structure. שינוי ההגדרה הזו ישנה רק את ה-JDK שמשמש להפעלת Gradle, ולא ישנה את ה-JDK שמשמש להפעלת Studio עצמו.
תאימות של Studio עם הפלאגין של Android Gradle (AGP)
ב-Android Studio 4.2 אפשר לפתוח פרויקטים שמשתמשים ב-AGP 3.1 ואילך, בתנאי ש-AGP מריץ את Gradle 4.8.1 ואילך. מידע נוסף על תאימות של Gradle זמין במאמר עדכון Gradle.
אופטימיזציה של גרסאות build של Gradle ל-JDK 11
העדכון הזה ל-JDK 11 משפיע על הגדרת ברירת המחדל של JVM garbage collector, כי JDK 8 משתמש ב-parallel garbage collector ו-JDK 11 משתמש ב-G1 garbage collector.
כדי לשפר את ביצועי ה-build, מומלץ לבדוק את ה-builds של Gradle באמצעות איסוף אשפה מקביל. ב-gradle.properties, מגדירים את הפרטים הבאים:
org.gradle.jvmargs=-XX:+UseParallelGCאם כבר מוגדרות אפשרויות אחרות בשדה הזה, מוסיפים אפשרות חדשה:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGCכדי למדוד את מהירות ה-build עם הגדרות שונות, אפשר לעיין במאמר יצירת פרופיל ל-build.
קובצי DEX לא דחוסים בחבילות APK כש-minSdk = 28 ומעלה
כברירת מחדל, AGP אורז עכשיו קובצי DEX לא דחוסים בקובצי APK כש-minSdk = 28 או יותר. זה מגדיל את ה-APK, אבל מקטין את גודל ההתקנה במכשיר, וגודל ההורדה נשאר פחות או יותר אותו דבר.
כדי לאלץ את AGP לארוז את קובצי ה-DEX הדחוסים, אפשר להוסיף את מה שמופיע כאן למטה לקובץ build.gradle:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
שימוש ב-DSL כדי לארוז ספריות C/C++ דחוסות
מומלץ לארוז ספריות C/C++ בצורה לא דחוסה, כי כך האפליקציה תהיה קטנה יותר, ההורדה שלה תהיה קטנה יותר והיא תיטען מהר יותר אצל המשתמשים. עם זאת, אם אתם רוצים שהפלאגין של Android Gradle יארוז ספריות C/C++ דחוסות כשאתם יוצרים את האפליקציה, צריך להגדיר את useLegacyPackaging לערך true בקובץ build.gradle של האפליקציה:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
הדגל useLegacyPackaging מחליף את מאפיין המניפסט extractNativeLibs. למידע נוסף, ראו את נתוני הגרסה ספריות Native נארזות כברירת מחדל ללא דחיסה.