פלאגין Android Gradle 8.1.0 (יולי 2023)

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

תאימות

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

Kotlin DSL הוא ברירת המחדל להגדרת build

בפרויקטים חדשים, כברירת מחדל, נעשה שימוש ב-Kotlin DSL ‏ (build.gradle.kts) להגדרת ה-build. כך אפשר ליהנות מחוויית עריכה טובה יותר מאשר ב-Groovy DSL‏ (build.gradle), עם הדגשת תחביר, השלמת קוד ואפשרות לנווט להצהרות. שימו לב: אם אתם משתמשים ב-AGP 8.1 וב-Kotlin DSL להגדרת build, מומלץ להשתמש ב-Gradle 8.1 כדי ליהנות מחוויית השימוש הטובה ביותר. למידע נוסף, ראו מדריך ההעברה ל-Kotlin DSL.

תמיכה אוטומטית בשפה לכל אפליקציה

החל מגרסה Android Studio Giraffe Canary 7 וגרסה AGP 8.1.0-alpha07, אפשר להגדיר את האפליקציה כך שתתמוך באופן אוטומטי בהעדפות שפה לכל אפליקציה. על סמך משאבי הפרויקט, הפלאגין של Android Gradle יוצר את הקובץ LocaleConfig ומוסיף לו הפניה בקובץ המניפסט הסופי, כך שאין צורך לעשות זאת באופן ידני. AGP משתמש במשאבים בתיקיות res של מודולי האפליקציה ובכל יחסי התלות של מודולי הספריות כדי לקבוע את האזורים הגיאוגרפיים שצריך לכלול בקובץ LocaleConfig.

חשוב לדעת: התכונה האוטומטית של שינוי השפה לכל אפליקציה תומכת באפליקציות עם Android 13 (רמת API‏ 33) ואילך. כדי להשתמש בתכונה, צריך להגדיר את הערך של compileSdkVersion ל-33 ומעלה. כדי להגדיר העדפות שפה לכל אפליקציה בגרסאות קודמות של Android, עדיין צריך להשתמש בממשקי ה-API ובבוררי השפות באפליקציה.

