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

الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android هو إصدار رئيسي يتضمّن تغييرات في واجهة برمجة التطبيقات والسلوك.

للتحديث إلى الإصدار 9.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android، استخدِم أداة ترقية المكوّن الإضافي لنظام Gradle المتوافق مع Android.

يساعد "مساعد ترقية" Android Gradle Plugin في الحفاظ على السلوكيات الحالية عند ترقية مشروعك عند الحاجة، ما يتيح لك ترقية مشروعك لاستخدام الإصدار 9.0 من Android Gradle Plugin، حتى إذا لم تكن مستعدًا لاستخدام جميع الإعدادات التلقائية الجديدة في الإصدار 9.0 من المكوّن الإضافي Android Gradle.

التوافق

الحدّ الأقصى لمستوى واجهة برمجة التطبيقات الذي يتوافق معه الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android هو المستوى 36 لواجهة برمجة التطبيقات. في ما يلي معلومات أخرى عن التوافق:

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

تنفّذ فئات android DSL الآن الواجهات العامة الجديدة فقط

على مدار السنوات العديدة الماضية، طرحنا واجهات جديدة للغة DSL وواجهة برمجة التطبيقات من أجل التحكّم بشكل أفضل في واجهات برمجة التطبيقات المتاحة للجميع. كان الإصداران 7.x و8.x من AGP لا يزالان يستخدمان أنواع DSL القديمة (مثل BaseExtension) التي كانت تنفّذ أيضًا الواجهات العامة الجديدة، وذلك للحفاظ على التوافق أثناء العمل على الواجهات.

يستخدم الإصدار 9.0 من AGP واجهات DSL الجديدة حصريًا، وتم تغيير عمليات التنفيذ إلى أنواع جديدة مخفية بالكامل. يؤدي ذلك أيضًا إلى إزالة إذن الوصول إلى واجهة برمجة التطبيقات القديمة والمتوقّفة نهائيًا الخاصة بملفات APK المتغيرة.

لتحديث إصدار "استوديو Android" إلى 9.0، قد تحتاج إلى إجراء ما يلي:

  • تأكَّد من أنّ مشروعك متوافق مع Kotlin المضمّن: لا يتوافق المكوّن الإضافي org.jetbrains.kotlin.android مع DSL الجديد.
  • تبديل مشاريع KMP إلى المكوّن الإضافي لمكتبة Android Gradle المتوافق مع KMP: لا يتوافق استخدام المكوّن الإضافي org.jetbrains.kotlin.multiplatform في المشروع الفرعي نفسه لنظام Gradle مع المكوّنين الإضافيين com.android.library وcom.android.application مع نظام DSL الجديد.

  • تعديل ملفات الإصدار: على الرغم من أنّ الهدف من تغيير الواجهات هو الحفاظ على تشابه لغة DSL قدر الإمكان، قد تحدث بعض التغييرات الصغيرة.

  • عدِّل منطق الإصدار المخصّص للإشارة إلى لغة DSL وواجهة برمجة التطبيقات الجديدتين: استبدِل أي إشارات إلى لغة DSL الداخلية بواجهات DSL العامة. في معظم الحالات، سيكون هذا الاستبدال واحدًا مقابل واحد. استبدِل أي استخدام لواجهة برمجة التطبيقات applicationVariants وواجهات برمجة التطبيقات المشابهة بواجهة برمجة التطبيقات الجديدة androidComponents. قد يكون ذلك أكثر تعقيدًا، لأنّ واجهة برمجة التطبيقات androidComponents مصمَّمة لتكون أكثر استقرارًا من أجل الحفاظ على توافق المكوّنات الإضافية لفترة أطول. يمكنك الاطّلاع على وصفات Gradle للحصول على أمثلة.

  • تحديث المكوّنات الإضافية التابعة لجهات خارجية: قد تظل بعض المكوّنات الإضافية التابعة لجهات خارجية تعتمد على واجهات أو واجهات برمجة تطبيقات لم يعُد يتم عرضها. انتقِل إلى إصدارات من هذه المكوّنات الإضافية متوافقة مع الإصدار 9.0 من "مكوّن Android الإضافي في Gradle".

يمنع التبديل إلى واجهات DSL الجديدة المكوّنات الإضافية وبرامج Gradle النصية للإنشاء من استخدام واجهات برمجة التطبيقات المتوقّفة نهائيًا، بما في ذلك:

واجهة برمجة التطبيقات المتوقّفة نهائيًا في الحزمة android الوظيفة الاستبدال
applicationVariants و
libraryVariants و
testVariants و
unitTestVariants
نقاط الإضافة للمكوّنات الإضافية من أجل إضافة وظائف جديدة إلى "مكوّن Android الإضافي في Gradle" استبدِلها بواجهة برمجة التطبيقات androidComponents.onVariants ، على سبيل المثال:
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
قد لا يتوفّر بديل مباشر لجميع واجهات برمجة التطبيقات السابقة. إبلاغ عن مشكلة إذا كانت هناك حالة استخدام لا تغطيها واجهات برمجة التطبيقات الجديدة الخاصة بالأنواع.
variantFilter تتيح إيقاف الصيغ المحدّدة. استبدِلها بواجهة برمجة التطبيقات androidComponents.beforeVariants ، على سبيل المثال:
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider و
testServer
تسجيل بيئات اختبار مخصّصة لإجراء الاختبارات على أجهزة Android والمحاكيات انتقِل إلى الأجهزة المُدارة من Gradle.
sdkDirectory،
ndkDirectory،
bootClasspath،
adbExecutable، و
adbExe
استخدام مكوّنات مختلفة من حزمة تطوير البرامج (SDK) لنظام التشغيل Android لتنفيذ مهام مخصّصة التبديل إلى androidComponents.sdkComponents
registerArtifactType و
registerBuildTypeSourceProvider و
registerProductFlavorSourceProvider و
registerJavaArtifact و
registerMultiFlavorSourceProvider و
wrapJavaSourceSet
وظائف قديمة ذات صلة في الغالب بمعالجة المصادر التي تم إنشاؤها في "استوديو Android"، والتي توقّفت عن العمل في الإصدار 7.2.0 من "مكوّن Android الإضافي لنظام Gradle". لا يتوفّر بديل مباشر لواجهات برمجة التطبيقات هذه.
dexOptions إعدادات قديمة ذات صلة بالأداة dx، والتي تم استبدالها بالأداة d8. لم يكن لأي من الإعدادات أي تأثير منذ الإصدار 7.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لا يوجد بديل مباشر.
generatePureSplits إنشاء حِزم إعدادات للتطبيقات الفورية أصبحت إمكانية تقسيم عمليات الإعداد مضمّنة الآن في حِزم تطبيقات Android.
aidlPackagedList ملفات AIDL التي سيتم تضمينها في ملف AAR لعرضها كواجهة برمجة تطبيقات للمكتبات والتطبيقات التي تعتمد على هذه المكتبة لا يزال هذا الحقل مكشوفًا على LibraryExtension ولكن ليس على أنواع الإضافات الأخرى.

