פלאגין 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
כלי חדש של Android Gradle plugin 4.2, שהוא מהדר משאבים של JVM, מחליף חלקים של מהדר המשאבים AAPT2, ויכול לשפר את ביצועי ה-build, במיוחד במחשבי Windows. הקומפיילר החדש של משאבי JVM מופעל כברירת מחדל.
יש עכשיו תמיכה בחתימה בגרסאות 3 ו-4
פלאגין 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 גדולים באמצעות ADB התקנה מצטברת של APK ב-Android 11. הדגל החדש הזה מטפל בשלב החתימה על ה-APK בתהליך הפריסה.
הגדרת חתימת אפליקציה לכל וריאנט
עכשיו אפשר להפעיל או להשבית חתימה על אפליקציות בפלאגין Android Gradle לכל וריאנט.
בדוגמה הזו מוסבר איך להגדיר חתימה על אפליקציה לכל וריאנט באמצעות השיטה onVariants() ב-Kotlin או ב-Groovy:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})מאפיין חדש של Gradle:
android.native.buildOutput
כדי לצמצם את העומס בפלט של build, AGP 4.2 מסנן הודעות
מ-builds מקוריים שמשתמשים ב-CMake וב-ndk-build,
וכברירת מחדל מציג רק את הפלט של מהדר C/C++. בעבר, שורת פלט
נוצרה לכל קובץ שנבנה, וכתוצאה מכך נוצרה כמות גדולה של
הודעות מידע.
כדי לראות את כל הפלט המקורי, מגדירים את מאפיין Gradle החדש android.native.buildOutput לערך verbose.
אפשר להגדיר את המאפיין הזה בקובץ gradle.properties או באמצעות שורת הפקודה.
gradle.properties
android.native.buildOutput=verbose
שורת פקודה
-Pandroid.native.buildOutput=verbose
ערך ברירת המחדל של המאפיין הזה הוא quiet.
שינוי בהתנהגות של קובצי gradle.properties
החל מ-AGP 4.2, אי אפשר יותר לבטל את ההגדרה של מאפייני 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
כשמריצים ב-Android Studio, כלי ה-build של Gradle משתמש ב-JDK שכלול ב-Studio. בגרסאות קודמות, JDK 8 נכלל ב-Studio. לעומת זאת, בגרסה 4.2, JDK 11 כלול בחבילה. כשמשתמשים ב-JDK החדש שצורף כדי להריץ את Gradle, יכול להיות שיהיו בעיות תאימות או השפעה על הביצועים של JVM בגלל שינויים ב-garbage collector. הבעיות האלה מתוארות בהמשך.
הערה: מומלץ להריץ את 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, כי ב-JDK 8 נעשה שימוש באיסוף אשפה מקביל, וב-JDK 11 נעשה שימוש באיסוף אשפה מסוג G1.
כדי לשפר את ביצועי הבנייה, מומלץ לבצע בדיקות של קובצי ה-build של 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 לאריזת ספריות מקוריות דחוסות
מומלץ לארוז ספריות מקוריות בצורה לא דחוסה, כי כך גודל ההתקנה של האפליקציה קטן יותר, גודל ההורדה של האפליקציה קטן יותר וזמן הטעינה של האפליקציה מהיר יותר עבור המשתמשים. עם זאת, אם רוצים שפלאגין Android Gradle ידחס ספריות Native כשהאפליקציה נבנית, צריך להגדיר את useLegacyPackaging לערך true בקובץ build.gradle של האפליקציה:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}הדגל useLegacyPackaging מחליף את מאפיין המניפסט extractNativeLibs. מידע נוסף זמין בהערת הגרסה בנושא ספריות מקוריות שנארזות כברירת מחדל ללא דחיסה.