פלאגין Android Gradle 8.3.0 (פברואר 2024)

‫Android Gradle Plugin 8.3.0 הוא גרסה מרכזית שכוללת מגוון של תכונות ושיפורים חדשים.

תאימות

רמת ה-API המקסימלית שנתמכת ב-Android Gradle plugin 8.3 היא 34. מידע נוסף על תאימות:

גרסת המינימום גרסת ברירת המחדל פתקים
Gradle 8.4 8.4 יש מידע נוסף במאמר בנושא עדכון Gradle.
SDK Build Tools 34.0.0 34.0.0 צריך להתקין או להגדיר את SDK Build Tools.
NDK לא רלוונטי 25.1.8937393 צריך להתקין או להגדיר גרסה אחרת של NDK.
JDK 17 17 מידע נוסף זמין במאמר בנושא הגדרת גרסת ה-JDK.

אלה תכונות חדשות ב-Android Gradle Plugin 8.3.

גרסאות תיקון

בהמשך מפורטת רשימה של גרסאות התיקון ב-Android Studio Iguana וב-Android Gradle Plugin 8.3.

‫Android Studio Iguana | 2023.2.1 Patch 2 ו-AGP 8.3.2 (אפריל 2024)

העדכון הקטן הזה כולל תיקוני באגים.

‫Android Studio Iguana | תיקון 1 בגרסה 2023.2.1 ו-AGP 8.3.1 (מרץ 2024)

העדכון הקטן הזה כולל תיקוני באגים.

תמיכה בקטלוגים של גרסאות Gradle

‫Android Studio תומך בקטלוגים של גרסאות Gradle שמבוססים על TOML. זו תכונה שמאפשרת לכם לנהל תלויות במיקום מרכזי אחד ולשתף תלויות בין מודולים או פרויקטים. מעכשיו קל יותר להגדיר קטלוגים של גרסאות ב-Android Studio באמצעות הצעות בעורך ושילוב עם תיבת הדו-שיח Project Structure (מבנה הפרויקט). איך מגדירים קטלוגים של גרסאות Gradle או איך מעבירים את ה-build לקטלוגים של גרסאות

השלמת קוד וניווט

‫Android Studio מציע השלמת קוד כשעורכים קטלוג גרסאות בפורמט קובץ TOML או כשמוסיפים תלות מקטלוג גרסאות לקובץ build. כדי להשתמש בהשלמת קוד, מקישים על Ctrl+Space (או על Command+Space ב-macOS). בנוסף, אפשר לעבור במהירות מהפניה לתלות בקובץ build.gradle של האפליקציה למקום שבו היא מוצהרת בקטלוג הגרסאות, על ידי הקשה על Ctrl+b (או על Command+b ב-macOS).

השלמת קוד כשמוסיפים תלות

שילוב עם תיבת הדו-שיח Project Structure (מבנה הפרויקט)

אם הפרויקט שלכם משתמש בקטלוג גרסאות שמוגדר בפורמט קובץ TOML, אתם יכולים לערוך את המשתנים שהגדרתם שם דרך תיבת הדו-שיח Project Structure (מבנה הפרויקט) בתצוגה Variables (משתנים) (File > Project Structure > Variables (קובץ > מבנה הפרויקט > משתנים)) ב-Android Studio. בכל קטלוג גרסאות יש תפריט נפתח שבו מופיעים המשתנים מהקטלוג הזה. כדי לערוך משתנה, לוחצים על הערך שלו ומחליפים אותו. כששומרים את השינויים האלה, קובץ ה-TOML מתעדכן בהתאם.

משתנים מקטלוג גרסאות בתיבת הדו-שיח Project Structure (מבנה הפרויקט)

אפשר גם לעדכן את התלויות בתיבת הדו-שיח Project Structure (מבנה הפרויקט) בתצוגה Dependencies (תלויות) (File > Project Structure > Dependencies (קובץ > מבנה הפרויקט > תלויות)). כדי לעדכן גרסאות באמצעות תיבת הדו-שיח Project Structure, עוברים למודול ולתלות שרוצים לערוך, ואז מעדכנים את השדה Requested Version. כששומרים את השינויים האלה, קובץ ה-TOML מתעדכן בהתאם. שימו לב: אם גרסת התלות הוגדרה באמצעות משתנה, עדכון הגרסה ישירות בדרך הזו יגרום להחלפת המשתנה בערך מקודד. חשוב לדעת שהסרה של תלות מקובץ build, בין אם משתמשים בתיבת הדו-שיח Project Structure ובין אם לא, לא מסירה את התלות מקטלוג הגרסאות.

יחסי תלות מקטלוג גרסאות בתיבת הדו-שיח Project Structure (מבנה הפרויקט)

בעיות ידועות ומגבלות

אלה בעיות או מגבלות ידועות שקשורות לתמיכה בקטלוגים של גרסאות Gradle ב-Android Studio.

  • שגיאה בהדגשת הצהרות של כינויי פלאגין בקובצי סקריפט של Kotlin: כשמוסיפים הצהרת פלאגין מהצורה alias(libs.plugins.example), העורך מוסיף קו אדום מתחת לחלק libs. זו בעיה מוכרת ב-Gradle בגרסה 8.0 ובגרסאות קודמות, והיא תיפתר בגרסה עתידית של Gradle.

  • תמיכה ב-Android Studio רק בקטלוגים של גרסאות בפורמט TOML: נכון לעכשיו, התמיכה בהשלמת קוד, בניווט ובתיבת הדו-שיח Project Structure (מבנה הפרויקט) ב-Android Studio זמינה רק לקטלוגים של גרסאות שמוגדרים בפורמט קובץ TOML. עם זאת, עדיין אפשר להוסיף קטלוג גרסאות ישירות לקובץ settings.gradle ולהשתמש בתלות שלו בפרויקט.

  • ניווט בקובצי build של KTS לא נתמך: ניווט להגדרת תלות בקטלוג גרסאות באמצעות Control+click (או Command+click ב-macOS) עדיין לא נתמך בקובצי build שנכתבו באמצעות סקריפט Kotlin.

  • התלויות מתווספות ישירות בסקריפטים של build: Firebase Assistant מוסיף תלויות ישירות לסקריפטים של build במקום דרך קטלוגים של גרסאות.

  • הפונקציה Find usages לא נתמכת: עדיין אין תמיכה במציאת שימושים במשתנה של קטלוג גרסאות בקובצי build אחרים, בין אם קובץ ה-build הוא ב-KTS או ב-Groovy. כלומר, אם משתמשים בצירוף המקשים Control+קליק (Command+קליק ב-macOS) בהגדרת משתנה בקטלוג גרסאות, לא מגיעים לקובצי ה-build שבהם נעשה שימוש במשתנה.

  • בתיבת הדו-שיח Project Structure (מבנה הפרויקט) ב-Android Studio מוצגים כמה קובצי קטלוג אם הם נמצאים בתיקיית השורש gradle, אבל לא מוצגים קטלוגים של composite build (גרסת build מורכבת). לדוגמה, אם יש לכם שני קובצי קטלוג – אחד לאפליקציה ואחד ל-composite build – בתיבת הדו-שיח Project Structure יוצג רק קובץ הקטלוג של האפליקציה. אפשר להשתמש ב-composite build, אבל צריך לערוך ישירות את קובץ ה-TOML שלו.

תובנות נוספות לגבי SDK: בעיות שקשורות למדיניות

ב-Android Studio, אזהרות לגבי lint מוצגות בקבצים build.gradle.kts ו-build.gradle ובתיבת הדו-שיח Project Structure (מבנה הפרויקט) לגבי ערכות SDK ציבוריות שיש בהן הפרות של מדיניות Play ב-Google Play SDK Index. כדאי לעדכן את כל התלויות שמפירות את מדיניות Play, כי ההפרות האלה עלולות למנוע מכם לפרסם ב-Google Play Console בעתיד. האזהרות על הפרת מדיניות הן בנוסף לאזהרות על גרסה לא עדכנית שמוצגות ב-Android Studio.