إذا تم التحديث إلى الإصدار 9.0 من AGP وظهرت رسالة الخطأ التالية، يعني ذلك أنّ مشروعك لا يزال يشير إلى بعض الأنواع القديمة:

java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension

إذا تم حظرك بسبب مكوّنات إضافية غير متوافقة تابعة لجهات خارجية، يمكنك إيقافها واستعادة عمليات التنفيذ القديمة للغة DSL، بالإضافة إلى واجهة برمجة التطبيقات القديمة الخاصة بإنشاء المتغيرات. أثناء إجراء ذلك، ستتوفّر الواجهات الجديدة أيضًا، وسيظل بإمكانك تعديل منطق الإصدار الخاص بك إلى واجهة برمجة التطبيقات الجديدة. لإيقاف هذه الميزة، أدرِج السطر التالي في ملف gradle.properties:

android.newDsl=false

يمكنك أيضًا البدء في الترقية إلى واجهات برمجة التطبيقات الجديدة قبل الترقية إلى الإصدار 9.0 من Android Gradle Plugin. تتوفّر الواجهات الجديدة في العديد من إصدارات "مكوّن Android الإضافي لبرنامج Gradle"، لذا يمكنك استخدام مزيج من الواجهات الجديدة والقديمة. تعرض مستندات مرجع واجهة برمجة التطبيقات الخاصة بالمكوّن الإضافي لنظام Gradle المتوافق مع Android مساحة واجهة برمجة التطبيقات لكل إصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android، وتاريخ إضافة كل فئة وطريقة وحقل.

خلال مرحلة الإصدار الأوّلي من الإصدار 9.0، سنتواصل مع مطوّري المكوّنات الإضافية لمساعدتهم في تعديل المكوّنات الإضافية وإصدارها لتكون متوافقة تمامًا مع الأوضاع الجديدة، وسنحسّن "مساعد ترقية" Android Gradle Plugin في "استوديو Android" لإرشادك خلال عملية نقل البيانات.

إذا تبيّن لك أنّ واجهة برمجة التطبيقات الجديدة DSL أو Variant API لا تتضمّن إمكانات أو ميزات، يُرجى تسجيل مشكلة في أقرب وقت ممكن.

ميزات Kotlin المضمَّنة

يوفّر الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android إمكانية استخدام لغة Kotlin المضمّنة ويفعّلها تلقائيًا. وهذا يعني أنّه لم يعُد عليك تطبيق المكوّن الإضافي org.jetbrains.kotlin.android (أو kotlin-android) في ملفات الإصدار لتجميع ملفات مصدر Kotlin. يؤدي ذلك إلى تبسيط عملية دمج Kotlin مع AGP، وتجنُّب استخدام واجهات برمجة التطبيقات المتوقّفة نهائيًا، وتحسين الأداء في بعض الحالات.

لذلك، عند ترقية مشروعك إلى الإصدار 9.0 من Android Gradle Plugin، عليك أيضًا نقل البيانات إلى Kotlin المضمّنة أو إيقاف هذه الميزة.

يمكنك أيضًا إيقاف ميزة التوافق المضمّنة مع Kotlin بشكل انتقائي لمشاريع Gradle الفرعية التي لا تتضمّن مصادر Kotlin.

الاعتماد على المكوّن الإضافي لنظام Gradle المتوافق مع Kotlin في وقت التشغيل

لتوفير إمكانية استخدام Kotlin المضمّنة، يتضمّن الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android الآن تبعية وقت التشغيل على الإصدار 2.2.10 من المكوّن الإضافي لنظام Gradle المتوافق مع Kotlin (KGP). هذا يعني أنّه لن يكون عليك تحديد إصدار KGP، وإذا كنت تستخدم إصدارًا أقدم من 2.2.10، سيتم تلقائيًا ترقية إصدار KGP إلى 2.2.10. وبالمثل، إذا كنت تستخدم إصدارًا من KSP أقل من 2.2.10-2.0.2، سيتم ترقيته إلى 2.2.10-2.0.2 ليتوافق مع إصدار KGP.

الترقية إلى إصدار أعلى من KGP

لاستخدام إصدار أحدث من KGP أو KSP، أضِف ما يلي إلى ملف الإنشاء على أعلى مستوى:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")

        // For KSP
        classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
    }
}

الرجوع إلى إصدار أقدم من KGP

لا يمكنك الرجوع إلى إصدار سابق من KGP إلا إذا أوقفت استخدام Kotlin المضمّنة. ويرجع ذلك إلى أنّ الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android يتيح استخدام Kotlin المضمّنة تلقائيًا، وتتطلّب Kotlin المضمّنة الإصدار 2.2.10 من المكوّن الإضافي لنظام Gradle المتوافق مع Kotlin أو إصدارًا أحدث.