כדי להפעיל תמיכה אוטומטית בשפות לכל אפליקציה, מציינים את ברירת המחדל של האזור:

  1. בתיקייה res של מודול האפליקציה, יוצרים קובץ חדש בשם resources.properties.
  2. בקובץ resources.properties, מגדירים את מיקום ברירת המחדל באמצעות התווית unqualifiedResLocale. כדי ליצור את שמות הלוקאלים, משלבים את קוד השפה עם קודי הסקריפט והאזור האופציונליים, ומפרידים ביניהם באמצעות מקף:

    • שפה: צריך להשתמש בקוד ISO 639-1 של שתי או שלוש אותיות.
    • סקריפט (אופציונלי): משתמשים בקוד ISO 15924.
    • אזור (אופציונלי): אפשר להשתמש בקוד ISO 3166-1-alpha-2 בן שתי האותיות או בקוד UN_M.49 בן שלוש הספרות.

    לדוגמה, אם אזור ברירת המחדל שלכם הוא אנגלית (ארה"ב):

        unqualifiedResLocale=en-US
        

AGP מוסיף את לוקאל ברירת המחדל הזה ואת כל הלוקאלים החלופיים שציינתם, באמצעות ספריות values-* בתיקייה res, לקובץ LocaleConfig שנוצר באופן אוטומטי.

התמיכה האוטומטית בשפות ספציפיות לאפליקציות מושבתת כברירת מחדל. כדי להפעיל את התכונה, משתמשים בהגדרה generateLocaleConfig בבלוק androidResources {} בקובץ build.gradle.kts ברמת המודול (קובץ build.gradle אם משתמשים ב-Groovy):

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint מכיל קוד בייט שמטרגט את JVM 17

החל מ-AGP 8.1.0-alpha04, ‏Android Lint מכיל קוד בייט שמטרגט את JVM 17. אם כותבים בדיקות איתור שגיאות מותאמות אישית, צריך לבצע הידור באמצעות JDK 17 ואילך ולציין את הערך jvmTarget = '17' באפשרויות של קומפילטור Kotlin.

למידע נוסף על הכלי לזיהוי שגיאות בקוד, ראו שיפור הקוד באמצעות בדיקות לזיהוי שגיאות בקוד.

הגדרת הדחיסה של ספריות מקוריות הועברה ל-DSL

החל מ-AGP 8.1.0-alpha10, תופיע אזהרה אם לא תגדירו דחיסת ספרייה מקומית באמצעות ה-DSL במקום המניפסט. בהנחיות הבאות מוסבר איך לעדכן את ההגדרות כדי להשתמש ב-DSL. כדי לקבל עזרה בביצוע העדכונים האלה, תוכלו להשתמש בכלי לשדרוג של AGP (כלים > כלי לשדרוג של AGP).

כדי להשתמש בספריות מקומיות לא דחוסות, מסירים את המאפיין android::extractNativeLibs מהמניפסט ומוסיפים את הקוד הבא לקובץ build.gradle.kts ברמת המודול (קובץ build.gradle אם משתמשים ב-Groovy):

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

דגלים ניסיוניים ל-build

אלה דגלים ניסיוניים להגדרת ה-build שזמינים ב-AGP 8.1.

סימון נוספו ב- ערך ברירת מחדל הערות
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false הפעלה של האפשרות הזו בלי לציין הגדרות חתימה גורמת ל-AGP להשתמש בהגדרת ברירת המחדל לחתימה לצורך ניפוי באגים כשמריצים גרסה זמינה לפרופיל או לצורך ניפוי באגים. הדגל הזה מושבת כברירת מחדל כדי לעודד את מחברי ה-build להצהיר על הגדרות חתימה ספציפיות לפרופיל.
android.experimental.library.desugarAndroidTest AGP 8.0 false הדגל הזה מאפשר לבוני הספריות להפעיל הסרה של סוכר בספריית הליבה לחבילות APK לבדיקה, בלי להשפיע על ה-AAR שנוצר, למשל באמצעות איתור שגיאות בקוד. בסופו של דבר, אנחנו מתכננים לתמוך בהתנהגות הזו ב-Variant API.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false אם ההגדרה הזו מופעלת, אפשר להגדיר ב-Gradle Managed Devices סוג מכשיר מותאם אישית שיכול להיות מסופק על ידי פלאגין. צריך להפעיל את הדגל הזה אם רוצים להשתמש בפלאגין של Firebase Test Lab.
android.lint.printStackTrace AGP 8.0 false אם ההגדרה מופעלת, Android lint מדפיס סטאק-טריי אם מתרחש קריסה. הדגל הזה יש לו את אותן יכולות כמו משתנה הסביבה LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 ללא מציין את המספר המקסימלי של מכשירי Gradle Managed Devices‏ (AVD) שיכולים להיות פעילים בו-זמנית בכל רגע נתון. אם הערך הוא 0 או שלילי, אין מספר מכשירים מקסימלי.
android.experimental.testOptions.installApkTimeout AGP 8.0 ללא משך הזמן שתוקף הזמן הקצוב לתפוגה (timeout) להתקנת קובץ APK, בשניות. אם הערך הוא 0 או שלילי, הוא יוגדר לערך ברירת מחדל על ידי UTP.

בעיות שתוקנו

Android Gradle plugin 8.1.0

בעיות שתוקנו
Android Gradle Plugin
בעיות ב-`com.android.build.gradle.tasks.ShaderCompile` במטמון ההגדרות
הוספה למשאבים של Java באמצעות ממשקי API של AGP גורמת לשבירה של מטמון ההגדרות
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so is packaged inside the APK
KGP קורא את המניפסט במהלך ההגדרה, ומבטל את מטמון ההגדרות כשהמניפסט משתנה
הודעת האזהרה של ה-build לא ברורה כשיש בעיה במניפסט הממוזג
שדרוג ל-AGP 7.4 גורם ל-StackOverflowError
ClassNotFoundException בתכונה דינמית שתלויה ישירות בפרויקט המשנה של ספריית Kotlin
processDebugUnitTestManifest נכשל עם placeholder של מניפסט לגרסאות הבדיקה
processDebugUnitTestManifest נכשל עם placeholder של מניפסט לגרסאות הבדיקה
סביר להניח שנכס המרחב המשותף שייך ל-HasAndroidResources
אי אפשר להשבית את ההודעה 'קבצי Gradle השתנו מאז הסנכרון האחרון של הפרויקט'
"מומלץ להשתמש בפלאגין חדש יותר של Android Gradle" כשאין פלאגין חדש יותר
processDebugUnitTestManifest נכשל עם placeholder של מניפסט לגרסאות הבדיקה
דגל בוליאני להשבתת בדיקת ה-SDK של הידור ב-CheckAarMetadataTask
שגיאת build מתייחסת לרמת API 34, שלא קיימת
הגדרת toolchain של JVM לא משפיעה על הערך של targetCompatibility ב-JavaCompile
רשומות של קישורי עומק לניווט עם דומיינים של תווים כלליים לחיפוש לא מכילות את המאפיין android:host במניפסט הממוזג
המשימה processDebugMainManifest נכשלה מאז Android Gradle Plugin 8.1
אפשר להסיר את AnalyticsRecordingTask?
התוכן של output-metadata.json לא עקבי
אפשר להסיר את AnalyticsRecordingTask?
התוכן של output-metadata.json לא עקבי
הגדרת toolchain של JVM לא משפיעה על הערך של targetCompatibility ב-JavaCompile
רשומות של קישורי עומק לניווט עם דומיינים של תווים כלליים לחיפוש לא מכילות את המאפיין android:host במניפסט הממוזג
המשימה processDebugMainManifest נכשלה מאז Android Gradle Plugin 8.1
Android Studio לא מתייחס למשתנה הסביבה STUDIO_GRADLE_JDK
סוגי מקורות בהתאמה אישית צריכים ליצור קבוצות מקורות עם כמה טעמים
DependenciesInfoBuilder needs API update + doc
DexingNoClasspathTransform‏ (minSdk >= 24) עם יעד Java 11 נכשל בגלל רכיבי עץ חסרים
DslExtension.Builder.extendProjectWith() לא פועלת כפי שמתואר ב-Groovy
הוספת VariantSelector.withFlavor API שלא משתמש ב-kotlin.Pair
ב-AndroidLintAnalysisTask‏ (:lintAnalyzeExternalRelease) חל החמצה של מטמון כי קובץ proguard.txt השתנה
המניפסט הממוזג של האפליקציה מכיל את המאפיינים extractNativeLibs ו-useEmbeddedDex מיחסי התלות
AGP: חשיפת הנתיב לכלי AIDL ולקובץ AIDL של המסגרת כ-API ציבורי
בקשה: לאפשר לסביבת הפיתוח האינטגרטית להציע תיקון לבעיה 'נדרשת גרסה ASM9 ל-PermittedSubclasses'
באג: הקישור 'Enable KSP and use the KSP processor for this dependency instead' (הפעלת KSP ושימוש במעבד KSP לצורך התלות הזו במקום זאת) מפנה לאתר
Gradle 8.1 מפר את האחסון במטמון של ההגדרות בגלל ‎ .gradle/.android/analytics.settings
הפונקציה generateLocaleConfig ב-agp 8.1.0 משתמשת בסדר לא דטרמיניסטית, וכתוצאה מכך ה-builds לא ניתנים לשחזור
Dexer‏ (D8)
ספריית הליבה מקריסה את האפליקציה לאחר עדכונים אחרונים.
agp 8.1.0 regression with API 21 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Check failed: !method->IsAbstract()
Lint
Lint בודק הטמעות בטוחות של ממשקים רק בממשקים שהוגדרו ישירות, ולא בממשקים שעברו בירושה
Lint לא בודק הטמעות חוקיות של נתונים (casts) לנמעני קריאה
לא בוצעה הסרה של הסוכר מ-TypedArray#close‏ (API 31), אבל AS לא מציג אזהרה כשמשתמשים ב-try-with-resources
באג: אזהרה חיובית שגויה לגבי "הספק 'BC' הוצא משימוש, ומ-Android P…"
Lint false positive about remember after Kotlin upgrade to 1.8.0
אזהרה של Lint על תוצאה חיובית שגויה בבדיקות SDK_INT שמבוצעות בתוך שיטה עם פרמטר enum
בדיקת האיות של TypographyQuotes לא פועלת על קווים נטויים עם בריחה
בדיקת האיתור של שגיאות בקוד (lint) של TrustAllX509TrustManager מסמנת באופן שגוי ממשקים שמרחיבים את X509TrustManager
שינוי הפורמט של הקוד שהוכנס בתיקון החלפה
Lint: intention preview throws exception for ReplaceStringQuickFix
Shrinker‏ (R8)
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
R8 ב-AGP 8 גורם לשיבושים בשירות Google Fit
המערכת לא מייצגת בצורה נכונה מידע על קובץ מקור עם שמות שיותר מאחד מהם חופפים לשמות הקלט
R8 נכשל במהלך ה-build של Compose עם ArrayIndexOutOfBoundsException
קוד פשוט שקשור ל-StringBuilder חסר קריאה ל-tail כדי להוסיף בגרסת build או במצב debuggable=false
מקרה קיצון בשיטה VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds()‎
dex-startup-optimization גורם ל-java.lang.VerifyError: Rejecting class
קריסה עם שגיאת אימות ב-Android מגרסה 12 ואילך

פלאגין של Android Gradle 8.1.1

בעיות שתוקנו
Dexer‏ (D8)
Java 16 Records: equals(null) throws NullPointerException
Shrinker‏ (R8)
java.lang.VerifyError: Verifier rejected class
ה-build נתקע ב-:minifyReleaseWithR8 כשמשתמשים בספריית Apache POI
דחייה של קריאה כשמפעילים את האופטימיזציה של r8
NoClassDefFoundError עבור java.lang.reflect.Executable

Android Gradle plugin 8.1.2

בעיות שתוקנו
Android Gradle Plugin
androidResources לא זמין במודול הספרייה של Android
[AGP 8.1.0] ‎./gradlew test fails with "Unable to find manifest output" if both splits.abi.isEnable and testOptions.unitTests.isIncludeAndroidResources are true
Shrinker‏ (R8)
בגרסה 1.9 של Kotlin, פונקציות הלמה של Kotlin נהרסות על ידי R8 אם בדיקות הערך null מוסרות
R8 נכשל עם הודעת השגיאה "Undefined value encountered during compilation" עבור play-services-measurement-21.3.0-runtime.jar

Android Gradle plugin 8.1.3

בעיות שתוקנו
Android Gradle Plugin
[AGP 8.1.0] ‎./gradlew test fails with "Unable to find manifest output" if both splits.abi.isEnable and testOptions.unitTests.isIncludeAndroidResources are true
כשל ב-build אחרי עדכון ל-AGP 8.1

Android Gradle plugin 8.1.4

בעיות שתוקנו
Android Gradle Plugin
לא להריץ את המשימה dexing על הכיתות של פרויקטים משניים שכבר עברו תהליך dex באמצעות טרנספורמציות של ארטיפקטים