פלאגין של 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 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 גדולים באמצעות התקנה מצטברת של 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, AGP 4.2 מסנן הודעות מ-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
החל מ-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.
כדי לשפר את ביצועי הבנייה, מומלץ לבצע בדיקות של בניית Gradle באמצעות איסוף נתונים מקבילי של אשפה. ב-gradle.properties מגדירים את ההגדרות הבאות:
org.gradle.jvmargs=-XX:+UseParallelGCאם כבר מוגדרות אפשרויות אחרות בשדה הזה, מוסיפים אפשרות חדשה:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGCכדי למדוד את מהירות הבנייה באמצעות הגדרות שונות, אפשר לעיין במאמר בנושא יצירת פרופיל של הבנייה.
קובצי 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++ דחוסות כשמבצעים build של האפליקציה, צריך להגדיר את useLegacyPackaging ל-true בקובץ build.gradle של האפליקציה:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
הדגל useLegacyPackaging מחליף את מאפיין המניפסט extractNativeLibs. מידע נוסף זמין בהערת הגרסה בנושא ספריות מקוריות שנארזות כברירת מחדל ללא דחיסה.