الإصدار 8.1.0 من Android Gradle Plugin (تموز/يوليو 2023)

الإصدار 8.1.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" هو إصدار رئيسي يتضمّن مجموعة متنوّعة من الميزات والتحسينات الجديدة.

التوافق

الإصدار الأدنى الإصدار التلقائي ملاحظات
Gradle من نظام التشغيل Android من نظام التشغيل Android لمزيد من المعلومات، اطّلِع على تحديث Gradle.
أدوات تصميم حزمة تطوير البرامج (SDK) ‫33.0.1 ‫33.0.1 تثبيت أو ضبط أدوات إنشاء حزمة تطوير البرامج (SDK).
NDK لا ينطبق ‫25.1.8937393 تثبيت أو ضبط إصدار مختلف من NDK
JDK 17 17 لمزيد من المعلومات، يُرجى الاطّلاع على ضبط إصدار JDK.

استخدام لغة Kotlin DSL تلقائيًا لإعدادات التصميم

تستخدم المشاريع الجديدة الآن لغة Kotlin DSL (build.gradle.kts) تلقائيًا لإعدادات الإصدار. يوفّر ذلك تجربة تعديل أفضل من Groovy DSL (build.gradle) مع تمييز بناء الجملة وإكمال الرمز البرمجي والتنقّل إلى تعريفات. يُرجى العِلم أنّه في حال استخدام الإصدار 8.1 من "مكوّن Android الإضافي في Gradle" ولغة Kotlin DSL لإعدادات الإصدار، عليك استخدام الإصدار 8.1 من Gradle للحصول على أفضل تجربة. لمزيد من المعلومات، راجِع دليل نقل البيانات إلى Kotlin DSL.

التوافق التلقائي مع اللغة المحدّدة لكل تطبيق

بدءًا من الإصدار التجريبي 7 من Android Studio Giraffe والإصدار 8.1.0-alpha07 من "مكوّن Android الإضافي في Gradle"، يمكنك ضبط تطبيقك تلقائيًا ليتوافق مع إعدادات اللغة المخصصة حسب التطبيقات. استنادًا إلى موارد مشروعك، ينشئ المكوّن الإضافي لنظام Gradle المتوافق مع Android الملف LocaleConfig ويضيف إليه مرجعًا في ملف البيان النهائي، وبالتالي لن تحتاج إلى إجراء ذلك يدويًا. يستخدم المكوّن الإضافي لنظام Gradle في Android الموارد الموجودة في مجلدات res الخاصة بوحدات تطبيقك وأي عناصر اعتمادية لوحدة المكتبة لتحديد اللغات المحلية التي سيتم تضمينها في ملف LocaleConfig.

يُرجى العِلم أنّ ميزة "اللغة التلقائية لكل تطبيق" تتوافق مع التطبيقات التي تعمل بالإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث. لاستخدام الميزة، يجب ضبط قيمة compileSdkVersion على 33 أو أعلى. لضبط إعدادات اللغة المخصصة حسب التطبيقات على الإصدارات السابقة من Android، عليك استخدام واجهات برمجة التطبيقات وأدوات اختيار اللغة داخل التطبيق.

لتفعيل ميزة دعم اللغة التلقائي لكل تطبيق، حدِّد لغة تلقائية:

  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 رمزًا بايت يستهدف الإصدار 17 من JVM

بدءًا من الإصدار 8.1.0-alpha04 من "مكوّن Android Lint"، يتضمّن هذا المكوّن رمزًا بايت يستهدف الإصدار 17 من جهاز JVM. إذا كنت تكتب عمليات فحص مخصّصة باستخدام أداة Lint، عليك إجراء عملية تجميع باستخدام الإصدار 17 من JDK أو إصدار أحدث وتحديد jvmTarget = '17' في خيارات برنامج الترجمة البرمجية في Kotlin.

لمزيد من المعلومات حول أداة lint، راجِع تحسين الرمز باستخدام عمليات التحقّق من lint.

تم نقل إعداد ضغط المكتبة المجمّعة من رموز برمجية أصلية إلى DSL

