الإصدار 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) من خلال تمييز البنية وملء الرموز البرمجية والتنقّل إلى التعريفات. يُرجى العلم أنّه في حال استخدام AGP 8.1 وKotlin DSL لإعداد عملية الإنشاء، عليك استخدام Gradle 8.1 للحصول على أفضل تجربة. لمزيد من المعلومات، اطّلِع على دليل نقل البيانات في Kotlin DSL.

إتاحة اللغة تلقائيًا حسب التطبيق

بدءًا من الإصدار 7 من Android Studio Giraffe Canary والإصدار 8.1.0-alpha07 من AGP، يمكنك ضبط تطبيقك لتفعيل إعدادات اللغة المفضّلة على مستوى التطبيق تلقائيًا. استنادًا إلى موارد مشروعك، ينشئ المكوّن الإضافي لنظام Gradle المتوافق مع Android ملف LocaleConfig ويُضيف مرجعًا إليه في ملف البيان النهائي، ما يغنيك عن إجراء ذلك يدويًا. يستخدم AGP الموارد في مجلدات 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 من Java Virtual Machine

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

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

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

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

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

Kotlin

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

رائع

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

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

هذه هي علامات تجريبية لضبط الإصدار المتاح في AGP 8.1.

إبلاغ تمت الإضافة في القيمة التلقائية ملاحظات
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false يؤدي تفعيل هذا الخيار بدون تحديد إعدادات توقيع إلى استخدام AGP لإعدادات توقيع تصحيح الأخطاء التلقائية عند تشغيل إصدار قابل للتحليل أو قابل لتصحيح الأخطاء. تكون هذه العلامة غير مفعّلة تلقائيًا لتشجيع صنّاع الإصدارات على الإفصاح عن إعدادات توقيع ملف الإصدار المحدّدة لتحليل الأداء.
android.experimental.library.desugarAndroidTest AGP 8.0 false تتيح هذه العلامة لصنّاع المكتبات تفعيل إزالة رمز مكتبة الأساس لملف APK الاختبار بدون التأثير في حزمة AAR التي تم إنشاؤها، على سبيل المثال من خلال فحص الأخطاء. نخطّط لإتاحة هذا السلوك في Variant API في نهاية المطاف.
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 (AVD) المتزامنة التي يجب أن تكون نشطة في أي وقت. إذا كانت القيمة 0 أو سالبة، لا يكون هناك حد أقصى لعدد الأجهزة.
android.experimental.testOptions.installApkTimeout AGP 8.0 بدون تحديد نمط مدة المهلة بالثواني لتثبيت حزمة APK إذا كانت القيمة 0 أو سالبة، سيتم ضبطها على قيمة تلقائية من خلال UTP.

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

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

