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

يتطلّب هذا الإصدار من المكوّن الإضافي المتوافق مع Android ما يلي:

الإصدار الأدنى الإصدار التلقائي ملاحظات
Gradle 5.6.4 5.6.4 لمزيد من المعلومات، اطّلِع على تحديث Gradle.
أدوات تصميم حزمة تطوير البرامج (SDK) 28.0.3 28.0.3 تثبيت أو ضبط أدوات إنشاء حزمة تطوير البرامج (SDK).

الميزات الجديدة

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

ربط العرض

يوفر ربط العرض أمانًا في وقت التجميع عند الإشارة إلى طرق العرض في الرمز. يمكنك الآن استبدال findViewById() بالإشارة إلى فئة الربط التي تم إنشاؤها تلقائيًا. لبدء استخدام ربط العرض، أضِف ما يلي في ملف build.gradle لكل وحدة:

      android {
          viewBinding.enabled = true
      }
      
      android {
          viewBinding.enabled = true
      }
      

لمزيد من المعلومات، يُرجى قراءة مستندات ربط العرض.

دعم المكوّن الإضافي Maven Publish

يتضمّن المكوّن الإضافي لنظام Gradle المتوافق مع Android دعمًا للمكوّن الإضافي Maven Publish Gradle، ما يتيح لك نشر عناصر الإصدار إلى مستودع Apache Maven. ينشئ المكوّن الإضافي لنظام Gradle المتوافق مع Android مكوّنًا لكل عنصر من عناصر تنويعة التصميم في تطبيقك أو وحدة مكتبتك، ويمكنك استخدامه لتخصيص عملية نشر إلى مستودع Maven.

لمزيد من المعلومات، انتقِل إلى الصفحة التي تتناول كيفية استخدام المكوّن الإضافي Maven Publish.

أداة التغليف التلقائية الجديدة

عند إنشاء إصدار تصحيح الأخطاء من تطبيقك، يستخدم المكوّن الإضافي أداة تغليف جديدة تُسمّى zipflinger لإنشاء حزمة APK. من المفترض أن تؤدي هذه الأداة الجديدة إلى تحسين سرعة الإصدار. إذا لم تعمل أداة التغليف الجديدة على النحو المتوقّع، يُرجى الإبلاغ عن خطأ. يمكنك الرجوع إلى استخدام أداة التغليف القديمة من خلال تضمين ما يلي في ملف gradle.properties

        android.useNewApkCreator=false
      

إحالة الإصدار الأصلي

يمكنك الآن تحديد المدة التي يستغرقها Clang لإنشاء كل ملف C/C++‎ و ربطه في مشروعك. يمكن أن يعرض Gradle تتبُّعًا في Chrome يحتوي على الطوابع الزمنية لأحداث المحول البرمجي هذه، ما يتيح لك فهم الوقت المطلوب لإنشاء مشروعك بشكل أفضل. لعرض ملف إحالة الإصدار هذا، اتّبِع الخطوات التالية:

  1. أضِف العلامة -Pandroid.enableProfileJson=true عند تشغيل إصدار Gradle. على سبيل المثال:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. افتح متصفّح Chrome واكتب chrome://tracing في شريط البحث.

  3. انقر على الزر تحميل وانتقِل إلى <var>project-root</var>/build/android-profile للعثور على الملف. اسم الملف هو profile-<var>timestamp</var>.json.gz.

يمكنك الاطّلاع على بيانات إحالة الإصدار الأصلي بالقرب من أعلى العارض:

تتبُّع تحديد المصدر الأصلي لإنشاء التطبيق في Chrome

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

عند استخدام هذا الإصدار من المكوّن الإضافي، قد تواجه التغييرات التالية في السلوك.

تغليف المكتبات الأصلية غير المضغوطة تلقائيًا

عند إنشاء تطبيقك، يضبط المكوّن الإضافي الآن extractNativeLibs على "false" تلقائيًا. أي أنّ المكتبات الأصلية تتم محاذاتها مع الصفحة وتغليفها غير مضغوطة. على الرغم من أنّ ذلك يؤدي إلى زيادة حجم التحميل، يستفيد المستخدمون من ما يلي:

  • حجم تثبيت أصغر للتطبيق لأنّ النظام الأساسي يمكنه الوصول إلى المكتبات الأصلية مباشرةً من حزمة APK المثبَّتة، بدون إنشاء نسخة من المكتبات.
  • حجم تنزيل أصغر لأنّ ضغط "متجر Play" يكون عادةً أفضل عند تضمين مكتبات مجمّعة من رموز برمجية أصلية غير مضغوطة في حزمة APK أو "مجموعة حزمات تطبيق Android".

إذا كنت تريد أن يغلّف المكوّن الإضافي لنظام Gradle المتوافق مع Android مكتبات أصلية مضغوطة بدلاً من ذلك، أضِف ما يلي في بيان تطبيقك:

        <application
          android:extractNativeLibs="true"
          ... >
        </application>
        
      

ملاحظة: تم استبدال سمة البيان extractNativeLibs بخيار لغة DSL‏ useLegacyPackaging. لمزيد من المعلومات، يُرجى الاطّلاع على ملاحظة الإصدار استخدام لغة DSL لتغليف المكتبات الأصلية المضغوطة.

الإصدار التلقائي من NDK

