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

פלאגין Android Gradle 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
  }
}

מגניב

android {
  androidResources {
    generateLocaleConfig true
  }
}

‫Android Lint מכיל bytecode שמטרגט את JVM 17

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

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

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

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

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

Kotlin

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

מגניב

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

התראות לגבי ניסויים

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

סימון נוסף ב ערך ברירת מחדל הערות
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false אם מפעילים את ההגדרה הזו בלי לציין הגדרות חתימה,‏ AGP ישתמש בהגדרת החתימה של ניפוי הבאגים שמוגדרת כברירת מחדל כשמריצים build שאפשר ליצור ממנו פרופיל או לנפות בו באגים. ההתראה הזו מושבתת כברירת מחדל כדי לעודד את יוצרי הגרסאות להצהיר על הגדרות חתימה ספציפיות של פרופילים.
android.experimental.library.desugarAndroidTest AGP 8.0 false הדגל הזה מאפשר ליוצרי ספריות להפעיל desugaring של ספריית הליבה עבור קובצי APK של בדיקות בלי להשפיע על קובץ ה-AAR שנוצר, למשל באמצעות linting. אנחנו מתכננים לתמוך בהתנהגות הזו ב-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 מדפיס את ה-stacktrace אם הוא קורס. הדגל הזה מאפשר את אותן פעולות כמו משתנה הסביבה LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 ללא מציין את המספר המקסימלי של מכשירים מנוהלים בו-זמנית של Gradle‏ (AVD) שיהיו פעילים בכל נקודת זמן. אם הערך הוא 0 או שלילי, אין מספר מקסימלי של מכשירים.
android.experimental.testOptions.installApkTimeout AGP 8.0 ללא משך הזמן הקצוב לתפוגה בשניות להתקנת APK. אם הערך הוא 0 או שלילי, הוא יוגדר לערך ברירת מחדל על ידי UTP.

בעיות שתוקנו

פלאגין Android Gradle‏ 8.1.0