اعتبارًا من الإصدار 8.1.0-alpha10 من "مكوّن Android الإضافي لبرنامج Gradle"، ستتلقّى تحذيرًا إذا لم تضبط إعدادات ضغط المكتبة المجمّعة من رموز برمجية أصلية باستخدام لغة DSL بدلاً من ملف البيان. توضّح الإرشادات التالية كيفية تعديل الإعدادات لاستخدام لغة DSL. للحصول على مساعدة في إجراء هذه التحديثات، استخدِم "مساعد ترقية" Android Gradle Plugin (أدوات > مساعد ترقية Android Gradle Plugin).

لاستخدام المكتبات الأصلية غير المضغوطة، عليك إزالة السمة android::extractNativeLibs من ملف البيان وإضافة الرمز التالي إلى ملف build.gradle.kts على مستوى الوحدة (ملف build.gradle إذا كنت تستخدم Groovy):

Kotlin

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

أنيق

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

علامات الإصدار التجريبي

هذه علامات تجريبية لإعداد الإصدارات المتوفّرة في الإصدار 8.1 من "مكوّن Android الإضافي في Gradle".

علم تمت الإضافة في القيمة التلقائية ملاحظات
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false يؤدي تفعيل هذا الخيار بدون تحديد أي إعدادات توقيع إلى استخدام AGP لإعداد التوقيع التلقائي للتصحيح عند تشغيل إصدار قابل للتصحيح أو إنشاء ملف شخصي له. يتم إيقاف هذه العلامة تلقائيًا لتشجيع مطوّري الإصدارات على تحديد إعدادات توقيع خاصة بالتوصيف.
android.experimental.library.desugarAndroidTest AGP 8.0 false تسمح هذه العلامة لمطوّري المكتبات بتفعيل إزالة التجميل اللغوي من المكتبة الأساسية لحِزم APK التجريبية بدون التأثير في ملف AAR الناتج، مثلاً من خلال التحليل باستخدام أداة Lint. نخطّط لإتاحة هذا السلوك في واجهة برمجة التطبيقات الخاصة بالأسعار المتغيرة.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false في حال تفعيلها، تسمح ميزة "الأجهزة المُدارة من Gradle" باستخدام نوع جهاز مخصّص يحدّده المستخدم ويمكن توفيره من خلال إضافة. يجب تفعيل هذا الخيار إذا كنت تريد استخدام المكوّن الإضافي "مختبر Firebase الافتراضي".
android.lint.printStackTrace AGP 8.0 false في حال تفعيلها، تطبع أداة Android lint تتبُّع تسلسل استدعاء الدوال البرمجية في حال حدوث عُطل. تتضمّن هذه العلامة الإمكانات نفسها التي يتضمّنها متغيّر البيئة LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 بدون تحدّد هذه السمة الحد الأقصى لعدد أجهزة Gradle المُدارة المتزامنة (محاكيات Android) التي يمكن أن تكون نشطة في أي وقت. إذا كانت القيمة 0 أو سالبة، لن يكون هناك حد أقصى لعدد الأجهزة.
android.experimental.testOptions.installApkTimeout AGP 8.0 بدون مدة المهلة بالثواني لتثبيت حزمة APK إذا كانت القيمة 0 أو سالبة، سيتم ضبطها على قيمة تلقائية من خلال UTP.

المشاكل التي تم إصلاحها

الإصدار 8.1.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
عدم تنفيذ مهمة إنشاء ملفات dex على فئات المشاريع الفرعية عندما يتم إنشاء ملفات dex لها من خلال عمليات تحويل العناصر

الإصدار 8.1.3 من المكوّن الإضافي لنظام Gradle المتوافق مع Android

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
[الإصدار 8.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android] يتعذّر تنفيذ ./gradlew test ويظهر الخطأ "Unable to find manifest output" إذا كانت قيمة كلّ من splits.abi.isEnable وtestOptions.unitTests.isIncludeAndroidResources هي true
تعذُّر إنشاء الإصدار بعد الترقية إلى الإصدار 8.1 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"

