פלאגין 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 | תיקון 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+קליק (Command+קליק ב-macOS) עדיין לא נתמך בקובצי build שנכתבו באמצעות סקריפט Kotlin.

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

  • הפונקציה Find usages לא נתמכת: עדיין אין תמיכה במציאת שימושים במשתנה של קטלוג גרסאות בקובצי 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
יכול להיות שיהיה קיפאון (deadlock) ב-AGP 8.3 עם תהליך הסרה של סוכר תחבירי מופעל
‫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
המטמון של הבנייה מיותר למשימה 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 כדי לקבל טבלת סמלים (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
תמיכה בתגי מניפסט חדשים,
הקישור ל'פרויקטים מנותקים' בהגדרות של Studio מוביל למקום הלא נכון.
Please provide options to include generated sources on Javadoc and 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 זיהוי תוצאות חיוביות כוזבות של משאבים שלא נעשה בהם שימוש בתוך binding ו-רכיב click listener
לא ניתן לטעון קובץ 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 לא מציינים מתי התלויות ב'פלטפורמה' לא עדכניות
באג: אין הצעה לעדכן את התלות ב-Firebase-bom
מבנה הפרויקט (ו-Gradle (?)) לא מזהה תלויות (dependencies) של Firebase BOM שצריך לשדרג לגרסה חדשה יותר.
שילוב Lint
שגיאת Lint‏ DuplicatePlatformClasses מתלות testImplementation
Shrinker (R8)
‫R8 לא פועל אחרי שדרוג מ-AGP 8.0.2 ל-8.1.0
‫isShrinkResources מבצע אופטימיזציה יתר בגרסאות 8.3.0-alpha11 עד alpha14
קריסת R8 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