בעיות שתוקנו
Android Gradle Plugin
בעיות ב-`com.android.build.gradle.tasks.ShaderCompile` עם מטמון ההגדרות
הוספה למשאבי Java באמצעות ממשקי AGP API גורמת לשבירת מטמון ההגדרות
‫[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so is packaged inside the APK
‫KGP קורא את המניפסט במהלך ההגדרה, וגורם לביטול התוקף של מטמון ההגדרות כשמשנים את המניפסט
הודעת האזהרה לא ברורה כשמופיעה בעיה במניפסט הממוזג
שדרוג ל-AGP 7.4 מוביל ל-StackOverflowError
‫ClassNotFoundException בתכונה דינמית שתלויה ישירות בפרויקט משנה של ספריית Kotlin
הפעולה processDebugUnitTestManifest נכשלת עם placeholders של מניפסטים לגרסאות בדיקה
הפעולה processDebugUnitTestManifest נכשלת עם placeholders של מניפסטים לגרסאות בדיקה
מאפיין מרחב השמות כנראה שייך ל-HasAndroidResources
אי אפשר להשבית את ההודעה 'קובצי Gradle השתנו מאז הסינכרון האחרון של הפרויקט'
ההודעה 'מומלץ להשתמש בתוסף חדש יותר של Android Gradle' מוצגת כשאין תוסף חדש יותר
הפעולה processDebugUnitTestManifest נכשלת עם placeholders של מניפסטים לגרסאות בדיקה
דגל בוליאני להשבתת הבדיקה של SDK למהדר ב-CheckAarMetadataTask
שגיאת build מפנה לרמת API‏ 34, שלא קיימת
הגדרת JVM toolchain לא משפיעה על הערך של targetCompatibility ב-JavaCompile
לרשומות של קישורי עומק לניווט עם דומיינים שרשומים כתווים כלליים לחיפוש אין מאפיין android:host במניפסט הממוזג
המשימה processDebugMainManifest נכשלה מאז Android Gradle Plugin 8.1
אפשר להסיר את AnalyticsRecordingTask?
התוכן של output-metadata.json לא עקבי
אפשר להסיר את AnalyticsRecordingTask?
התוכן של output-metadata.json לא עקבי
הגדרת JVM toolchain לא משפיעה על הערך של targetCompatibility ב-JavaCompile
לרשומות של קישורי עומק לניווט עם דומיינים שרשומים כתווים כלליים לחיפוש אין מאפיין android:host במניפסט הממוזג
המשימה processDebugMainManifest נכשלה מאז Android Gradle Plugin 8.1
‫Android Studio לא מתייחס למשתנה הסביבה STUDIO_GRADLE_JDK
סוגי מקורות בהתאמה אישית צריכים ליצור ערכות מקורות מרובות
צריך לעדכן את ה-API של DependenciesInfoBuilder ואת המסמכים
‫DexingNoClasspathTransform (minSdk >= 24) עם יעד Java 11 נכשל בגלל חברים חסרים בקבוצה
השיטה DslExtension.Builder.extendProjectWith() לא פועלת כמו שמתואר ב-Groovy
נוסף VariantSelector.withFlavor API שלא משתמש ב-kotlin.Pair
‫AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) has a cache miss because `proguard.txt` has changed
המניפסט הממוזג של האפליקציה מכיל את המאפיינים extractNativeLibs ו-useEmbeddedDex מהתלויות
‫AGP: חשיפת הנתיב לכלי AIDL ולקובץ AIDL של המסגרת כ-API ציבורי
בקשה: לאפשר ל-IDE להציע תיקון לבעיה PermittedSubclasses requires ASM9
באג: האפשרות 'הפעלת KSP ושימוש במעבד KSP לתלות הזו במקום זאת' פשוט מעבירה לאתר
‫Gradle 8.1 גורם לבעיות במטמון ההגדרות בגלל ‎ .gradle/.android/analytics.settings
‫generateLocaleConfig ב-AGP 8.1.0 משתמש בסדר לא דטרמיניסטי, שגורם לבעיות בבנייה שניתנת לשחזור
Dexer (D8)
הסרת הסוכר (desugaring) של ספריית הליבה גורמת לקריסת האפליקציה אחרי עדכונים אחרונים.
‫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 לא בודק המרות חוקיות של מקבלי שיחות
‫TypedArray#close (API 31) לא מבוטל, אבל AS לא מציג אזהרה כשמשתמשים בו ב-try-with-resources
באג: אזהרה חיובית שגויה לגבי הוצאה משימוש של הספק 'BC' החל מ-Android P...‎
תוצאה חיובית שגויה של Lint לגבי remember אחרי שדרוג Kotlin לגרסה 1.8.0
אזהרת Lint חיובית כוזבת לגבי בדיקות SDK_INT שמתבצעות בתוך שיטה עם פרמטר enum
בדיקת ה-lint של TypographyQuotes לא פועלת על מרכאות עם תו בריחה
בדיקת ה-lint של TrustAllX509TrustManager מסמנת באופן שגוי ממשקים שמרחיבים את X509TrustManager
עיצוב מחדש רק של הקוד שהוסיפו בתיקון מסוג החלפה
‫Lint: תצוגה מקדימה של כוונות יוצרת חריגה עבור ReplaceStringQuickFix
Shrinker (R8)
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
‫R8 ב-AGP 8 גורם לבעיות בשירות Google Fit
הצגה לא נכונה של מידע על קובץ המקור עם שמות שיוריים שחופפים לשמות הקלט
ה-build של Compose נכשל ב-R8 עם ArrayIndexOutOfBoundsException
קוד פשוט שקשור ל-StringBuilder לא כולל קריאה ל-tail כדי להוסיף במצב release או 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 for java.lang.reflect.Executable

פלאגין Android Gradle‏ 8.1.2

בעיות שתוקנו
Android Gradle Plugin
‫androidResources לא זמין במודול ספריית Android
‫[AGP 8.1.0] הפקודה ‎./gradlew test נכשלת עם השגיאה Unable to find manifest output אם גם splits.abi.isEnable וגם testOptions.unitTests.isIncludeAndroidResources מוגדרים כ-true
Shrinker (R8)
‫Kotlin 1.9 גורם להשמדה של ביטויי למדה של Kotlin על ידי R8 אם בדיקות הערך null מוסרות
הקומפילציה של play-services-measurement-21.3.0-runtime.jar נכשלת ב-R8 עם השגיאה 'זוהה ערך לא מוגדר במהלך הקומפילציה'

פלאגין Android Gradle‏ 8.1.3

בעיות שתוקנו
Android Gradle Plugin
‫[AGP 8.1.0] הפקודה ‎./gradlew test נכשלת עם השגיאה Unable to find manifest output אם גם splits.abi.isEnable וגם testOptions.unitTests.isIncludeAndroidResources מוגדרים כ-true
כשל בבנייה אחרי עדכון ל-AGP 8.1

פלאגין Android Gradle‏ 8.1.4

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