لاستخدام إصدار أقل من KGP أو KSP، عليك تعريف هذا الإصدار في ملف الإصدار ذي المستوى الأعلى باستخدام تعريف إصدار دقيق:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("KGP_VERSION") }
        }

        // For KSP
        classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
            version { strictly("KSP_VERSION") }
        }
    }
}

يُرجى العِلم أنّ الحدّ الأدنى لإصدار KGP الذي يمكنك الرجوع إليه هو 2.0.0.

توافق بيئة التطوير المتكاملة مع بيانات الاختبار

يتيح الإصدار 9.0 من "مكوّن Android الإضافي لنظام Gradle" استخدام أدوات الاختبار في بيئة التطوير المتكاملة (IDE) في "استوديو Android".

المكوّن الإضافي للمكتبة المدمجة

يتيح لك Fused Library Plugin (إصدار تجريبي) نشر مكتبات متعددة كملف Android Library AAR واحد. ويمكن أن يسهّل ذلك على المستخدمين الاعتماد على العناصر المنشورة.

للحصول على معلومات حول كيفية البدء، يُرجى الاطّلاع على نشر عدّة مكتبات Android كحزمة واحدة باستخدام Fused Library.

تغييرات السلوك

يتضمّن الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android السلوكيات الجديدة التالية:

السُلوك الاقتراح
يستخدم الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android الإصدار r28c من NDK تلقائيًا. ننصحك بتحديد إصدار NDK الذي تريد استخدامه بشكل صريح.
يتطلّب الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android تلقائيًا أن يستخدم مستهلكو المكتبة الإصدار نفسه أو إصدارًا أحدث من حزمة SDK الخاصة بالتجميع. استخدِم حزمة SDK للتدوين نفسها أو إصدارًا أحدث عند استخدام مكتبة. إذا لم يكن ذلك ممكنًا، أو إذا أردت منح مستخدمي المكتبة التي تنشرها وقتًا أطول للتبديل، اضبط AarMetadata.minCompileSdk بشكل صريح.

يتضمّن الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" تعديلات على الإعدادات التلقائية لخصائص Gradle التالية. يمنحك هذا الخيار إمكانية الحفاظ على سلوك الإصدار 8.13 من Android Gradle Plugin عند الترقية:

الخاصية الوظيفة التغيير من الإصدار 8.13 إلى الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" الاقتراح
android.newDsl استخدِم واجهات DSL الجديدة بدون عرض عمليات التنفيذ القديمة لكتلة android.
يعني هذا أيضًا أنّه لم يعُد بالإمكان الوصول إلى واجهة برمجة التطبيقات القديمة الخاصة بمتغيرات المنتجات، مثل android.applicationVariants.
falsetrue يمكنك إيقاف هذه الميزة من خلال ضبط android.newDsl=false.
بعد التأكّد من توافق جميع المكوّنات الإضافية ومنطق الإنشاء الذي يستخدمه مشروعك، يمكنك إزالة خيار إيقاف الميزة.
android.builtInKotlin تتيح هذه السمة استخدام Kotlin المضمّنة falsetrue انتقِل إلى Kotlin المضمّنة إذا كان ذلك ممكنًا أو أوقِفها.
android.uniquePackageNames يفرض أن يكون لكل مكتبة اسم حزمة مميز. falsetrue حدِّد أسماء حِزم فريدة لجميع المكتبات ضِمن مشروعك. إذا لم يكن ذلك ممكنًا، يمكنك إيقاف هذه العلامة أثناء نقل البيانات.
android.useAndroidx استخدِم تبعيات androidx تلقائيًا. falsetrue استخدام تبعيات androidx
android.default.androidx.test.runner يمكنك إجراء الاختبارات على الجهاز باستخدام الفئة androidx.test.runner.AndroidJUnitRunner تلقائيًا، ما يؤدي إلى استبدال الإعداد التلقائي للفئة المتوقّفة نهائيًا InstrumentationTestRunner بالفئة
android {
  defaultConfig {
    testInstrumentationRunner = "..."
  }
}
falsetrue استخدِم AndroidJUnitRunner، أو حدِّد testInstrumentationRunner المخصّص بشكل صريح.
android.dependency.useConstraints تتحكّم هذه السمة في استخدام قيود التبعية بين عمليات الإعداد.
الإعداد التلقائي في الإصدار 9.0 من "مكوّن Android الإضافي في Gradle" هو false الذي يستخدم القيود فقط في اختبارات أجهزة التطبيق (AndroidTest). سيؤدي ضبط هذا الخيار على true إلى الرجوع إلى السلوك السابق في الإصدار 8.13.
truefalse لا تستخدِم قيود التبعية في كل مكان ما لم تكن بحاجة إليها. يؤدي قبول القيمة التلقائية الجديدة لهذا العلامة أيضًا إلى تفعيل عمليات التحسين في عملية استيراد المشاريع، ما يؤدي إلى تقليل وقت الاستيراد لعمليات الإنشاء التي تتضمّن العديد من المشاريع الفرعية لمكتبة Android.
android.enableAppCompileTimeRClass تجميع الرموز البرمجية في التطبيقات مع فئة R غير نهائية، ما يؤدي إلى تجميع التطبيقات بما يتوافق مع تجميع المكتبات
يؤدي ذلك إلى تحسين الزيادة في المبيعات ويمهّد الطريق لتحسينات الأداء المستقبلية في ما يتعلّق بتدفق معالجة الموارد.
falsetrue يمكن للعديد من المشاريع اعتماد السلوك الجديد بدون إجراء أي تغييرات على المصدر. إذا تم استخدام حقول الفئة R في أي مكان يتطلّب قيمة ثابتة، مثل حالات التبديل، أعِد تصميم الرمز البرمجي لاستخدام عبارات if متسلسلة.
android.sdk.defaultTargetSdkToCompileSdkIfUnset يستخدم إصدار حزمة SDK المخصّص للتجميع كقيمة تلقائية لإصدار حزمة SDK المستهدَف في التطبيقات والاختبارات.
قبل هذا التغيير، كان إصدار حزمة SDK المستهدَف يتم ضبطه تلقائيًا على إصدار حزمة SDK كحد أدنى.
falsetrue حدِّد إصدار حزمة SDK المستهدَف بشكلٍ صريح للتطبيقات والاختبارات.
android.onlyEnableUnitTestForTheTestedBuildType لا ينشئ سوى مكوّنات اختبار الوحدة لنوع الإصدار الذي تم اختباره.
في المشروع التلقائي، يؤدي ذلك إلى اختبار وحدة واحد للتصحيح، بينما كان السلوك السابق هو إجراء اختبارات الوحدات للتصحيح أو الإصدار.
falsetrue إذا كان مشروعك لا يتطلّب إجراء اختبارات لكل من تصحيح الأخطاء والإصدار، لا يلزم إجراء أي تغيير.
android.proguard.failOnMissingFiles تعذُّر الإنشاء مع ظهور خطأ إذا لم تكن أي من ملفات Keep المحدّدة في AGP DSL متوفّرة على القرص قبل هذا التغيير، كانت الأخطاء الإملائية في أسماء الملفات تؤدي إلى تجاهل الملفات بدون إشعار. falsetrue إزالة أي بيانات غير صالحة لملفات Proguard
android.r8.optimizedResourceShrinking يسمح R8 بالاحتفاظ بعدد أقل من موارد Android من خلال أخذ الفئات وموارد Android في الاعتبار معًا. falsetrue إذا كانت قواعد الاحتفاظ بمشروعك مكتملة، ليس عليك إجراء أي تغيير.
android.r8.strictFullModeForKeepRules تسمح أداة R8 بالاحتفاظ بعدد أقل من خلال عدم الاحتفاظ بشكل ضمني بالدالة الإنشائية التلقائية عند الاحتفاظ بفئة. أي أنّ -keep class A لم يعُد يعني -keep class A { <init>(); }
falsetrue إذا كانت قواعد الاحتفاظ بمشروعك مكتملة، ليس عليك إجراء أي تغيير.

استبدِل -keep class A بالقيمة -keep class A { <init>(); } في قواعد الاحتفاظ الخاصة بمشروعك في أي حالات تحتاج فيها إلى الاحتفاظ بالدالة الإنشائية التلقائية.
android.defaults.buildfeatures.resvalues تفعيل resValues في جميع المشاريع الفرعية truefalse فعِّل resValues في المشاريع الفرعية التي تحتاج إليه فقط من خلال ضبط ما يلي في ملفات تصميم Gradle الخاصة بهذه المشاريع:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders تتيح هذه السمة تجميع برامج التظليل في جميع المشاريع الفرعية truefalse فعِّل تجميع برامج التظليل في المشاريع الفرعية التي تحتوي على برامج تظليل فقط ليتم تجميعها من خلال ضبط ما يلي في ملفات تصميم Gradle الخاصة بهذه المشاريع:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed في الإصدار 9.0 من "مكوّن Android الإضافي لنظام Gradle"، لن تتوافق getDefaultProguardFile() إلا مع proguard-android-optimize.txt بدلاً من proguard-android.txt. يتم ذلك لمنع الاستخدام غير المقصود للعلامة ­dontoptimize، والتي يتم تضمينها في proguard-android.txt. falsetrue يمكنك تحديد ­dontoptimize بشكلٍ صريح في ملف proguardFile مخصّص إذا أردت تجنُّب التحسين، بالإضافة إلى استخدام proguard-android-optimize.txt. احرِص على إزالة العلامة ­dontoptimize من هذا الملف إذا أمكن، لأنّها تقلّل من مزايا التحسين في R8. إذا لم يكن الأمر كذلك، يمكنك إيقاف هذه الميزة من خلال ضبط android.r8.globalOptionsInConsumerRules.disallowed=false.
android.r8.globalOptionsInConsumerRules.disallowed اعتبارًا من الإصدار 9.0 من Android Gradle Plugin، سيتعذّر نشر مكتبة Android ووحدة الميزات إذا كانت ملفات الاحتفاظ بالمستهلك تحتوي على إعدادات Proguard مسبِّبة للمشاكل. يجب استخدام ملفات Consumer keep التي تتضمّن خيارات عامة، مثل ­dontoptimize أو ­dontobfuscate، في وحدات التطبيق فقط، ويمكن أن تقلّل من مزايا التحسين لمستخدمي المكتبة. سيتجاهل تجميع وحدة تطبيق Android أي خيارات عامة من هذا النوع بدون إشعار إذا كانت مضمّنة في عنصر تابع مجمَّع مسبقًا (ملف JAR أو AAR). يمكنك معرفة وقت حدوث ذلك من خلال التحقّق من ملف configuration.txt (عادةً في مسار مثل <app_module>/build/outputs/mapping/<build_variant>/configuration.txt) بحثًا عن تعليقات مثل: # REMOVED CONSUMER RULE: ­dontoptimize falsetrue على المكتبات المنشورة إزالة أي قواعد غير متوافقة. يجب أن تنقل المكتبات الداخلية أي قواعد غير متوافقة ولكنها مطلوبة إلى ملف proguardFile في وحدة تطبيق بدلاً من ذلك. يمكنك إيقاف هذه الميزة من خلال الإعدادات android.r8.globalOptionsInConsumerRules.disallowed=false. بعد أن تصبح جميع ملفات المستهلكين المتوافقة، أزِل خيار إيقاف المشاركة.
android.sourceset.disallowProvider عدم السماح بتمرير موفّري البيانات للمصادر التي تم إنشاؤها باستخدام AndroidSourceSet DSL. falsetrue استخدِم واجهة برمجة التطبيقات Sources على androidComponents لتسجيل المستندات المصدر التي تم إنشاؤها.
android.custom.shader.path.required يجب ضبط مسار برنامج تجميع التظليل بشكل صريح في local.properties في حال تفعيل تجميع التظليل. falsetrue أضِف glslc.dir=/path/to/shader-tools إلى local.properties في مشروعك.