المشاكل التي تم إصلاحها
مكوّن إضافي لنظام Gradle المتوافق مع Android
مشاكل في ذاكرة التخزين المؤقت للإعدادات في "com.android.build.gradle.tasks.ShaderCompile"
يؤدي إضافة موارد Java باستخدام واجهات برمجة تطبيقات AGP إلى إيقاف ذاكرة التخزين المؤقت للإعدادات
[Android Studio : Flamingo | 2022.2.1 Canary 8] تم حزم liblog.so داخل حزمة APK
يقرأ KGP البيان أثناء الضبط، ما يؤدي إلى إلغاء ذاكرة التخزين المؤقت للإعدادات عند تغيير البيان.
رسالة التحذير غير واضحة عند حدوث مشكلة في البيان المدمج
تؤدي الترقية إلى AGP 7.4 إلى حدوث خطأ StackOverflowError
ClassNotFoundException في الميزة الديناميكية التي تعتمد مباشرةً على المشروع الفرعي لـ Kotlin library
تعذُّر تنفيذ processDebugUnitTestManifest مع عناصر نائبة للبيان لأنواع الاختبار
تعذُّر تنفيذ processDebugUnitTestManifest مع عناصر نائبة للبيان لأنواع الاختبار
من المرجّح أن تنتمي خاصية namespace إلى HasAndroidResources.
لا يمكن إيقاف رسالة "تم تغيير ملفات Gradle منذ آخر مزامنة للمشروع"
"ننصح باستخدام مكوّن إضافي أحدث من Android Gradle" عندما لا يتوفّر مكوّن إضافي أحدث
تعذُّر تنفيذ processDebugUnitTestManifest مع عناصر نائبة للبيان لأنواع الاختبار
علامة منطقية لإيقاف التحقّق من حزمة SDK في عملية الترجمة في CheckAarMetadataTask
يشير خطأ الإنشاء إلى المستوى 34 لواجهة برمجة التطبيقات، وهو مستوى غير متوفّر.
ضبط سلسلة أدوات JVM لا يؤثّر في قيمة targetCompatibility في JavaCompile
لا تحتوي إدخالات روابط التنقّل لصفحات في التطبيق التي تتضمّن نطاقات أحرف بدل على سمة android:host في البيان المدمج.
تعذّر إكمال مهمة processDebugMainManifest منذ الإصدار 8.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android
هل يمكننا إزالة AnalyticsRecordingTask؟
محتوى output-metadata.json غير متّسق
هل يمكننا إزالة AnalyticsRecordingTask؟
محتوى output-metadata.json غير متّسق
ضبط سلسلة أدوات JVM لا يؤثّر في قيمة targetCompatibility في JavaCompile
لا تحتوي إدخالات روابط التنقّل لصفحات في التطبيق التي تتضمّن نطاقات أحرف بدل على سمة android:host في البيان المدمج.
تعذّر إكمال مهمة processDebugMainManifest منذ الإصدار 8.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android
لا يراعي "استوديو Android" متغيّر البيئة STUDIO_GRADLE_JDK
يجب أن تُنشئ أنواع المصادر المخصّصة مجموعات مصادر متعددة النكهات.
يحتاج DependenciesInfoBuilder إلى تحديث واجهة برمجة التطبيقات + مستند
تعذُّر DexingNoClasspathTransform (minSdk >= 24) مع استهداف Java 11 بسبب عدم توفّر أعضاء Nest
لا تعمل دالة DslExtension.Builder.extendProjectWith() على النحو الموضّح في Groovy
أضِف واجهة برمجة التطبيقات VariantSelector.withFlavor التي لا تستخدِم kotlin.Pair.
حدث خطأ في ذاكرة التخزين المؤقت لـ AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) بسبب تغيير ملف proguard.txt
يحتوي بيان التطبيق المدمج على سمتَي extractNativeLibs وuseEmbeddedDex من العناصر المُعتمدة.
AGP: Expose path to AIDL tool and framework AIDL file as public API
الطلب: السماح لبيئة تطوير البرامج (IDE) بتقديم حلّ لخطأ "تتطلب فئات فرعية مسموح بها استخدام ASM9"
خطأ: يؤدي النقر على "تفعيل KSP واستخدام معالج KSP لهذا الاعتماد بدلاً من ذلك" إلى الانتقال إلى موقع إلكتروني فقط.
يؤدي الإصدار 8.1 من Gradle إلى إيقاف ميزة التخزين المؤقت للإعدادات بسبب ملف ‎ .gradle/.android/analytics.settings
تستخدِم دالة generateLocaleConfig في الإصدار 8.1.0 من agp ترتيبًا غير محدّد، ما يؤدي إلى إيقاف عمليات إنشاء الإصدارات القابلة للتكرار.
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 من عمليات التحويل الصالحة لمستلمي المكالمات.
لم تتم إزالة رمز TypedArray#close (المستوى 31 لواجهة برمجة التطبيقات)، ولكن لا يعرض AS تحذيرًا عند استخدامه في try-with-resources
خطأ: تحذير موجب خاطئ من "تم إيقاف موفِّر BC نهائيًا، واعتبارًا من Android P..."
خطأ موجب في Lint بشأن remember بعد ترقية Kotlin إلى الإصدار 1.8.0
تحذير Lint إيجابي خاطئ لعمليات التحقّق من SDK_INT التي يتم إجراؤها داخل طريقة تحتوي على مَعلمة enum
لا يعمل فحص الأخطاء في TypographyQuotes على علامات الاقتباس التي تم إسقاطها
يُشير فحص الأخطاء TrustAllX509TrustManager بشكل غير صحيح إلى الواجهات التي تُنشئ فئة X509TrustManager.
إعادة تنسيق الرمز المُدرَج فقط من الإصلاح الذي يتم استبداله
Lint: تؤدي معاينة النية إلى طرح استثناء لـ ReplaceStringQuickFix
Shrinker (R8)
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
يتسبب الإصدار R8 من Android 8 في إيقاف خدمة Google Fit
لا يتم عرض معلومات الملف المصدر التي تتضمّن أسماء متبقية تتداخل مع أسماء الإدخال بشكل صحيح.
تعذُّر إنشاء R8 أثناء إنشاء Compose باستخدام ArrayIndexOutOfBoundsException
لا يتضمّن الرمز البرمجي المرتبط بـ SimpleStringBuilder طلبًا للإضافة في وضع الإصدار أو وضع debuggable=false.
حالة خاصة في طريقة VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds()
تؤدي ميزة dex-startup-optimization إلى ظهور java.lang.VerifyError: Rejecting class
تعطُّل التطبيق بسبب خطأ في عملية التحقّق على الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث

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

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

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

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

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

المشاكل التي تم إصلاحها
مكوّن إضافي لنظام Gradle المتوافق مع Android
[AGP 8.1.0] تعذّر تنفيذ الأمر ./gradlew test وظهور الرسالة "تعذّر العثور على ناتج البيان" إذا كانت كل من القيمتَين splits.abi.isEnable وtestOptions.unitTests.isIncludeAndroidResources صحيحتَين
تعذُّر إنشاء الإصدار بعد التحديث إلى AGP 8.1

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

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