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

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

תאימות

רמת ה-API המקסימלית שנתמכת על ידי Android Gradle Plugin 8.3 היא רמת API‏ 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 8.3.

גרסאות תיקון

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

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

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

‫Android Studio Iguana | 2023.2.1 Patch 1 ו-AGP 8.3.1 (מרץ 2024)

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

תמיכה ב-Gradle Version Catalogs

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

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

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

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

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

אם הפרויקט שלכם משתמש בקטלוג גרסאות שמוגדר בפורמט קובץ TOML, אתם יכולים לערוך את המשתנים שהגדרתם שם דרך תיבת הדו-שיח מבנה הפרויקט בתצוגה משתנים (קובץ > מבנה הפרויקט > משתנים) ב-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: נכון לעכשיו, התמיכה בהשלמת קוד, בניווט ובתיבת הדו-שיח 'מבנה הפרויקט' ב-Android Studio זמינה רק לקטלוגים של גרסאות שמוגדרים בפורמט קובץ TOML. עם זאת, עדיין אפשר להוסיף קטלוג גרסאות ישירות לקובץ settings.gradle ולהשתמש בתלות שלו בפרויקט.

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

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

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

  • בתיבת הדו-שיח Project Structure (מבנה הפרויקט) ב-Android Studio מוצגים כמה קובצי קטלוג אם הם נמצאים בתיקיית השורש gradle, אבל לא מוצגים קטלוגים של composite 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

החל מגרסה 8.3.0-alpha02 של Android Gradle Plugin, כשמריצים 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‏ 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
העברת המאפיין android.lint.printStackTrace של AGP למצב יציב
‫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
העברת המאפיין android.lint.printStackTrace של AGP למצב יציב
בקשה להוספת תכונה: קידום 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
AGP 8.0.2 lint InvalidId detector false positive
בעיות LintError נוספו לקובצי הבסיס של Lint
הכלי Quickfix Lint לא פועל וגורם לשגיאה ב-IDE
כשל לא עקבי בבדיקה בגלל ניתוח חלקי
הדגשה לא תקינה של אזהרה שהיא תוצאה חיובית שגויה
הפונקציה Lint visitAnnotationUsage לא נקראת לשימושים במחלקות עם הערות בהצהרות משתנים
יכול להיות שהכלי Unused Resources Processor ימחק קובץ build של Gradle
בדיקת ה-lint של NewApi לא מבינה שדה סופי של 'isAtleastU() && otherCondition()‎'
‫StackOverflow מ-`LintClient.getSdkHome`
‫Android Studio / Lint לא מציינים מתי התלויות ב-'platform' לא עדכניות
באג: אין הצעה לעדכן את התלות ב-Firebase-bom
מבנה הפרויקט (וגריידל (?)) לא מזהה תלויות (dependencies) של Firebase BOM שצריך לשדרג לגרסה חדשה יותר.
Lint Integration
שגיאת Lint‏ DuplicatePlatformClasses מתלות testImplementation
Shrinker (R8)
‫R8 לא פועל אחרי שדרוג מ-AGP 8.0.2 ל-8.1.0
‫isShrinkResources מבצע אופטימיזציה מוגזמת בגרסאות 8.3.0-alpha11 עד alpha14
קריסה של Flurry SDK עם 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

פלאגין Android Gradle‏ 8.3.1

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

פלאגין Android Gradle‏ 8.3.2

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