الإصدار 8.1.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
‫androidResources غير متوفّر في وحدة مكتبة Android
[الإصدار 8.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android] يتعذّر تنفيذ ./gradlew test ويظهر الخطأ "Unable to find manifest output" إذا كانت قيمة كلّ من splits.abi.isEnable وtestOptions.unitTests.isIncludeAndroidResources هي true
Shrinker (R8)
يؤدي الإصدار 1.9 من Kotlin إلى إتلاف تعبيرات lambda في Kotlin بواسطة R8 إذا تمت إزالة عمليات التحقّق من القيم الخالية
تعذّر تنفيذ R8 بسبب ظهور الخطأ "Undefined value encountered during compilation" (تمت مصادفة قيمة غير محدّدة أثناء التجميع) في play-services-measurement-21.3.0-runtime.jar

الإصدار 8.1.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android

المشاكل التي تم إصلاحها
Dexer (D8)
Java 16 Records: equals(null) throws NullPointerException
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
يتعذّر إنشاء الإصدار بسبب الخطأ :minifyReleaseWithR8 عند استخدام مكتبة Apache POI
رفض الاستدعاء عند تفعيل تحسين R8
NoClassDefFoundError for java.lang.reflect.Executable

الإصدار 8.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
مشاكل `com.android.build.gradle.tasks.ShaderCompile` في ذاكرة التخزين المؤقت للإعداد
تؤدي إضافة موارد إلى Java باستخدام واجهات برمجة التطبيقات في "مكوّن Android الإضافي في Gradle" إلى تعطيل ذاكرة التخزين المؤقت للإعدادات
[استوديو Android : Flamingo | 2022.2.1 Canary 8] يتم تجميع liblog.so داخل حزمة APK
يقرأ KGP ملف البيان أثناء عملية الإعداد، ما يؤدي إلى إبطال ذاكرة التخزين المؤقت للإعداد عند تغيير ملف البيان
رسالة التحذير غير واضحة عند حدوث مشكلة في ملف البيان المدمج
تؤدي الترقية إلى الإصدار 7.4 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" إلى حدوث خطأ StackOverflowError
ClassNotFoundException في وحدة الميزات الديناميكية التي تعتمد مباشرةً على مشروع فرعي لمكتبة Kotlin
تعذُّر عملية processDebugUnitTestManifest بسبب العناصر النائبة للبيان في صيغ الاختبار
تعذُّر عملية processDebugUnitTestManifest بسبب العناصر النائبة للبيان في صيغ الاختبار
من المحتمل أنّ السمة namespace تنتمي إلى HasAndroidResources
تعذُّر إيقاف الرسالة "تغيّرت ملفات Gradle منذ آخر مزامنة للمشروع"
ننصحك باستخدام إصدار أحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android" عندما لا يتوفّر إصدار أحدث
تعذُّر عملية processDebugUnitTestManifest بسبب العناصر النائبة للبيان في صيغ الاختبار
علامة منطقية لإيقاف التحقّق من حزمة تطوير البرامج (SDK) في CheckAarMetadataTask
يشير خطأ الإنشاء إلى المستوى 34 لواجهة برمجة التطبيقات، وهو مستوى غير متوفّر
لا يؤثّر ضبط سلسلة أدوات JVM في قيمة targetCompatibility في JavaCompile
لا تحتوي إدخالات deepLink الخاصة بالتنقل والتي تتضمّن نطاقات أحرف بدل على السمة `android:host` في ملف البيان المدمج
تعذّر تنفيذ مهمة processDebugMainManifest منذ الإصدار 8.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android
هل يمكننا إزالة AnalyticsRecordingTask؟
محتوى ملف output-metadata.json غير متسق
هل يمكننا إزالة AnalyticsRecordingTask؟
محتوى ملف output-metadata.json غير متسق
لا يؤثّر ضبط سلسلة أدوات JVM في قيمة targetCompatibility في JavaCompile
لا تحتوي إدخالات deepLink الخاصة بالتنقل والتي تتضمّن نطاقات أحرف بدل على السمة `android:host` في ملف البيان المدمج
تعذّر تنفيذ مهمة processDebugMainManifest منذ الإصدار 8.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android
لا يلتزم "استوديو Android" بمتغيّر البيئة STUDIO_GRADLE_JDK
يجب أن تنشئ أنواع المصادر المخصّصة مجموعات مصادر متعددة النكهات
يجب تعديل واجهة برمجة التطبيقات DependenciesInfoBuilder وإضافة مستندات إليها
تعذُّر تنفيذ DexingNoClasspathTransform (minSdk >= 24) مع استهداف Java 11 بسبب عدم توفّر أعضاء متداخلين
لا تعمل الدالة DslExtension.Builder.extendProjectWith() على النحو الموضَّح في Groovy
إضافة واجهة برمجة التطبيقات VariantSelector.withFlavor التي لا تستخدم kotlin.Pair
حدث خطأ في ذاكرة التخزين المؤقت لـ AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) لأنّ ملف `proguard.txt` قد تغيّر
تحتوي ملفات بيان التطبيق المدمجة على السمتَين extractNativeLibs وuseEmbeddedDex من العناصر التابعة
AGP: عرض مسار أداة AIDL وملف AIDL الخاص بإطار العمل كواجهة برمجة تطبيقات عامة
طلب: السماح لبيئة التطوير المتكاملة (IDE) بتقديم حلّ لمشكلة "يتطلّب PermittedSubclasses الإصدار ASM9"
خطأ: يؤدي النقر على "تفعيل KSP واستخدام معالج KSP لهذه التبعية بدلاً من ذلك" إلى الانتقال إلى موقع إلكتروني
الإصدار 8.1 من Gradle لا يتيح استخدام ميزة "التخزين المؤقت للإعدادات" بسبب الملف ‎ .gradle/.android/analytics.settings
تستخدم الدالة generateLocaleConfig في الإصدار 8.1.0 من "مكوّن Android الإضافي في Gradle" ترتيبًا غير حتمي، ما يؤدي إلى إيقاف عمليات الإنشاء القابلة للتكرار
Dexer (D8)
تعطُّل التطبيق بسبب إزالة تشويش المكتبة الأساسية بعد التحديثات الأخيرة
تراجع الإصدار 8.1.0 من "مكوّن Android Gradle الإضافي" مع الإصدار 21 من واجهة برمجة التطبيقات - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Check failed: !method->IsAbstract()
Lint
لا يتحقّق Lint إلا من عمليات التحويل الآمنة للواجهات التي تم تنفيذها مباشرةً، وليس الواجهات الموروثة.
لا يتحقّق Lint من عمليات التحويل الصالحة لمستقبِلات المكالمات
لم يتم إلغاء تحويل TypedArray#close (المستوى 31 لواجهة برمجة التطبيقات)، ولكن لا يعرض "استوديو Android" تحذيرًا عند استخدامه في try-with-resources
خطأ: تحذير إيجابي خاطئ من "تم إيقاف موفّر BC نهائيًا، واعتبارًا من الإصدار Android P..."
ظهور نتيجة إيجابية خاطئة في Lint بشأن remember بعد ترقية Kotlin إلى الإصدار 1.8.0
تحذير Lint إيجابي خاطئ لعمليات التحقّق من SDK_INT التي يتم تنفيذها داخل طريقة تتضمّن مَعلمة تعداد
لا يعمل فحص TypographyQuotes lint على علامات الاقتباس التي تم تجاهلها
تضع أداة فحص TrustAllX509TrustManager lint علامة بشكل غير صحيح على الواجهات التي توسّع X509TrustManager
إعادة تنسيق الرمز الذي تم إدراجه فقط في إصلاح الاستبدال
Lint: معاينة النية تعرض استثناءً لـ ReplaceStringQuickFix
Shrinker (R8)
VerifyError: رفض أداة التحقّق للفئة عند استخدام R8 مع Kotlin 1.8.20
تعطُّل خدمة Google Fit بسبب R8 على الإصدار 8 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"
لا يتم عرض معلومات الملف المصدر بشكل صحيح إذا كانت تتضمّن أسماء متبقية تتداخل مع أسماء الإدخال
تعذُّر إنشاء Compose باستخدام R8 بسبب ArrayIndexOutOfBoundsException
لا يتضمّن الرمز البسيط المرتبط بـ StringBuilder استدعاءً نهائيًا للإلحاق في وضع الإصدار أو debuggable=false
حالة غير شائعة في طريقة VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds()
يؤدي dex-startup-optimization إلى ظهور الخطأ java.lang.VerifyError: Rejecting class
تعطُّل التطبيق مع ظهور خطأ في التحقّق على الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث