Android Gradle Plugin 7.0.0 (יולי 2021)
Android Gradle plugin 7.0.0 הוא גרסה מרכזית שכוללת מגוון תכונות ושיפורים חדשים.
7.0.1 (אוגוסט 2021)
העדכון המשני הזה כולל תיקוני באגים שונים. כדי לראות רשימה של תיקוני באגים בולטים, אפשר לקרוא את הפוסט הרלוונטי ב בלוג Release Updates.
תאימות
גרסת מינימום | גרסת ברירת המחדל | הערות | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | מידע נוסף זמין במאמר עדכון Gradle. |
SDK Build Tools | 30.0.2 | 30.0.2 | מתקינים או מגדירים את SDK Build Tools. |
NDK | לא רלוונטי | 21.4.7075529 | מתקינים או מגדירים גרסה אחרת של NDK. |
JDK | 11 | 11 | מידע נוסף זמין במאמר הגדרת גרסת ה-JDK. |
נדרש JDK 11 כדי להריץ את AGP 7.0
אם משתמשים בפלאגין Android Gradle 7.0 כדי ליצור את האפליקציה, עכשיו נדרשת גרסה 11 של JDK כדי להריץ את 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 Command-Line Tools הנוכחית.
גרסה יציבה של Variant API
הגרסה החדשה של Variant API יציבה עכשיו. הממשקים החדשים מופיעים בחבילה com.android.build.api.variant, ודוגמאות מופיעות בפרויקט gradle-recipes ב-GitHub. במסגרת Variant API החדש, הוספנו מספר קבצים ביניים שנקראים ארטיפקטים, דרך הממשק Artifacts. אפשר לקבל את הארטיפקטים האלה, כמו המניפסט הממוזג, ולהתאים אותם אישית בבטחה באמצעות קוד ופלאגינים של צד שלישי.
נמשיך להרחיב את Variant API על ידי הוספת פונקציות חדשות והגדלת מספר הארטיפקטים הביניים שאנחנו מציעים להתאמה אישית.
שינויים בהתנהגות של Lint
בקטע הזה מתוארים כמה שינויים בהתנהגות של Lint בפלאגין של Android Gradle בגרסה 7.0.0.
שיפור של איתור שגיאות בקוד (lint) בתלות בספריות
הפעלת איתור שגיאות בקוד באמצעות checkDependencies = true
מהירה יותר עכשיו. בפרויקטים ל-Android שכוללים אפליקציה עם יחסי תלות בספריות, מומלץ להגדיר את checkDependencies
כ-true
כפי שמתואר בהמשך, ולהריץ את ה-lint דרך ./gradlew :app:lint
. הפקודה הזו תנתח את כל המודולים של יחסי התלות במקביל ותייצר דוח אחד שכולל בעיות מהאפליקציה ומכל יחסי התלות שלה.
Groovy
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
מעכשיו אפשר להגדיר משימות Lint כ-UP-TO-DATE
אם המקורות והמשאבים של מודול לא השתנו, אין צורך להריץ שוב את המשימה של ניתוח הקוד. במקרה כזה, הפלט של Gradle יציין את ביצוע המשימה בתור 'עדכני'. בעקבות השינוי הזה, כשמריצים איתור שגיאות בקוד במודול של אפליקציה באמצעות checkDependencies = true
, רק המודולים ששונו יצטרכו להריץ את הניתוח שלהם. כתוצאה מכך, Lint יכול לפעול מהר יותר.
גם אין צורך להריץ את המשימה של דוח ה-Lint אם הקלט שלה לא השתנה. בעיה קשורה ידועה היא שאין פלט טקסט של איתור שגיאות בקוד שמודפס ב-stdout כשמשימה של איתור שגיאות בקוד היא UP-TO-DATE (בעיה מס' 191897708).
הפעלת איתור שגיאות בקוד במודולים של פיצ'רים דינמיים
AGP לא תומך יותר בהרצת איתור שגיאות בקוד (lint) ממודולים של תכונות דינמיות.
הפעלת איתור שגיאות בקוד ממודול האפליקציה התואם תפעיל איתור שגיאות בקוד במודולים של התכונות הדינמיות שלו ותכלול את כל הבעיות בדוח איתור השגיאות בקוד של האפליקציה. בעיה קשורה ידועה: כשמריצים איתור שגיאות בקוד (lint) באמצעות checkDependencies = true
מתוך מודול של אפליקציה, לא מתבצעת בדיקה של יחסי התלות בספריות של תכונות דינמיות, אלא אם הן גם יחסי תלות של האפליקציה (בעיה מס' 191977888).
הפעלת איתור שגיאות בקוד (lint) בגרסה שמוגדרת כברירת מחדל בלבד
הרצת ./gradlew :app:lint
מפעילה עכשיו את איתור השגיאות רק בגרסת ברירת המחדל. בגרסאות קודמות של AGP, המערכת הפעילה את ה-lint לכל הווריאציות.
אזהרות חסרות לגבי סיווג ב-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. מטמון ה-build של AGP, שהוצג בעבר ב-AGP 2.3 כתוספת למטמון ה-build של Gradle, הוחלף לגמרי במטמון ה-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 Upgrade Assistant יעביר את הפרויקט להגדרות החדשות באופן אוטומטי.
שינוי נתיב ה-Classpath בזמן הידור מול פלאגין Android Gradle
אם אתם מבצעים הידור באמצעות הפלאגין של Android Gradle, ייתכן שנתיב ה-classpath של הידור ישתנה. מכיוון ש-AGP משתמש עכשיו בהגדרות api/implementation
באופן פנימי, יכול להיות שחלק מהארכיטקטורות יוסרו מנתיב ה-classpath שלכם. אם אתם תלויים בתלות של AGP בזמן הידור, הקפידו להוסיף אותה כתלות מפורשת.
אי אפשר להוסיף ספריות מקוריות בתיקיית משאבים של 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 Plugin 7.0.0 תואם ל-Kotlin Multiplatform Plugin בגרסה 1.5.0 ואילך. בפרויקטים שמשתמשים בתמיכה של Kotlin למספר פלטפורמות צריך לעדכן ל-Kotlin 1.5.0 כדי להשתמש ב-Android Gradle Plugin 7.0.0. כפתרון זמני, אפשר לשדרג לאחור את הפלאגין של Android Gradle לגרסה 4.2.x, אבל לא מומלץ לעשות זאת.
מידע נוסף זמין בבקשה KT-43944.
פלט חסר של איתור שגיאות
כשמשימה של איתור שגיאות בקוד עדכנית, לא מודפס פלט טקסט של איתור שגיאות בקוד ב-stdout (issue #191897708). תוכלו לקרוא מידע נוסף במאמר שינויים בהתנהגות של איתור שגיאות בקוד. הבעיה הזו תטופל בפלאגין של Android Gradle בגרסה 7.1.
לא כל יחסי התלות בספריות של תכונות דינמיות נבדקים באמצעות איתור שגיאות בקוד
כשמריצים איתור שגיאות בקוד עם checkDependencies = true
מתוך מודול של אפליקציה, יחסי התלות בספריות של תכונות דינמיות לא נבדקים אלא אם הם גם יחסי תלות של האפליקציה (בעיה מס' 191977888).
כדי לעקוף את הבעיה, אפשר להריץ את המשימה lint בספריות האלה. למידע נוסף, ראו שינויים בהתנהגות של איתור שגיאות בקוד.