الميزات التي تمت إزالتها

يزيل الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android الوظائف التالية:

  • إيقاف إمكانية تضمين تطبيقات Wear OS
    يزيل الإصدار 9.0 من "مكوّن Android الإضافي لبرنامج Gradle" إمكانية تضمين تطبيقات Wear OS، والتي لم تعُد متاحة في Play. ويشمل ذلك إزالة إعدادات wearApp وAndroidSourceSet.wearAppConfigurationName DSL. اطّلِع على مقالة التوزيع على Wear OS لمعرفة كيفية نشر تطبيقك على Wear OS.
  • مهمة إعداد تقرير androidDependencies وsourceSets
  • التوافق مع حِزم APK المجزّأة حسب الكثافة
    يزيل الإصدار 9.0 من "مكوّن Android الإضافي في Gradle" إمكانية إنشاء حِزم APK مجزّأة استنادًا إلى كثافة الشاشة. تمت إزالة الوظيفة وواجهات برمجة التطبيقات ذات الصلة. لتقسيم حِزم APK استنادًا إلى كثافة الشاشة باستخدام الإصدار 9.0 أو إصدار أحدث من "مكوّن Android الإضافي في Gradle"، استخدِم حِزم التطبيقات.

تغيير DSL

يتضمّن الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android تغييرات DSL غير متوافقة التالية:

  • تمت إزالة تحديد المَعلمات الخاص بـ CommonExtension.

    في حد ذاته، هذا التغيير هو تغيير غير متوافق على مستوى المصدر فقط للمساعدة في تجنُّب التغييرات غير المتوافقة المستقبلية على مستوى المصدر، ولكنّه يعني أيضًا أنّه يجب نقل طرق الحظر من CommonExtension إلى ApplicationExtension وLibraryExtension وDynamicFeatureExtension وTestExtension.

    عند ترقية مشروعك إلى الإصدار 9.0 من Android Gradle Plugin، عليك إعادة تصميم رمز المكوّن الإضافي لنظام Gradle الذي يستخدم هذه المَعلمات أو طرق الحظر. على سبيل المثال، تم تعديل المكوّن الإضافي التالي لإزالة المَعلمة "النوع" وعدم الاعتماد على طرق الحظر التي تمت إزالتها:

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    بالنسبة إلى المكوّنات الإضافية التي تستهدف نطاقًا من إصدارات &quot;المكوّن الإضافي لنظام Android Gradle&quot;، يكون استخدام الدالة getter مباشرةً متوافقًا مع إصدارات &quot;المكوّن الإضافي لنظام Android Gradle&quot; الأقل من 9.0.

تمت إزالة DSL

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

واجهات برمجة التطبيقات التي تمت إزالتها

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

إزالة خصائص Gradle

تمت إضافة خصائص Gradle التالية في البداية كطرق لإيقاف الميزات التي تم تفعيلها تلقائيًا على مستوى العالم.

تم إيقاف هذه الميزات تلقائيًا منذ الإصدار 8.0 أو الإصدارات الأقدم من "مكوّن Android الإضافي". فعِّل هذه الميزات في المشاريع الفرعية التي تستخدمها فقط للحصول على عملية إنشاء أكثر كفاءة.

الخاصية الوظيفة الاستبدال
android.defaults.buildfeatures.aidl تتيح هذه السمة تجميع AIDL في جميع المشاريع الفرعية فعِّل تجميع AIDL في المشاريع الفرعية فقط التي تتضمّن مصادر AIDL، وذلك من خلال ضبط السمة التالية في ملفات تصميم Gradle الخاصة بهذه المشاريع:
android {
  buildFeatures {
    aidl = true
  }
}
في ملف تصميم Gradle لكل مشروع فرعي يحتوي على مصادر AIDL
android.defaults.buildfeatures.renderscript تتيح تجميع RenderScript في جميع المشاريع الفرعية فعِّل تجميع renderscript في المشاريع الفرعية فقط التي تتضمّن مصادر renderscript من خلال ضبط السمة التالية في ملفات تصميم Gradle الخاصة بهذه المشاريع:
android {
  buildFeatures {
    renderScript = true
  }
}

خصائص Gradle الإلزامية

يُصدر الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" خطأً إذا ضبطت خصائص Gradle التالية.

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

الخاصية الوظيفة
android.r8.integratedResourceShrinking يتم الآن دائمًا تنفيذ عملية تصغير حجم الموارد كجزء من R8، وتمت إزالة التنفيذ السابق.
android.enableNewResourceShrinker.preciseShrinking يستخدم تقليص الموارد الآن دائمًا تقليص الموارد الدقيق، ما يتيح إزالة المزيد من الموارد.

تغييرات R8

تم تضمين تغييرات R8 التالية في الإصدار 9.0.0 من "مكوّن Android الإضافي في Gradle".

خيار إعداد جديد -processkotlinnullchecks

أضفنا خيار R8 الجديد -processkotlinnullchecks لضبط إعدادات R8 من أجل معالجة عمليات التحقّق من القيم الفارغة في Kotlin. يتطلّب الخيار وسيطًا إلزاميًا يجب أن يكون إحدى القيم الثلاث التالية: keep وremove_message وremove. يعالج الخيار عمليات التحقّق التالية من القيم الفارغة التي أضافها برنامج الترجمة البرمجية للغة Kotlin:

class kotlin.jvm.internal.Intrinsics {
  void checkNotNull(java.lang.Object);
  void checkNotNull(java.lang.Object, java.lang.String);
  void checkExpressionValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkNotNullExpressionValue(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkFieldIsNotNull(java.lang.Object, java.lang.String);
  void checkFieldIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkParameterIsNotNull(java.lang.Object, java.lang.String);
  void checkNotNullParameter(java.lang.Object, java.lang.String);
}

تكون قيم الخيار، مرتّبة من الأضعف إلى الأقوى، على النحو التالي:

  • لا يؤدي keep إلى تغيير عمليات التحقّق.
  • تعيد remove_message كتابة كل استدعاء لطريقة التحقّق إلى استدعاء getClass() في الوسيطة الأولى للاستدعاء (مع الإبقاء على التحقّق من القيمة الفارغة، ولكن بدون أي رسالة).
  • تؤدي remove إلى إزالة علامات الاختيار تمامًا.

يستخدم R8 remove_message تلقائيًا. سيؤدي أي تحديد لـ -processkotlinnullchecks إلى إلغاء ذلك. إذا تم تحديدها عدة مرات، سيتم استخدام القيمة الأقوى.

إيقاف نشر معلومات keep إلى الطرق المصاحبة

عندما تتطابق قواعد الاحتفاظ مع طرق الواجهة التي تخضع لإزالة التشويش، كان R8 ينقل داخليًا بتات عدم السماح بالتحسين وعدم السماح بالتصغير إلى طرق العناصر المساعدة التي تم إنشاؤها.

بدءًا من الإصدار 9.0 من المكوّن الإضافي Android Gradle، لم تعُد قواعد الحفاظ على الرموز البرمجية تنطبق على الطرق المصاحبة. يتوافق ذلك مع حقيقة أنّ قواعد الإبقاء لا تنطبق على الحقول/الطرق/الفئات الأخرى التي يتم إنشاؤها بواسطة المحول البرمجي.

من خلال نقل وحدتَي البت disallow optimization وdisallow shrinking إلى الطرق المصاحبة، كان من الممكن سابقًا تنفيذ حالة الاستخدام التالية:

  1. جمِّع مكتبة تتضمّن طرق واجهة default/static/private إلى DEX باستخدام minSdk < 24 وقواعد تحافظ على طرق الواجهة.
  2. تجميع تطبيق باستخدام المكتبة في مسار الفئة و-applymapping
  3. دمج التطبيق والمكتبة

يُرجى العِلم أنّ هذا الإجراء لا يعمل إلا مع -applymapping لأنّه لا يتم نقل جزء disallow obfuscation إلى الطرق المصاحبة، أي أنّ أسماء الطرق في الفئات المصاحبة التي تم إنشاؤها من الخطوة 1 سيتم تشويشها.

لن يكون هذا الاستخدام متاحًا بعد الآن للإصدارات minSdk الأقدم من 24. الحل البديل هو اتّباع الخطوات التالية:

  1. إزالة السكر من المكتبة باستخدام طرق واجهة default/static/private إلى ملفات الفئات التي تتضمّن minSdk < 24
  2. جمِّع العنصر الذي تمت إزالة تشويشه باستخدام R8 والقواعد التي تحتفظ بطُرق الواجهة في الفئات المصاحبة.
  3. جمِّع التطبيق مع المكتبة في مسار الفئة.
  4. ادمج التطبيق مع العنصر الذي تم إلغاء تشفيره.

من الآثار الجانبية الأخرى لهذا التغيير أنّه لم يعُد من الممكن الاحتفاظ بسمات الفئة الداخلية والطريقة المضمّنة للفئات المجهولة والفئات المحلية داخل طرق العناصر المصاحبة للواجهة.

تغيير ملف المصدر التلقائي الذي يتم إصداره إلى r8-map-id-<MAP_ID>

يتوفّر هذا التغيير في "مكوّن Android الإضافي لبرنامج Gradle" بدءًا من الإصدار 8.12.0.

تتغيّر سمة ملف المصدر التلقائي الذي يتم إصداره لفئة من SourceFile إلى r8-map-id-<MAP_ID> عند الحاجة إلى إعادة التتبُّع (أي عند تفعيل التشويش أو التحسين).

عند توفّر تتبُّع تسلسل استدعاء الدوال البرمجية مشفّر، تتيح سمة ملف المصدر الجديدة استخراج معرّف ملف الربط المطلوب لإعادة التتبُّع، ويمكن استخدامها لتفعيل إعادة التتبُّع التلقائي لتسلسلات استدعاء الدوال البرمجية في Logcat.

في حال استخدام سمة ملف مصدر مخصّصة (-renamesourcefileattribute)، ستظل هذه السمة المخصّصة تحظى بالأولوية.

في وضع التوافق مع ProGuard (عندما يحتوي gradle.properties على android.enableR8.fullMode=false)، لن يكون لإصدار سمة ملف مصدر بقيمة r8-map-id-<MAP_ID> أي تأثير إلا إذا لم يتم الاحتفاظ بالسمة SourceFile. إذا كانت التطبيقات تستخدم وضع التوافق مع ProGuard وتريد تضمين معرّف ملف الربط في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية، عليها إزالة -keepattributes SourceFile (أو الانتقال إلى وضع R8 الكامل).

رقم تعريف الخريطة المستخدَم في r8-map-id-<MAP_ID> هو تجزئة الخريطة الكاملة، وليس بادئة مكوّنة من 7 أحرف من تجزئة الخريطة التي تم استخدامها سابقًا.

تفعيل استخدام الأسماء الاصطناعية المصغّرة في عملية إزالة السكر من الإصدار 8 من مكتبة Java

يحتوي اسم الفئات الاصطناعية التي تم إنشاؤها بواسطة D8 عادةً على السلسلة الفرعية $$ExternalSynthetic التي توضّح أنّ هذه الفئة اصطناعية تم إنشاؤها بواسطة D8. علاوةً على ذلك، يتضمّن اسم العنصر الاصطناعي نوع العنصر الاصطناعي (على سبيل المثال، Backport وLambda)، ما يؤثر سلبًا في حجم DEX الناتج، لأنّ أسماء الفئات تشغل مساحة أكبر في مجموعة السلاسل.

يضبط الإصدار 9.0 من "مكوّن Android الإضافي في Gradle" عملية إلغاء التحسين في المكتبة الأساسية (L8) لكي يستخدم ملف DEX الذي يحتوي على جميع فئات j$ تنسيقًا جديدًا مختصرًا لاسم الفئة من أجل الفئات الاصطناعية. يستخدم اسم الفئة الجديد معرّفًا رقميًا (على سبيل المثال، $1).

إزالة التوافق مع -addconfigurationdebugging

يزيل الإصدار 9.0 من Android Gradle Plugin إمكانية استخدام -addconfigurationdebugging. يعرض المترجم الآن تحذيرًا إذا تم استخدام العلامة.

إزالة إمكانية إنشاء قواعد L8 من D8/R8

لا ينطبق هذا التغيير إلا على المطوّرين الذين يستخدمون سطر الأوامر أو واجهات برمجة التطبيقات D8/R8 مباشرةً.

يزيل الإصدار 9.0 من R8 إمكانية إنشاء قواعد الاحتفاظ بـ L8 من D8 وR8. يمكنك بدلاً من ذلك استخدام TraceReferences لهذا الغرض.

على وجه التحديد، ستتم إزالة الطريقتَين D8Command.builder.setDesugaredLibraryKeepRuleConsumer وR8Command.Builder.setDesugaredLibraryKeepRuleConsumer، كما ستتم إزالة إمكانية استخدام --desugared-lib-pg-conf-output من خيارات سطر الأوامر في D8 وR8.

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

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
لا يحلّ الإصدار 9.0.0-rc01 من المكوّن الإضافي لنظام Gradle المتوافق مع Android مكتبات Kotlin من خلال الدالة kotlin()

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

المشاكل التي تم إصلاحها
لم يتم وضع العلامة "تم حلّها" على أي مشاكل عامة في الإصدار 9.0.0-rc02 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"

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

المشاكل التي تم إصلاحها
لم يتم وضع العلامة "تم حلّها" على أي مشاكل عامة في الإصدار 9.0.0-rc01 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
يجب ألا تتم مزامنة دعم Kotlin المضمّن في AGP مع مجموعات المصادر في Kotlin

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
يجب ألا تتم مزامنة دعم Kotlin المضمّن في AGP مع مجموعات المصادر في Kotlin
تفضّل السمة missingDimensionStrategy نوعًا مطابقًا لاسمها حتى من سمة غير مرتبطة.

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

المشاكل التي تم إصلاحها
لم يتم وضع العلامة "تم حلّها" على أي مشاكل عامة في الإصدار 9.0.0-beta03 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
طلب ميزة: إدخال الإصدار المثالي من &quot;المكوّن الإضافي لنظام Gradle المتوافق مع Android&quot; كسمة
Stabilize SingleArtifact.VERSION_CONTROL_INFO_FILE
تعطُّل مخرجات logcat الخاصة بـ androidTest connectedCheck
Lint
الإصدار 8.11.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android: تعطُّل مهمة lintAnalyzeRelease عند تطبيق ملفات ‎ .gradle.kts باستخدام apply(from = "...")
دمج Lint
عدم توفّر ذاكرة التخزين المؤقت لـ AndroidLintAnalysisTask في مختلف مورّدي JDK أو الإصدارات الثانوية بسبب اختلافات systemPropertyInputs.javaVersion

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

المشاكل التي تم إصلاحها
لم يتم وضع العلامة "تم حلّها" على أي مشاكل عامة في الإصدار 9.0.0-beta01 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
يجب ألا تتم مزامنة دعم Kotlin المضمّن في AGP مع مجموعات المصادر في Kotlin
فشل نشر مكتبة Android إذا كان ملف الاحتفاظ بالمستهلك يحتوي على -dontobfuscate
لا تتوفّر خيارات لطباعة عملية الربط بين الموارد المحسّنة
يجب أن يؤدي استدعاء finalizeDsl بعد اجتياز هذه المرحلة إلى حدوث خطأ
يُعدّ "مكوّن Android الإضافي في Gradle" إعدادات Jetifier حتى عندما تكون Jetifier غير مفعّلة
لا يؤدي إنشاء تطبيق باستخدام Kotlin إلى إضافة kotlinStdlib كاعتمادية في وقت التجميع عندما تكون قيمة `kotlin.stdlib.default.dependency` هي true في ملفات الوحدة وملفات pom
دمج Lint
يستخدم Lint تلقائيًا أحدث حزمة SDK مثبَّتة على الرغم من compileSdk، ولا يتم تسجيلها كإدخال للمهمة، ما يؤدي إلى تعطيل التخزين المؤقت
Shrinker (R8)
يتعذّر تصغير الموارد المحسَّن باستخدام R8 بدون إظهار أي رسالة خطأ في حال استخدام معرّفات الموارد النهائية

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
‫AGP9: لا يعمل `variant.sources.kotlin!!.addGeneratedSourceDirectory()`
عمليات التحقّق من البيانات الوصفية لملفات Aar في حزمة SDK المستهدَفة تستخدم لغة DSL القديمة
إزالة السمة المتوقّفة نهائيًا `com.android.build.api.dsl.ManagedDevices.devices`

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
تعتمد مشاريع Java البحتة على مكتبة Kotlin القياسية.
إزالة خصائص KotlinMultiplatformAndroidCompilationBuilder المتوقّفة نهائيًا في الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"
يجب أن يكون للإصدار `com.android.tools.build:gradle:9.0.0-alpha05` اعتمادية على واجهة برمجة التطبيقات في KGP وgradle-api
إعادة تسمية المكوّن الإضافي com.android.experimental.built-in-kotlin Gradle

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
‫Built-in-kotlin لا ينشر قيود التبعية kotlin-stdlib في ملف maven pom
إضافة حالة اختبار لاختلاف الإصدارَين compileSdk وtargetSdk
قيمة resConfigs فارغة تؤدي إلى حدوث خطأ غير واضح في أداة aapt

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
يجب ألا يتم استخراج extractNativeLibs وuseEmbeddedDex من ملف البيان
تحذيرات من R8 في الإصدار ‎9.0.0-alpha09 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"
Lint
لا تضيف لغة Kotlin المضمّنة الملف ‎ .kotlin_module إلى META-INF
يحتوي مسار فئة Lint على فئات مكرّرة بإصدارات مختلفة
حلّ بديل لتجاوز الموارد الخاصة لا يعمل (tools:override = "true")

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
يتخطّى المكوّن الإضافي `legacy-kapt` معالجة التعليقات التوضيحية على عكس `kotlin-kapt`
لا يعمل compileSdkSpec.minorApiLevel مع SettingsExtension
[fused lib - public] لا تتضمّن المكتبة المدمجة التي تم إنشاؤها المصادر

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

المشاكل التي تم إصلاحها
لم يتم وضع العلامة "تم حلّها" على أي مشاكل عامة في الإصدار ‎9.0.0-alpha08 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
يتعذّر إنشاء إصدار إذا كانت هناك مهام لإنشاء الرموز البرمجية
عند ضبط `android.builtInKotlin=false` و `android.newDsl=false` و `android.enableLegacyVariantApi=false`، سيتعذّر استخدام المكوّن الإضافي `kotlin-android` وسيظهر الخطأ "واجهة برمجة التطبيقات 'applicationVariants' قديمة".
يتعذّر على لغة Kotlin المضمّنة تحليل kotlin-stdlib غير المحدَّد الإصدار عند ضبط kotlin.stdlib.default.dependency=false
يفتح DexData ملفًا بدون إغلاقه، ما يمنع تنظيفه
يجب أن يتوقف AndroidSourceDirectorySet عن توسيع PatternFilterable في الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"
خطأ في بيانات الاختبار في الوحدات المخصّصة للاختبار فقط
حدوث خطأ غير صحيح عند استخدام دوال استقبال السياق في أدوات الاختبار
أخطاء غير صحيحة في بيئة التطوير المتكاملة (IDE) لرمز Kotlin في testFixtures

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
لا تنشئ لغة DSL الجديدة لتحسين الأداء ملف configuration.txt تلقائيًا
تعذُّر تأكيد صحة الرسم البياني للتنقّل في وحدة الإصدار 8.13.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"
يستخدم المكوّن الإضافي لنظام Gradle المتوافق مع Android واجهة برمجة تطبيقات Gradle المتوقّفة نهائيًا: صيغة السلاسل المتعددة
تحذير المستخدمين الذين يحاولون استخدام مكتبة multidex القديمة مع minSdkVersion >=21
Lint
لا يتحقّق Lint ChecksSdkIntAtLeast Check مما إذا كانت القيمة المشروحة صحيحة

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
لا يعمل android.proguard.failOnMissingFiles مع consumerProguardFiles
تحديث اعتمادية المكوّن الإضافي لنظام Gradle المتوافق مع Kotlin إلى الإصدار 2.2.10
إنشاء KotlinJvmAndroidCompilation باستخدام KGP API
تطبيق وضع واجهة برمجة التطبيقات الصريحة في Kotlin على مصادر الاختبار
Lint
أداة Lint تعرض التحذير "تعذّر تنظيف ذاكرات التخزين المؤقت K2"

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
التبديل من الإصدار 8 إلى الإصدار 11 من Java كمصدر/هدف تلقائي في الإصدار 9.0 من "مكوّن Android الإضافي لبرنامج Gradle"
تغيير القيمة التلقائية لـ android.useAndroidX إلى true
تحسين معالجة الاستثناء عند تطبيق مكوّن kapt الإضافي مع Kotlin المضمّنة
Lint
أداة Lint تعرض التحذير "تعذّر تنظيف ذاكرات التخزين المؤقت K2"

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
عند تفعيل الخيار `isIncludeAndroidResources`، يتعذّر دمج استخدامات tools:overrideLibrary في الإصدار 8.12.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP) عند تنفيذ الأمر `process{Variant}UnitTestManifest`.
تسبّب AGP في ظهور تحذيرات الإيقاف النهائي في Gradle لمهام اختبار JVM
‫DependencyReportTask غير متوافق مع ذاكرة التخزين المؤقت للإعدادات
Lint
خطأ: لا تؤدي إزالة الموارد غير المستخدَمة إلى إزالة ترجماتها أيضًا، ولا يتم السؤال عن ذلك أيضًا

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
تعذُّر إنشاء الإصدار عند عدم توفّر ملف Proguard
إزالة علامات gradle.properties التلقائية لـ buildconfig
تغيير القيمة التلقائية لـ targetSdk لتستند إلى compileSdk بدلاً من minSdk

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

المشاكل التي تم إصلاحها
المكوّن الإضافي لنظام Gradle المتوافق مع Android
إزالة AndroidSourceSet.jni المتوقّف نهائيًا في الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"
إزالة Installation.installOptions() في الإصدار 9.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"
إزالة BuildType.isRenderscriptDebuggable في الإصدار 9.0 من "مكوّن Android الإضافي في Gradle"
إزالة android.defaults.buildfeatures.renderscript
تعطُّل `com.android.kotlin.multiplatform.library` عند استخدام الأجهزة المُدارة من Gradle
إزالة علامات `android.defaults.buildfeatures.aidl` التلقائية في ملف gradle.properties

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

المشاكل التي تم إصلاحها
لم يتم وضع العلامة "تم حلّها" على أي مشاكل عامة في الإصدار 9.0.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"