תמיכה בגרסת compileSdk ב-Android Studio

אם הפרויקט שלכם משתמש ב-compileSdk שלא נתמך בגרסה הנוכחית של Android Studio, מוצגת אזהרה ב-Android Studio. אם יש גרסה כזו, המערכת גם תציע לעבור לגרסה של Android Studio שתומכת ב-compileSdk שבה נעשה שימוש בפרויקט. חשוב לזכור: יכול להיות ששדרוג של Android Studio ידרוש גם שדרוג של AGP. בנוסף, אם גרסת compileSdk שבה נעשה שימוש בפרויקט לא נתמכת על ידי הגרסה הנוכחית של AGP, מוצגת אזהרה בחלון הכלים Build.

שינויים בהתנהגות של Lint

החל מגרסה Android Gradle plugin 8.3.0-alpha02, כשמריצים lint במודול, מורצים ניתוחים נפרדים של lint עבור הרכיבים הראשיים והרכיבים של הבדיקה במודול. הסיבה לשינוי הזה היא שיפור הביצועים. כדי לחזור להתנהגות הקודמת, צריך להגדיר את android.experimental.lint.analysisPerComponent=false בקובץ android.experimental.lint.analysisPerComponent=false.gradle.properties

הגדרה של כיווץ מדויק של מקורות המידע מופעלת כברירת מחדל

התכונה 'כיווץ מדויק של משאבים', שמסירה רשומות שלא בשימוש מהקובץ resources.arsc ומבטלת קובצי משאבים שלא בשימוש, מופעלת כברירת מחדל. כשמפעילים את ההקטנה הזו, טבלת המשאבים מצטמצמת ורק רשומות של תיקיית res שמופיעות בהפניה נכללות ב-APK.

כדי להשבית את ההקטנה המדויקת של משאבים, מגדירים את הערך של android.enableNewResourceShrinker.preciseShrinking ל-false בקובץ gradle.properties של הפרויקט.

בעיות שתוקנו

Android Gradle Plugin 8.3.2

בעיות שתוקנו
Android Gradle Plugin
יכול להיות מצב של קיפאון ב-AGP 8.3 עם ביטול הסוכר
‫AGP 8.3 מפסיק את משימת zipApksFor
שילוב Lint
‫Lint לא הצליח לזהות את התלות ב-KMP

Android Gradle plugin 8.3.1

בעיות שתוקנו
Android Gradle Plugin
MergeJavaResourcesTask incremental inputs handling issue
שילוב Lint
‫Lint לא יכול לפתור סוגים של קבוצות מקורות מקבילות ב-AGP 8.3.0-rc02

Android Gradle plugin 8.3.0

