الإصدار 3.6.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (فبراير 2020)
يتطلّب هذا الإصدار من المكوّن الإضافي لنظام التشغيل Android ما يلي:
الحد الأدنى للإصدار | الإصدار التلقائي | الملاحظات | |
---|---|---|---|
Gradle | 5.6.4 | 5.6.4 | لمزيد من المعلومات، اطّلِع على تحديث Gradle. |
أدوات إنشاء حزمة تطوير البرامج (SDK) | 28.0.3 | 28.0.3 | ثبِّت أو اضبط أدوات إنشاء حزمة تطوير البرامج (SDK). |
يتوافق هذا التحديث الطفيف مع الإعدادات التلقائية والميزات الجديدة لإمكانية الوصول إلى الحِزم في Android 11.
يُرجى الاطّلاع على ملاحظات الإصدار 4.0.1 للحصول على التفاصيل.
الميزات الجديدة
يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android الميزات الجديدة التالية.
ربط طرق العرض
توفّر ميزة ربط العرض أمانًا في وقت الترجمة البرمجية عند الإشارة إلى طرق العرض في الرمز البرمجي. يمكنك الآن استبدال findViewById()
بمرجع فئة الربط الذي يتم إنشاؤه تلقائيًا. لبدء استخدام View Binding،
أدرِج ما يلي في ملف build.gradle
لكل وحدة:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات ربط العرض.
إتاحة استخدام إضافة Maven Publish
يتضمّن المكوّن الإضافي لنظام Gradle المتوافق مع Android إمكانية استخدام المكوّن الإضافي لنظام Gradle الخاص بالنشر في Maven، ما يتيح لك نشر عناصر الإصدار في مستودع Apache Maven. ينشئ مكوّن Android Gradle الإضافي مكوّنًا لكل عنصر من عناصر إصدارات الإنشاء في تطبيقك أو وحدة المكتبة، ويمكنك استخدام هذا المكوّن لتخصيص منشور في مستودع Maven.
لمزيد من المعلومات، انتقِل إلى الصفحة حول كيفية استخدام إضافة Maven Publish.
أداة الحزم التلقائية الجديدة
عند إنشاء إصدار تصحيح الأخطاء من تطبيقك، تستخدم الإضافة أداة تغليف جديدة، تُسمى zipflinger، لإنشاء حزمة APK. من المفترض أن تؤدي هذه الأداة الجديدة إلى تحسين سرعة الإنشاء. إذا لم تعمل أداة التغليف الجديدة على النحو المتوقّع، يُرجى الإبلاغ عن خطأ. يمكنك الرجوع إلى استخدام أداة التغليف القديمة من خلال تضمين ما يلي في ملف gradle.properties
:
android.useNewApkCreator=false
إحالة الإصدار الأصلي
يمكنك الآن تحديد المدة التي يستغرقها Clang لإنشاء وربط كل ملف C/C++ في مشروعك. يمكن أن يعرض Gradle عملية تتبُّع Chrome تحتوي على الطوابع الزمنية لأحداث المحول البرمجي هذه، ما يتيح لك فهم الوقت المطلوب لإنشاء مشروعك بشكل أفضل. لإخراج ملف تحديد المصدر الخاص بهذا الإصدار، اتّبِع الخطوات التالية:
-
أضِف العلامة
-Pandroid.enableProfileJson=true
عند تشغيل إصدار Gradle. مثلاً:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
افتح متصفّح Chrome واكتب
chrome://tracing
في شريط البحث. -
انقر على الزر تحميل وانتقِل إلى
<var>project-root</var>/build/android-profile
للعثور على الملف. اسم الملف هوprofile-<var>timestamp</var>.json.gz
.
يمكنك الاطّلاع على بيانات تحديد المصدر الخاصة بالإصدارات الأصلية بالقرب من أعلى نافذة العارض:
تغييرات السلوك
عند استخدام هذا الإصدار من المكوّن الإضافي، قد تواجه التغييرات التالية في السلوك.
المكتبات الأصلية التي يتم تجميعها بدون ضغط تلقائيًا
عند إنشاء تطبيقك، يضبط المكوّن الإضافي الآن قيمة
extractNativeLibs
على "false"
تلقائيًا. أي أنّ المكتبات المجمّعة من رموز برمجية أصلية تتم محاذاتها مع الصفحات وتعبئتها بدون ضغط. على الرغم من أنّ ذلك يؤدي إلى زيادة حجم التحميل، يستفيد المستخدمون من المزايا التالية:
- صغر حجم تثبيت التطبيق لأنّ النظام الأساسي يمكنه الوصول إلى المكتبات الأصلية مباشرةً من حزمة APK المثبَّتة، بدون إنشاء نسخة من المكتبات.
- حجم تنزيل أصغر لأنّ الضغط في "متجر Play" يكون عادةً أفضل عند تضمين مكتبات مجمّعة من رموز برمجية أصلية غير مضغوطة في حزمة APK أو حزمة تطبيق Android
إذا كنت تريد أن تضمّن إضافة Android Gradle بدلاً من ذلك مكتبات مجمّعة من رموز برمجية أصلية مضغوطة، أدرِج ما يلي في ملف البيان الخاص بتطبيقك:
<application
android:extractNativeLibs="true"
... >
</application>
ملاحظة: تم استبدال السمة extractNativeLibs
في ملف البيان
بالخيار useLegacyPackaging
DSL. لمزيد من المعلومات، راجِع ملاحظة الإصدار
استخدام لغة خاصة بالمجال لتجميع المكتبات الأصلية المضغوطة.
إصدار NDK التلقائي
إذا نزّلت إصدارات متعددة من NDK، سيختار المكوّن الإضافي لنظام Gradle المتوافق مع Android الآن إصدارًا تلقائيًا لاستخدامه في تجميع ملفات الرموز المصدرية.
في السابق، كانت الإضافة تختار أحدث إصدار تم تنزيله من NDK.
استخدِم السمة android.ndkVersion
في ملف build.gradle
الخاص بالوحدة لتجاوز الإعداد التلقائي الذي اختارته الإضافة.
إنشاء فئة R مبسطة
يُبسّط مكوّن Android Gradle الإضافي مسار فئة وقت الترجمة من خلال إنشاء فئة R واحدة فقط لكل وحدة مكتبة في مشروعك ومشاركة فئات R هذه مع تبعيات الوحدات الأخرى. من المفترض أن يؤدي هذا التحسين إلى تسريع عمليات الإنشاء، ولكن يجب مراعاة ما يلي:
- بما أنّ برنامج الترجمة البرمجية يشارك فئات R مع تبعيات الوحدات النمطية المتسلسلة، من المهم أن تستخدم كل وحدة نمطية في مشروعك اسم حزمة فريدًا.
- يتم تحديد إذن الوصول إلى فئة R الخاصة بالمكتبة من خلال العناصر الاعتمادية الأخرى للمشروع حسب الإعدادات المستخدَمة لتضمين المكتبة كعنصر اعتمادي. على سبيل المثال، إذا كانت المكتبة A تتضمّن المكتبة B كعنصر تابع من النوع "api"، يمكن للمكتبة A والمكتبات الأخرى التي تعتمد على المكتبة A الوصول إلى فئة R الخاصة بالمكتبة B. ومع ذلك، قد لا تتمكّن المكتبات الأخرى من الوصول إلى الفئة R في المكتبة B. إذا كانت المكتبة A تستخدم إعدادات التبعية
implementation
. لمزيد من المعلومات، اطّلِع على إعدادات التبعية.
إزالة الموارد غير المتوفّرة في الإعدادات التلقائية
بالنسبة إلى وحدات المكتبة، إذا أدرجت موردًا للغة لا يتضمّنها
مجموعة الموارد التلقائية، مثلاً إذا أدرجت
hello_world
كمورد سلسلة في
/values-es/strings.xml
ولكنك لم تحدّد هذا المورد في
/values/strings.xml
، لن تتضمّن إضافة Android Gradle
هذا المورد عند تجميع مشروعك. من المفترض أن يؤدي هذا التغيير في السلوك إلى تقليل عدد Resource Not Found
استثناءات وقت التشغيل وتحسين سرعة الإنشاء.
يتوافق D8 الآن مع سياسة الاحتفاظ ببيانات CLASS للتعليقات التوضيحية
عند تجميع تطبيقك، يراعي المحوّل البرمجي D8 الآن الحالات التي تطبّق فيها التعليقات التوضيحية سياسة الاحتفاظ CLASS، ولم تعُد هذه التعليقات التوضيحية متاحة في وقت التشغيل. يحدث هذا السلوك أيضًا عند ضبط حزمة تطوير البرامج (SDK) المستهدَفة للتطبيق على المستوى 23 من واجهة برمجة التطبيقات، والذي كان يسمح سابقًا بالوصول إلى هذه التعليقات التوضيحية أثناء وقت التشغيل عند تجميع تطبيقك باستخدام إصدارات أقدم من الإصدارات المتاحة من Android Gradle Plugin وD8.
تغييرات أخرى في السلوك
-
لم يعُد
aaptOptions.noCompress
حساسًا لحالة الأحرف على جميع المنصات (لكل من حِزم APK والحِزم)، ويتوافق مع المسارات التي تستخدم أحرفًا كبيرة. -
أصبحت ميزة ربط البيانات الآن تراكمية تلقائيًا. لمزيد من المعلومات، يُرجى الاطّلاع على المشكلة رقم 110061530.
-
أصبحت جميع اختبارات الوحدات، بما في ذلك اختبارات الوحدات باستخدام Roboelectric، قابلة للتخزين المؤقت بالكامل. لمزيد من المعلومات، يُرجى الاطّلاع على المشكلة رقم 115873047.
إصلاح الأخطاء
يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android إصلاحات الأخطاء التالية:
- أصبحت اختبارات الوحدات Robolectric متاحة الآن في وحدات المكتبة التي تستخدم ربط البيانات. لمزيد من المعلومات، يُرجى الاطّلاع على المشكلة رقم 126775542.
- يمكنك الآن تنفيذ مهام
connectedAndroidTest
في وحدات متعدّدة مع تفعيل وضع التنفيذ المتوازي في Gradle.
المشاكل المعروفة
يوضّح هذا القسم المشاكل المعروفة في الإصدار 3.6.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android.
بطء أداء مهمة Android Lint
قد تستغرق أداة Android Lint وقتًا أطول بكثير لإكمال بعض المشاريع بسبب تراجع في البنية الأساسية لتحليلها، ما يؤدي إلى بطء عملية احتساب الأنواع المستنتَجة للوظائف المجهولة في بعض بنيات الرموز البرمجية.
تم تسجيل هذه المشكلة على أنّها خطأ في IDEA وسيتم حلّها في الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android.
فئة البيان غير متوفّرة {:#agp-missing-manifest}
إذا كان تطبيقك يحدّد أذونات مخصّصة في البيان، عادةً ما تنشئ إضافة Android Gradle فئة 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"; } }