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

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

תאימות

רמת ה-API המקסימלית שנתמכת בפלאגין של Android Gradle 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 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

‫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, במקום דרך קטלוגים של גרסאות.

  • הפונקציה 'חיפוש שימושים' לא נתמכת: עדיין אין תמיכה בחיפוש שימושים של משתנה בקטלוג גרסאות בקובצי build אחרים, בין אם קובץ ה-build הוא ב-KTS או ב-Groovy. כלומר, שימוש ב-Control+click (או ב-Command+click ב-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 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 עם desugaring מופעל
‫AGP 8.3 מפסיק את משימת zipApksFor
שילוב Lint
‫Lint לא הצליח לזהות את התלות ב-KMP

Android Gradle plugin 8.3.1

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

פלאגין של Android Gradle 8.3.0

בעיות שתוקנו
Android Gradle Plugin
המטמון של ה-Build מיותר למשימה PackageForUnitTest
‫[AGP 8.1.0] הפקודה ‎./gradlew test נכשלת עם השגיאה 'לא ניתן למצוא את פלט המניפסט' אם גם 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][שדרוג] שגיאת בדיקה בשילוב אחרי שדרוג בגלל טיפול בקבצים בשלב ההגדרה
‫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 8.2.0 נכשלת בפרויקט שמשתמש בתכונות דינמיות
משימת ההתקנה של פלאגין של Android Gradle 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
הכלי Quickfix Lint לא פועל וגורם לשגיאה בסביבת הפיתוח המשולבת
שגיאת בדיקה לא עקבית בגלל ניתוח חלקי
הדגשה לא חוקית של אזהרה שהיא חיובית כוזבת
הפונקציה Lint visitAnnotationUsage לא נקראת לשימושים של מחלקות עם הערות בהצהרות משתנים
מעבד המשאבים שלא בשימוש עלול למחוק קובץ build של Gradle
בדיקת ה-lint של NewApi לא מבינה שדה סופי של 'isAtleastU() && otherCondition()‎'
‫StackOverflow מ-`LintClient.getSdkHome`
‫Android Studio / Lint לא מציינים מתי התלויות ב-platform לא עדכניות
באג: אין הצעה לעדכן את התלות ב-Firebase-bom
מבנה הפרויקט (ו-Gradle (?)) לא מזהה תלות ב-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