בעיות שתוקנו
Android Gradle Plugin
המטמון של ה-Build מיותר למשימה PackageForUnitTest
‫[AGP 8.1.0] הפקודה ‎./gradlew test נכשלת עם השגיאה Unable to find manifest output (לא ניתן למצוא את פלט המניפסט) אם הערכים של splits.abi.isEnable ושל testOptions.unitTests.isIncludeAndroidResources הם true
בניית מודל AGP נכשלת עם קומפוזיציות מקוננות של Gradle
כלי לכיווץ מקורות מידע משבש מזהי מקורות מידע, מה שמוביל לקריסות בזמן ריצה
בבנייה השנייה ואחריה לא מתבצעת בדיקה של גרסת Gradle המינימלית
הביצוע נכשל עבור המשימה ':app:mergeReleaseClasses' אחרי העדכון של AGP מגרסה 8.0.2 לגרסה 8.1.0
‫[Gradle 8.4][upgrade] בדיקת השילוב נכשלה אחרי השדרוג בגלל שימוש בתכונה שהוצאה משימוש בפלאגין kotlin gradle
לא לבדוק את קיומם של קובצי שכבת-על של מניפסט במהלך שלב ההגדרה
קישור שבור למסמך Gradle בשגיאה MergeJavaResWorkAction
גרסה Gradle 8.1 גורמת לבעיות במטמון ההגדרות בגלל ‎ .gradle/.android/analytics.settings
‫AGP לא צריך להשתמש ב-ProjectComponentIdentifier.projectPath בלי ProjectComponentIdentifier.build
צריך לצמצם או להסיר את הרישום ביומן ברמת המידע עבור AGP ‏'Analytics other plugin to proto: ...‎'
‫[Gradle 8.4][upgrade] פעולת קובץ במהלך ההגדרה ב-ProcessJavaResTask מפסיקה את השמירה במטמון של ההגדרה
‫Variant API to get symbol table (R.txt)
התוסף העצמאי של lint לא מטפל כראוי בתלות gradleApi()
איכות ירודה של kDocs בכיתות או במאפיינים של AGP. ‫`VariantOutput.enable` מציע להחליף אותו ב-`VariantOutput.enable`
אי אפשר להתקין פרופילים של גרסאות ב-AGP 8.3.0-alpha02 במארחי Windows
החלת האפשרות android.enableDexingArtifactTransform=true
‫[Gradle 8.4][upgrade] כשל בבדיקת שילוב אחרי שדרוג בגלל טיפול בקבצים בשלב ההגדרה
‫AGP 8.3.0-alpha-02 – ‏`Error: Failed to deserialize cached resource repository.`
‫[Gradle 8.4][upgrade] כשל בבדיקת שילוב אחרי שדרוג בגלל טיפול בקבצים בשלב ההגדרה של TestLabBuildService
‫AGP 8.1.0 מסיר את האפליקציה אחרי הפעלת בדיקות עם מכשור – 7.4.2 לא מסיר
המרת APK מובילה לשגיאה ב-ListingFileRedirectTask
הטרנספורמציה של ארטיפקט ASSETS נותנת מיקומי קלט/פלט שבורים
קידום android.experimental.r8.dex-startup-optimization=true להיות ברירת מחדל
מעבר ל-API חדש של התאמת הגדרות Gradle
הידור המשאבים נכשל כשקומפיילר Kotlin מנסה לעדכן ל-IDEA 21.3
‫Reactive get() with artifacts API
העברת מאפיין AGP ‏android.lint.printStackTrace לגרסה יציבה
‫AGP 8.1.0: תכונה דינמית: תלות מרומזת בין exportReleaseConsumerProguardFiles לבין extractProguardFiles גורמת לשגיאות קומפילציה
נראה שהפונקציה `variant.unitTest.jniLibs.addGeneratedSourceDirectory` לא עושה כלום
עדכון מנתח ה-XML שמשמש ב-AGP לתאימות ל-Gradle 8.4
חבילת ההפצה AGP 8.0.1 jacoco instrument לא פועלת
HEDGEHOG REGRESSION: Run button is delayed by a few seconds (Creating spec)
‫AGP 8.3.0-alpha11 יוצר APK של גרסת הפצה שקורס בהפעלה עם android.content.res.Resources$NotFoundException
העברת מאפיין AGP ‏android.lint.printStackTrace לגרסה יציבה
בקשה להוספת תכונה: קידום com.android.build.api.extension.impl.CURRENT_AGP_VERSION ל-API ציבורי
‫SDK Manager צריך להפסיק לשלוח ספאם של פרטי יומן ל-stdout
הפעולה DexArchiveBuilderTaskDelegate נכשלה עם מודול ספרייה של משאבים בלבד
‫AGP7.4 custom plugin variant toTransform for all throw duplicate entry: META-INF/MANIFEST.MF exception
תמיכה בתגי Manifest חדשים,
הקישור ל'פרויקטים מופרדים' בהגדרות של Studio מוביל למקום הלא נכון.
אפשר לספק אפשרויות לכלול מקורות שנוצרו ב-Javadoc וב-SourceJar
צריך לתקן במהירות את הפער בין compileSdk לבין dependency עם minCompileSdkVersion
[Gradle] tools:overrideLibrary should support asterisk (*)
ממשק המשתמש קופא כשעורכים את המניפסט
לא ניתן להגדיר את גרסת JaCoCo ב-AGP 8.2.0
משימת ההתקנה של Android Gradle Plugin 8.2.0 נכשלת בפרויקט שמשתמש בתכונות דינמיות
משימת ההתקנה של Android Gradle Plugin 8.2.0 נכשלת בפרויקט שמשתמש בתכונות דינמיות
Dexer (D8)
‫[desugared library] גרסה 2.1 של desugared library לא תואמת לגרסאות קודמות של R8
האם האופטימיזציות פועלות גם עם D8?
Lint
‫[Lint] קריסת TranslucentViewDetector בפונקציה filterIncident וגורמת ל-Lint להפיק תוצאה שגויה
‫TranslucentViewDetector צריך לקבל את הערך 'behind'
‫Android Lint נכשל בספריית KMP עם השגיאה `property 'variantInputs.name' doesn't have a configured value.`
‫TranslucentViewDetector מדווח על שורה שגויה במניפסט
‫lintDebug מדווח באופן שגוי על אזהרות UseTomlInstead כשמשתמשים בתלות בפרויקט
בעיות לא צפויות מפרויקט אחר שסומנו על ידי Android Lint
בדיקת LINT זיהוי תוצאות חיוביות כוזבות של משאבים לא בשימוש בתוך מאזין של קשירה וקליקים
לא ניתן לטעון קובץ JAR של בדיקת lint מותאמת אישית: אי אפשר להמיר את Node ל-TreeNode
הפונקציה Lint visitAnnotationUsage לא נקראת לשימושים במחלקות עם הערות בהצהרות משתנים
‫Lint 31.0.2 נכשל עם java.util.NoSuchElementException: המערך ריק.
אין אזהרת Lint לגבי kotlin.text.MatchNamedGroupCollection#get(String)‎ שדורשת API ברמה 26
‫lint:TypographyQuotes false negatives: more than one escaped apostrophe are ignored
תוצאה חיובית שגויה של גלאי InvalidId ב-AGP 8.0.2 lint
בעיות LintError נוספו לקובצי הבסיס של Lint
התיקון המהיר של Lint לא פועל וגורם לשגיאה ב-IDE
כשל לא עקבי בבדיקה בגלל ניתוח חלקי
הדגשה לא חוקית של אזהרה שהיא חיובית כוזבת
הפונקציה Lint visitAnnotationUsage לא נקראת לשימושים במחלקות עם הערות בהצהרות משתנים
יכול להיות שהכלי Unused Resources Processor ימחק קובץ build של Gradle
בדיקת ה-lint של NewApi לא מבינה שדה סופי של 'isAtleastU() && otherCondition()‎'
‫StackOverflow מ-`LintClient.getSdkHome`
‫Android Studio / Lint לא מציינים מתי התלויות ב-platform לא עדכניות
באג: אין הצעה לעדכן את התלות ב-Firebase-bom
מבנה הפרויקט (וגריידל (?)) לא מזהה תלות ב-Firebase BOM שצריך לשדרג לגרסה חדשה יותר.
שילוב Lint
שגיאת Lint‏ DuplicatePlatformClasses מתלות testImplementation
Shrinker (R8)
‫R8 לא פועל אחרי שדרוג מ-AGP 8.0.2 ל-8.1.0
‫isShrinkResources מבצע אופטימיזציה יתר בגרסאות 8.3.0-alpha11 עד alpha14
קריסה של Flurry SDK ב-R8 עם AGP 8.2.0
‫Android – R8 גורם לקריסה של מחלקת משנה של LinearLayoutManager
‫R8 v8.2.33, קריסת זמן ריצה מסוג 'java.lang.VerifyError: Bad type on operand stack' אחרי שדרוג
‫[R8 8.3.21] הגודל של R8 8.3.21 גדול ב-1.57MB מ-R8 8.1.56
‫[R8 8.3.21] הגודל של R8 8.3.21 גדול ב-1.57MB מ-R8 8.1.56
‫class.getInterfaces() מחזירה ערך ריק
הבדיקה Test SimpleKotlinEnumUnboxingTest נכשלת בבוט kotlin_dev