Android Gradle Plugin 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 כוללת את התכונות החדשות הבאות.
שפת Java בגרסה 8 כברירת מחדל
החל מגרסה 4.2, AGP ישתמש ברמת השפה Java 8 כברירת מחדל. ב-Java 8 יש גישה למספר תכונות חדשות של השפה, כולל ביטויים של פונקציית lambda, הפניות ל-method וממשקי פונקציות סטטיים. הרשימה המלאה של התכונות הנתמכות מופיעה במסמכי העזרה של 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 גדולות באמצעות התקנה מצטברת של APK ב-ADB ב-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
כשכלי ה-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, כי ב-JDK 8 נעשה שימוש באוסף האשפה המקביל, וב-JDK 11 נעשה שימוש באוסף האשפה G1.
כדי לשפר את ביצועי ה-build, מומלץ לבדוק את ה-builds של Gradle באמצעות ה-garbage collector המקביל. ב-gradle.properties
, מגדירים את הפרטים הבאים:
org.gradle.jvmargs=-XX:+UseParallelGC
אם כבר מוגדרות אפשרויות אחרות בשדה הזה, מוסיפים אפשרות חדשה:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
במאמר יצירת פרופיל ל-build מוסבר איך מודדים את מהירות ה-build בהגדרות שונות.
קובצי DEX לא דחוסים בחבילות APK כאשר הערך של minSdk
הוא 28 ואילך
AGP מעכשיו מקפל קובצי DEX לא דחוסים ב-APKs כברירת מחדל כשminSdk
= 28 או יותר. הפעולה הזו גורמת להגדלת גודל ה-APK, אבל היא מובילה לגודל התקנה קטן יותר במכשיר, וגודל ההורדה הוא בערך זהה.
כדי לאלץ את AGP לארוז את קובצי ה-DEX במקום זאת בפורמט דחוס, אפשר להוסיף את הקטע הבא לקובץ build.gradle
:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
שימוש ב-DSL כדי לארוז ספריות מקוריות דחוסות
מומלץ לארוז ספריות מקוריות ללא דחיסה, כי כך גודל ההתקנה של האפליקציה יהיה קטן יותר, גודל ההורדה של האפליקציה יהיה קטן יותר וזמן הטעינה של האפליקציה יהיה מהיר יותר למשתמשים. עם זאת, אם רוצים שפלאגין Android Gradle יארוז ספריות מקוריות דחוסות בזמן ה-build של האפליקציה, צריך להגדיר את הערך של useLegacyPackaging
לערך true
בקובץ build.gradle
של האפליקציה:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
הדגל useLegacyPackaging
מחליף את מאפיין המניפסט extractNativeLibs
. מידע רקע נוסף זמין בהערות הגרסה Native libraries packaged uncompressed by default.