פלאגין Android Gradle 7.0.0 (יולי 2021)
הפלאגין Android Gradle 7.0.0 הוא גרסה ראשית שכוללת מגוון של ותכונות ושיפורים.
7.0.1 (אוגוסט 2021)
העדכון הקטן הזה כולל תיקוני באגים שונים. כדי לראות רשימה של תיקוני באגים חשובים, אפשר לקרוא את הפוסט הקשור גרסה של הבלוג 'עדכונים'.
תאימות
גרסת המינימום | גרסת ברירת המחדל | הערות | |
---|---|---|---|
גרדל | 7.0.2 | 7.0.2 | מידע נוסף על עדכון Gradle |
כלים לבניית SDK | 30.0.2 | 30.0.2 | התקנה או הגדרה של כלים לבניית SDK. |
NDK | לא רלוונטי | 21.4.7075529 | מתקינים או מגדירים גרסה אחרת של ה-NDK. |
JDK | 11 | 11 | למידע נוסף, אפשר לעיין בהגדרה של גרסת ה-JDK. |
JDK 11 נדרש כדי להריץ AGP 7.0
כשמשתמשים בפלאגין Android Gradle גרסה 7.0, כדי לבנות את האפליקציה שלך, JDK 11 שנדרשת כדי להפעיל את Gradle. חבילת Android Studio Arctic Fox כוללת את JDK 11 ואת מגדיר את Gradle להשתמש בו כברירת מחדל, כלומר רוב Android Studio המשתמשים לא צריכים לשנות את ההגדרות האישיות בפרויקטים שלהם.
אם צריך להגדיר באופן ידני את בגרסת JDK שמשמשת את AGP בתוך Android Studio, צריך להשתמש ב-JDK 11 ומעלה.
כשמשתמשים ב-AGP ללא תלות ב-Android Studio, צריך לשדרג את גרסת ה-JDK עד
הגדרת משתנה הסביבה JAVA_HOME
או האפשרות -Dorg.gradle.java.home
של שורת הפקודה.
לספריית ההתקנה של JDK 11.
חשוב לשים לב ש-SDK Manager ו-AVD Manager נמצאים בחבילת ה-SDK Tools שהוצאה משימוש לא פועלים עם JDK 11. כדי להמשיך להשתמש ב-SDK Manager וב-AVD Manager עם AGP 7.0 ומעלה, עליך לעבור לגרסאות החדשות של הכלים הנוכחי כלי שורת הפקודה Android SDK חבילה.
יציבות ב-API של וריאנט
הגרסה החדשה של וריאנט API היא יציבה עכשיו. לעיון בממשקים החדשים com.android.build.api.variant והדוגמאות פרויקט gradle-recipes ב-GitHub. כחלק וריאנט API, הוספנו כמה קובצי ביניים, שנקראים באמצעות פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) גרפי. ניתן להשיג באופן בטוח את פריטי המידע האלה, כמו המניפסט הממוזג, והתאמה אישית באמצעות שימוש ביישומי פלאגין וקוד של צד שלישי.
נמשיך להרחיב את וריאנט API על ידי הוספת פונקציות חדשות. ולהגדיל את מספר פריטי הביניים שאנחנו מציעים בהתאמה אישית.
שינויים בהתנהגות של איתור שגיאות בקוד (lint)
בקטע הזה מתוארים כמה שינויים בהתנהגות של Linux ב-Android Gradle יישומי פלאגין 7.0.0.
איתור שגיאות בקוד (lint) משופר ליחסי תלות של ספריות
עכשיו, הרצת אימות השגיאות בקוד עם checkDependencies = true
מהירה יותר
יותר מבעבר. לפרויקטים של Android שכוללים אפליקציה עם ספרייה
של יחסי התלות, מומלץ להגדיר את checkDependencies
true
כמו שמוצג למטה, וכדי להפעיל איתור שגיאות בקוד (lint) דרך
./gradlew :app:lint
, שתנתח את כל התלות
נפרדים במקביל ומפיקים דוח יחיד, שכולל בעיות
על האפליקציה ועל כל יחסי התלות שלה.
מגניב
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
מעכשיו המשימות של איתור השגיאות בקוד יכולות להיות UP-TO-DATE
אם המקורות והמשאבים של המודול לא השתנו, ניתוח השגיאות בקוד
עבור המודול לא צריכה לרוץ שוב. במקרה כזה,
ביצוע המשימה יופיע כ-"UP-TO-DATE" ב-Gradle
הפלט. בעקבות השינוי הזה, כשמריצים איתור שגיאות בקוד במודול אפליקציה עם checkDependencies = true
, רק מודולים שהשתנו
צריכים להריץ את הניתוח שלהם. כתוצאה מכך, Linux יכול לפעול מהר יותר.
כמו כן, אין צורך להריץ את משימת הדוח Linux אם לא הזנת את הנתונים השתנה. בעיה ידועה קשורה היא שאין איתור שגיאות בקוד. פלט הטקסט שמודפס אל stdout אם משימת איתור השגיאות בקוד היא בתאריך עדכני (UP-TO) (גיליון מס' 191897708).
הרצת איתור שגיאות בקוד במודולים של תכונות דינמיות
ב-AGP אין יותר תמיכה בהרצה של שגיאות בקוד ממודולים של תכונות דינמיות.
הרצת איתור שגיאות בקוד ממודול האפליקציה המתאים תריץ את
את המודולים של התכונות הדינמיות וכוללים את כל הבעיות שזוהו בו שגיאות בקוד (lint) של האפליקציה
שלנו. בעיה ידועה קשורה לכך היא שבמהלך הפעלת איתור שגיאות בקוד
עם checkDependencies = true
ממודול של אפליקציה,
יחסי תלות של ספריות תכונות דינמיות לא נבדקים, אלא אם הם גם אפליקציה
של יחסי התלות (בעיה
#191977888).
מתבצע איתור שגיאות בקוד על וריאנט המוגדר כברירת מחדל בלבד
הרצת ./gradlew :app:lint
מפעילה עכשיו איתור שגיאות בקוד עבור
הווריאנט שמוגדר כברירת מחדל. בגרסאות קודמות של AGP, השירות היה מפעיל איתור שגיאות בקוד עבור כל
וריאציות של אותו מודל.
חסרות אזהרות מחלקה ב-R8 shrinker
ל-R8 בצורה מדויקת יותר
מטפל באופן עקבי בכיתות חסרות ובאפשרות -dontwarn
.
לכן, צריך להתחיל לבדוק את אזהרות המחלקה החסרות שנשלחו
של R8.
כשמערכת R8 נתקלת בהפניה לכיתה שלא מוגדרת באפליקציה שלכם, או אחד מיחסי התלות שלו, הוא יפיק אזהרה שתופיע ב-build הפלט. לדוגמה:
R8: Missing class: java.lang.instrument.ClassFileTransformer
משמעות האזהרה הזו היא שהגדרת הכיתה
אין אפשרות למצוא את java.lang.instrument.ClassFileTransformer
בזמן ניתוח קוד האפליקציה. אומנם בדרך כלל המשמעות היא שיש שגיאה,
יכול להיות שצריך להתעלם מהאזהרה הזו. שתי סיבות נפוצות
כדי להתעלם מהאזהרה:
-
ספריות שמטרגטות את ה-JVM והמחלקה החסרה הן של JVM סוג הספרייה (כמו בדוגמה שלמעלה).
-
אחד מיחסי התלות שלך משתמש ב-API עם זמן הידור בלבד.
כדי להתעלם מאזהרה לגבי כיתה חסרה, אפשר להוסיף -dontwarn
כלל לקובץ proguard-rules.pro
שלך. לדוגמה:
-dontwarn java.lang.instrument.ClassFileTransformer
לנוחיותכם, AGP תיצור קובץ שמכיל את כל
כללים חסרים, כתיבתם לנתיב קובץ כגון כך:
app/build/outputs/mapping/release/missing_rules.txt
מוסיפים את
כללים לקובץ proguard-rules.pro
כדי להתעלם מאזהרות.
ב-AGP 7.0, הודעות כיתתיות חסרות יופיעו כאזהרות,
להפוך אותן לשגיאות באמצעות הגדרה
android.r8.failOnMissingClasses = true
אינץ'
gradle.properties
. ב-AGP 8.0, האזהרות האלה יהפכו
שפוגעות ב-build שלך. ניתן לשמור על ההתנהגות של AGP 7.0 עד
מוסיף את האפשרות -ignorewarnings
proguard-rules.pro
, אבל זה לא מומלץ.
הוסר מטמון ה-build של הפלאגין של Android Gradle
מטמון ה-build של AGP הוסר ב-AGP 4.1. הושק בעבר ב-AGP 2.3 כדי להשלים את מטמון ה-build של Gradle, מטמון ה-build של AGP הוחלף לגמרי באמצעות מטמון ה-build של Gradle ב-AGP 4.1. השינוי הזה לא משפיע זמן build.
ב-AGP 7.0, בנכס android.enableBuildCache
,
android.buildCacheDir
, וגם
משימה אחת (cleanBuildCache
) הוסרה.
שימוש בקוד המקור של Java 11 בפרויקט
עכשיו אפשר להדר עד קוד מקור של Java 11 בפרויקט של האפליקציה, וכך לאפשר להשתמש בתכונות שפה חדשות יותר, כמו שיטות של ממשק פרטי, למחלקות אנונימיות ולתחביר של משתנים מקומיים לפרמטרים של lambda.
כדי להפעיל את התכונה הזו, צריך להגדיר את compileOptions
גרסת Java ומגדירים את compileSdkVersion
ל-30 ואילך:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
הגדרות התלות הוסרו
ב-AGP 7.0, התצורות הבאות (או היקפי התלות) הוסר:
-
compile
בהתאם לתרחיש לדוגמה, הערך הזה הוחלפה ב-api
אוimplementation
.
רלוונטי גם לווריאציות מסוג *Compile, לדוגמה:debugCompile
. -
provided
הערך הזה הוחלף בטקסטcompileOnly
.
רלוונטי גם לווריאציות *שניתנו, לדוגמה:releaseProvided
-
apk
הערך הזה הוחלף בטקסטruntimeOnly
. -
publish
הערך הזה הוחלף בטקסטruntimeOnly
.
ברוב המקרים, ה-AGP השדרוג של Assistant יעביר באופן אוטומטי את הפרויקט הגדרות אישיות.
שינוי נתיב במהלך הידור (compiling) ל-Android פלאגין של Gradle
אם אתם מבצעים הידור מול הפלאגין Android Gradle,
נתיב הכיתה עשוי להשתנות. כי AGP משתמשת עכשיו ב-api/implementation
באופן פנימי, ייתכן שחלק מפריטי המידע שנוצרו בתהליך הידור (Artifact) יוסרו
נתיב הכיתה. אם אתם תלויים בתלות של AGP בזמן הידור (compile), עליכם לוודא
להוסיף אותה כתלות מפורשת.
הוספה של ספריות מקוריות במשאבי Java התיקייה לא נתמכת
בעבר, יכולנו להוסיף ספרייה מקומית בתיקיית משאבים של Java,
לרשום את התיקייה באמצעות android.sourceSets.main.resources.srcDirs
כדי שהספרייה המקורית תחולץ ותווסף לגרסה הסופית
APK החל מ-AGP 7.0, אין תמיכה בספריות מקוריות ואין ספריות מקוריות
המערכת מתעלמת מתיקיית משאבי Java. במקום זאת, עליך להשתמש בשיטת DSL שמיועדת
ספריות מקוריות, android.sourceSets.main.jniLibs.srcDirs
. עבור
מידע נוסף:
איך להגדיר
קבוצות מקור.
בעיות מוכרות
בקטע הזה מתוארות בעיות ידועות שקיימות בפלאגין של Android Gradle 7.0.0.
חוסר תאימות לפלאגין Kotlin Multiplatform של 1.4.x
פלאגין Android Gradle 7.0.0 תואם ל- קוטלין פלאגין מרובה פלטפורמות 1.5.0 ואילך. פרויקטים שמשתמשים ב-Kotlin כדי להשתמש ב-Android Gradle, צריך לעדכן את התמיכה במגוון פלטפורמות ל-Kotlin 1.5.0 פלאגין 7.0.0. כדי לעקוף את הבעיה, אפשר לשדרג לאחור את הפלאגין של Android Gradle ל- 4.2.x, למרות שזה לא מומלץ.
מידע נוסף זמין במאמר הבא: KT-43944.
חסר פלט של איתור שגיאות בקוד
לא מודפס פלט טקסט של איתור שגיאות בקוד ל-stdout כשהמשימה של איתור השגיאות בקוד עדכני (גיליון מס' 191897708). לקבלת הקשר נוסף, אפשר להיכנס שינויים בהתנהגות של איתור שגיאות בקוד. הבעיה הזו תתוקן בפלאגין של Android Gradle בגרסה 7.1.
לא כל יחסי התלות של ספריות תכונות דינמיות נבדקים
כשמפעילים איתור שגיאות בקוד (lint) עם checkDependencies = true
מודול אפליקציה, יחסי תלות של ספריות תכונות דינמיות לא נבדקים אלא אם
הם גם יחסי תלות של אפליקציות
(גיליון מס' 191977888).
כדי לעקוף את הבעיה, אפשר להריץ את המשימה של איתור השגיאות בקוד בספריות האלה. כדי לקבל הקשר נוסף,
כדאי לעיין במאמר שינויים בהתנהגות של איתור שגיאות בקוד.