إذا نزّلت إصدارات متعددة من NDK، يختار المكوّن الإضافي لنظام Gradle المتوافق مع Android الآن إصدارًا تلقائيًا لاستخدامه في تجميع ملفات رمز المصدر. في السابق، كان المكوّن الإضافي يختار أحدث إصدار تم تنزيله من NDK. استخدِم السمة android.ndkVersion في ملف build.gradle الخاص بالوحدة لتجاوز الإعداد التلقائي الذي اختاره المكوّن الإضافي.

تبسيط إنشاء فئة R

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

  • بما أنّ برنامج التجميع يشارك فئات R مع اعتماديات الوحدات الأولية من المهم أن تستخدم كل وحدة في مشروعك اسم حزمة فريدًا.
  • يتم تحديد مدى ظهور فئة R لمكتبة لتبعيات المشروع الأخرى من خلال الإعدادات المستخدَمة لتضمين المكتبة كاعتمادية. على سبيل المثال، إذا كانت "المكتبة أ" تتضمّن "المكتبة ب" كاعتمادية "واجهة برمجة تطبيقات" ، يمكن لـ "المكتبة أ" والمكتبات الأخرى التي تعتمد على "المكتبة أ" الوصول إلى فئة R الخاصة بـ "المكتبة ب". ومع ذلك، قد لا تتمكّن المكتبات الأخرى من الوصول إلى فئة R الخاصة بـ "المكتبة ب". إذا كانت "المكتبة أ" تستخدم إعدادات الاعتمادية implementation لمعرفة المزيد، اقرأ عن إعدادات الاعتمادية.

إزالة الموارد غير المتوفّرة في الإعدادات التلقائية

بالنسبة إلى وحدات المكتبة، إذا تضمّنت موردًا للغة لا تضمّنها في المجموعة التلقائية من الموارد، على سبيل المثال، إذا تضمّنت hello_world كمصدر السلاسل النصية في /values-es/strings.xml ولكن لم تحدّد هذا المورد في /values/strings.xml، لن يعود المكوّن الإضافي لنظام Gradle المتوافق مع Android يتضمّن هذا المورد عند تجميع مشروعك. من المفترض أن يؤدي تغيير السلوك هذا إلى تقليل عدد استثناءات وقت التشغيل Resource Not Found وتحسين سرعة الإنشاء.

يأخذ D8 الآن في الاعتبار سياسة الاحتفاظ بالبيانات `CLASS` للتعليقات التوضيحية

عند تجميع تطبيقك، يأخذ D8 الآن في الاعتبار متى تطبّق التعليقات التوضيحية سياسة الاحتفاظ CLASS، ولم تعُد هذه التعليقات التوضيحية متاحة في وقت التشغيل. يحدث هذا السلوك أيضًا عند ضبط حزمة تطوير البرامج (SDK) المستهدَفة للتطبيق على المستوى 23 من واجهة برمجة التطبيقات، ما كان يسمح سابقًا بالوصول إلى هذه التعليقات التوضيحية أثناء وقت التشغيل عند تجميع تطبيقك باستخدام إصدارات أقدم من المكوّن الإضافي لنظام Gradle المتوافق مع Android وD8.

تغييرات أخرى في السلوك

إصلاح الأخطاء

يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android إصلاحات الأخطاء التالية:

  • أصبحت اختبارات الوحدات في Robolectric متاحة الآن في وحدات المكتبة التي تستخدم ربط البيانات. لمزيد من المعلومات، يُرجى الاطّلاع على المشكلة رقم ‎126775542.
  • يمكنك الآن تشغيل مهام connectedAndroidTest على مستوى وحدات متعددة أثناء تفعيل وضع التنفيذالمتوازي في Gradle.

المشاكل المعروفة

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

بطء أداء مهمة Android Lint

قد يستغرق Android Lint وقتًا أطول بكثير لإكماله في بعض المشاريع بسبب تراجع في البنية الأساسية لتحليله، ما يؤدي إلى بطء عملية احتساب الأنواع المستنتَجة للـ lambdas في بعض بنيات الرموز.

تم الإبلاغ عن المشكلة كـ خطأ في IDEA وسيتم حلّها في الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android.

فئة البيان غير متوفّرة {:#agp-missing-manifest}

إذا كان تطبيقك يحدّد أذونات مخصّصة في البيان، ينشئ المكوّن الإضافي لنظام Gradle المتوافق مع Android عادةً فئة Manifest.java تتضمّن أذوناتك المخصّصة كثوابت سلسلة. يغلّف المكوّن الإضافي هذه الفئة مع تطبيقك، ما يسهّل عليك الإشارة إلى هذه الأذونات في وقت التشغيل.

لا تعمل عملية إنشاء فئة البيان في الإصدار 3.6.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. إذا أنشأت تطبيقك باستخدام هذا الإصدار من المكوّن الإضافي، وكان يشير إلى فئة البيان، قد يظهر لك الاستثناء.ClassNotFoundException لحلّ هذه المشكلة، نفِّذ أحد الإجراءَين التاليَين:

  • أشِر إلى أذوناتك المخصّصة باسمها المؤهّل بالكامل. على سبيل المثال، "com.example.myapp.permission.DEADLY_ACTIVITY".

  • حدِّد الثوابت الخاصة بك، كما هو موضّح أدناه:

                public final class CustomPermissions {
                  public static final class permission {
                    public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY";
                  }
                }