الإصدار 3.6.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (فبراير 2020)
يتطلّب هذا الإصدار ما يلي:
الحد الأدنى للإصدار | الإصدار التلقائي | الملاحظات | |
---|---|---|---|
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. ينشئ المكوّن الإضافي لنظام Gradle المتوافق مع Android مكوّنًا لكل عنصر من عناصر إصدارات الإنشاء في تطبيقك أو وحدة المكتبة، ويمكنك استخدام هذا المكوّن لتخصيص منشور في مستودع 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 Plugin بدلاً من ذلك مكتبات مجمّعة من رموز برمجية أصلية، أضِف ما يلي إلى ملف البيان الخاص بتطبيقك:
<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"; } }