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

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

תאימות

רמת ה-API המקסימלית שנתמכת בפלאגין Android Gradle 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 | תיקון 2 לגרסה 2023.2.1 ו-AGP 8.3.2 (אפריל 2024)

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

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

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

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

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

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

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

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

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

אם בפרויקט שלכם נעשה שימוש בקטלוג גרסאות שהוגדר בפורמט הקובץ TOML, תוכלו לערוך את המשתנים שהגדרתם שם דרך התצוגה Variables בתיבת הדו-שיח Project Structure (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 (מבנה הפרויקט)

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

הבעיות או המגבלות הבאות ידועות בתמיכה של Android Studio ב-Gradle Version Catalogs.

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

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

  • אין תמיכה בניווט בקובצי build של KTS: עדיין אין תמיכה בניווט להגדרת יחסי תלות בקטלוג גרסאות באמצעות הקשה על Control‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

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

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

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

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

ב-Android Studio מוצגות אזהרות על שגיאות בקוד בקובצי 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. אם יש גרסה כזו, הכלי גם מציע לעבור אליה.compileSdk חשוב לזכור ששדרוג של Android Studio עשוי לחייב גם שדרוג של AGP. AGP מציג גם אזהרה בחלון הכלי Build אם גרסת compileSdk שבה נעשה שימוש בפרויקט לא נתמכת בגרסה הנוכחית של AGP.

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

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

כיווץ מדויק של משאבים מופעל כברירת מחדל

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

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

בעיות שתוקנו

Android Gradle plugin 8.3.0

בעיות שתוקנו
Android Gradle Plugin
Build cache is redundant for PackageForUnitTest task
[AGP 8.1.0] ‎./gradlew test fails with "Unable to find manifest output" if both splits.abi.isEnable and testOptions.unitTests.isIncludeAndroidResources are true
בניית מודל AGP נכשלת עם גרסאות build מורכבות בתצוגת עץ של Gradle
הכלי לכווץ משאבים גורם לשינוי של מזהי המשאבים, מה שמוביל לקריסות בסביבת זמן הריצה
בדיקת גרסת Gradle המינימלית לא פועלת בגרסה השנייה של ה-build ואילך
Execution failed for task ':app:mergeReleaseClasses' after Updating AGP from 8.0.2 to 8.1.0
[Gradle 8.4][upgrade] Integration test failure after upgrade due to use of deprecated feature in kotlin gradle plugin
לא בודקים את קיומם של קובצי שכבת-על של מניפסט במהלך שלב ההגדרה
קישור פג למסמך Gradle בשגיאה MergeJavaResWorkAction
Gradle 8.1 מפר את האחסון במטמון של ההגדרות בגלל ‎ .gradle/.android/analytics.settings
אסור להשתמש ב-AGP ב-ProjectComponentIdentifier.projectPath בלי ProjectComponentIdentifier.build
יש לצמצם או להסיר את הרישום ביומן ברמת המידע של AGP‏ "Analytics other plugin to proto: …"
[Gradle 8.4][upgrade] File operation during configuration in ProcessJavaResTask breaks config caching
Variant API כדי לקבל טבלת סמלים (R.txt)
הפלאגין העצמאי של lint לא מטפל בצורה תקינה ביחסי התלות של gradleApi()‎
מסמכי kDocs באיכות נמוכה בנכסים או בכיתות של AGP. 'VariantOutput.enable' מציע שצריך להחליף אותו ב-'VariantOutput.enable'
לא ניתן להתקין פרופילי גרסאות זמינות ב-AGP 8.3.0-alpha02 במארחים של Windows
אכיפה של 'android.enableDexingArtifactTransform=true'
[Gradle 8.4][upgrade] Integration test failure after upgrade due to file handling in configuration phase
AGP 8.3.0-alpha-02 – ‏'שגיאה: נכשל ביצוע הדה-סריאליזציה של מאגר המשאבים שנשמר במטמון'.
[Gradle 8.4][upgrade] Integration test failure after upgrade due file handling in configuration phase of TestLabBuildService
AGP 8.1.0 מסיר את האפליקציה אחרי הרצת בדיקות עם מכשירי מדידה – 7.4.2 לא מסיר
טרנספורמציה של קובץ APK מובילה לשגיאה ב-ListingFileRedirectTask
טרנספורמציה של הארטיפקט ASSETS מניבה מיקומי קלט/פלט שבורים
העלאת android.experimental.r8.dex-startup-optimization=true לברירת המחדל
מעבר ל-API החדש של התאמת ההגדרות של Gradle
קומפילציית המשאבים נכשלת כשמנסים לעדכן את קומפילטור Kotlin ל-IDEA 21.3
פונקציית get()‏ (מצב תגובה) עם API של ארטיפקטים
שדרוג המאפיין AGP‏ 'android.lint.printStackTrace' למצב יציב
AGP 8.1.0: dynamic feature: Implicit dependency between exportReleaseConsumerProguardFiles and extractProguardFiles cause compilation errors
נראה ש-`variant.unitTest.jniLibs.addGeneratedSourceDirectory` לא עושה כלום
עדכון מנתח ה-XML שמשמש ב-AGP לצורך תאימות ל-Gradle 8.4
כלי jacoco בחבילת הגרסה AGP 8.0.1 לא משפיע
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 חדשים,
הקישור ל'פרויקטים מופרדים' בהגדרות הסטודיו מוביל למקום הלא נכון.
יש לציין אפשרויות להכללת מקורות שנוצרו ב-Javadoc וב-SourceJar
דרוש תיקון מהיר לאי-התאמה בין compileSdk לבין התלות ב-minCompileSdkVersion
[Gradle] ‏tools:overrideLibrary צריך לתמוך בכוכבית (*)
ממשק המשתמש קופא בזמן עריכת המניפסט
לא ניתן להגדיר את גרסת JaCoCo ב-AGP 8.2.0
המשימה 'התקנה' של Android Gradle Plugin 8.2.0 נכשלת בפרויקט שמשתמש בתכונות דינמיות
המשימה 'התקנה' של Android Gradle Plugin 8.2.0 נכשלת בפרויקט שמשתמש בתכונות דינמיות
Dexer‏ (D8)
[desugared library] Desugared library version 2.1 is not compatible with previous versions of R8
האם האופטימיזציות פועלות גם עם D8 בלבד?
Lint
[Lint] TranslucentViewDetector קורסת בפונקציה filterIncident וגורמת ל-lint להפיק תוצאה שגויה
TranslucentViewDetector צריך לקבל את הערך 'behind'
Android Lint נכשל בספריית KMP עם השגיאה 'לנכס 'variantInputs.name' אין ערך מוגדר'.
TranslucentViewDetector report wrong line in manifest
lintDebug מדווח באופן שגוי על אזהרות UseTomlInstead כשמשתמשים ביחסי תלות בפרויקט
בעיות לא צפויות מפרויקט אחר שסומנו על ידי Android Lint
בדיקת LINT לזיהוי תוצאות חיוביות כוזבות של משאבים שלא בשימוש בתוך קישורים ומאזינים לקליק
לא ניתן לטעון קובץ jar של בדיקת איתור שגיאות קוד מותאמת אישית: לא ניתן להמיר Node ל-TreeNode
Lint visitAnnotationUsage לא נקרא לשימוש בקטגוריות עם הערות בהצהרות על משתנים
Lint 31.0.2 נכשל עם java.util.NoSuchElementException: Array is empty.
אין אזהרה של Lint לגבי kotlin.text.MatchNamedGroupCollection#get(String) שדורשת API 26
lint:TypographyQuotes false negatives: more than one escaped apostrophe are ignored
תוצאה חיובית שגויה של גלאי InvalidId ב-AGP 8.0.2
הוספת בעיות מסוג LintError לקו הבסיס של איתור שגיאות
תיקון מהיר של Lint לא פועל ומוביל לשגיאה ב-IDE
כשל לא עקבי בבדיקה בגלל ניתוח חלקי
הדגשה לא חוקית של אזהרה שהיא תוצאה חיובית שגויה
Lint visitAnnotationUsage לא נקרא לשימוש בקטגוריות עם הערות בהצהרות על משתנים
ייתכן ש-Unused Resources Processor ימחק את קובץ ה-build של Gradle
בדיקת איתור שגיאות בקוד של NewApi לא מבינה את השדה הסופי 'isAtleastU() && otherCondition()'
StackOverflow מ-`LintClient.getSdkHome`
Android Studio / Lint לא מדווחים מתי יחסי התלות ב'פלטפורמה' לא מעודכנים
באג: אין הצעה לעדכון התלות ב-Firebase-bom
Project Structure (וגם Gradle (?)) לא מאתרים את יחסי התלות של Firebase BOM כדי לשדרג אותם לגרסה חדשה יותר.
שילוב איתור שגיאות בקוד
שגיאת איתור שגיאות בקוד (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 causes subclass of LinearLayoutManager to crash
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() מחזירה ערך ריק
הבדיקה SimpleKotlinEnumUnboxingTest נכשלת בבוט kotlin_dev

Android Gradle plugin 8.3.1

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

Android Gradle plugin 8.3.2

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