الإصدار 4.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (أغسطس 2020)
التوافق
| الإصدار الأدنى | الإصدار التلقائي | ملاحظات | |
|---|---|---|---|
| Gradle | 6.5 | لا ينطبق | لمزيد من المعلومات، اطّلِع على تحديث Gradle. |
| أدوات تصميم حزمة تطوير البرامج (SDK) | 29.0.2 | 29.0.2 | تثبيت أو ضبط أدوات إنشاء حزمة تطوير البرامج (SDK). |
| NDK | لا ينطبق | 21.1.6352462 | تثبيت أو ضبط إصدار مختلف من NDK |
<p>This version of the Android plugin requires the following:</p>
<ul>
<li>
<p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
To learn more, read the section about <a href="#updating-gradle">updating
Gradle</a>.</p>
</li>
<li>
<p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
29.0.2</a> or higher.</p>
</li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>
الميزات الجديدة
يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android الميزات الجديدة التالية.
إتاحة لغة DSL النصية في Kotlin
للمساعدة في تحسين تجربة التعديل لمستخدمي نص Kotlin البرمجي، يتم الآن تحديد لغة DSL وواجهات برمجة التطبيقات في الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android في مجموعة من واجهات Kotlin بشكل منفصل عن فئات التنفيذ. ويعني هذا أنّ:
- يتم الآن الإعلان بوضوح عن إمكانية القيم الخالية وإمكانية التغيير في أنواع Kotlin.
- يتم نشر المستندات التي تم إنشاؤها من هذه الواجهات في الـ Kotlin API Reference.
- يتم تحديد سطح واجهة برمجة التطبيقات للمكوّن الإضافي لنظام Gradle المتوافق مع Android بوضوح، ما يجعل توسيع إصدارات Android أقل عرضة للخطأ في المستقبل.
ملاحظة مُهمّة: إذا كنت قد استخدمت نصوص KTS البرمجية أو Kotlin في
buildSrc, قد يؤدي ذلك إلى حدوث أعطال في توافق المصدر لبعض الأخطاء
التي كانت تظهر كأخطاء في وقت التشغيل في الإصدارات السابقة.
يتم الآن تعريف أنواع المجموعات المصمّمة للتغيير في لغة DSL بشكل موحّد على النحو التالي:
val collection: MutableCollectionType
يعني ذلك أنّه لم يعُد من الممكن كتابة ما يلي في نصوص Kotlin البرمجية لبعض المجموعات التي كانت تتيح ذلك سابقًا:
collection = collectionTypeOf(...)
ومع ذلك، يتم دعم تغيير المجموعة بشكل موحّد، لذا من المفترض أن تعمل الآن العبارتان collection += …
وcollection.add(...) في كل مكان.
إذا واجهت أي مشاكل عند ترقية مشروع يستخدم واجهات برمجة تطبيقات Kotlin ولغة DSL في المكوّن الإضافي لنظام Gradle المتوافق مع Android ، يُرجى الإبلاغ عن خطأ.
تصدير تبعيات C/C++ من ملفات AAR
أضاف الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android إمكانية استيراد حِزم Prefab في تبعيات AAR. في الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android، أصبح من الممكن الآن تصدير المكتبات من الإصدار الأصلي الخارجي في ملف AAR لمشروع مكتبة Android.
لتصدير مكتباتك الأصلية، أضِف ما يلي إلى كتلة android في
ملف build.gradle الخاص بمشروع مكتبتك:
buildFeatures { prefabPublishing true }prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }
<var>myotherlibrary</var> { headers "src/main/cpp/<var>myotherlibrary</var>/include" }
}
buildFeatures { prefabPublishing = true }prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }
create("<var>myotherlibrary</var>") { headers = "src/main/cpp/<var>myotherlibrary</var>/include" }
}
في هذا المثال، سيتم تجميع مكتبتَي mylibrary و myotherlibrary
من الإصدار الأصلي الخارجي ndk-build أو CMake في ملف AAR الذي تم إنشاؤه من خلال الإصدار، وسيصدّر كل منهما العناوين من الدليل المحدّد إلى التبعيات.
ملاحظة: بالنسبة إلى مستخدمي الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، تغيّرت إعدادات الضبط لاستيراد المكتبات الأصلية التي تم إنشاؤها مسبقًا. لمزيد من المعلومات، راجِع ملاحظات الإصدار 4.0.
إتاحة R8 لبيانات Kotlin الوصفية
تستخدم Kotlin بيانات وصفية مخصّصة في ملفات فئات Java لتحديد بُنى لغة Kotlin. يتيح R8 الآن إمكانية الاحتفاظ بالبيانات الوصفية في Kotlin
وإعادة كتابتها من أجل إتاحة تقليص مكتبات Kotlin وتطبيقاتها
بشكل كامل باستخدام kotlin-reflect.
للاحتفاظ بالبيانات الوصفية في Kotlin، أضِف قواعد الاحتفاظ التالية:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
سيطلب ذلك من R8 الاحتفاظ بالبيانات الوصفية في Kotlin لجميع الفئات التي يتم الاحتفاظ بها مباشرةً.
لمزيد من المعلومات، راجِع مقالة Shrinking Kotlin libraries and applications using Kotlin reflection with R8{:.external} على Medium.
التحقّقات في إصدارات تصحيح الأخطاء
عند إنشاء إصدار تصحيح الأخطاء من تطبيقك باستخدام الإصدار 4.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، سيعيد المحول البرمجي المضمّن (D8) كتابة رمز تطبيقك البرمجي لإتاحة التحقّقات في وقت الترجمة، ما يضمن لك تفعيل عمليات التحقّق من التحقّقات دائمًا.
تغييرات في السلوك
إزالة ذاكرة التخزين المؤقت لتصميم المكوّن الإضافي لنظام Gradle المتوافق مع Android
تمت إزالة ذاكرة التخزين المؤقت لتصميم المكوّن الإضافي لنظام Gradle المتوافق مع Android في الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. تم طرح ذاكرة التخزين المؤقت لتصميم المكوّن الإضافي لنظام Gradle المتوافق مع Android سابقًا في الإصدار 2.3 من المكوّن الإضافي لنظام Gradle المتوافق مع Android لتكميل ذاكرة التخزين المؤقت لتصميم Gradle، ولكن تم استبدالها بالكامل بذاكرة التخزين المؤقت لتصميم Gradle في الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لا يؤثر هذا التغيير في مدّة التصميم.
تم إيقاف مهمة cleanBuildCache والسمتَين android.enableBuildCache وandroid.buildCacheDir، وستتم إزالتهما في الإصدار 7.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لا يكون للسمة android.enableBuildCache أي تأثير حاليًا،
بينما ستظل السمة android.buildCacheDir ومهمة cleanBuildCache تعملان حتى الإصدار 7.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android لحذف أي محتوى حالي في ذاكرة التخزين المؤقت لتصميم المكوّن الإضافي لنظام Gradle المتوافق مع Android.
تقليل حجم التطبيق بشكل كبير للتطبيقات التي تستخدم تخفيض حجم الرموز
بدءًا من هذا الإصدار، لم يعُد يتم الاحتفاظ بالحقول من فئات R تلقائيًا، ما قد يؤدي إلى توفير كبير في حجم ملف APK للتطبيقات التي تفعِّل تقليص الرمز البرمجي. من المفترض ألا يؤدي ذلك إلى تغيير في السلوك ما لم تكن تصل إلى فئات R من خلال الانعكاس، وفي هذه الحالة من الضروري إضافة قواعد الاحتفاظ لفئات R هذه.
تمت إعادة تسمية السمة android.namespacedRClass إلى android.nonTransitiveRClass
تمت إعادة تسمية العلامة التجريبية android.namespacedRClass إلى
android.nonTransitiveRClass.
تتيح هذه العلامة، التي تم ضبطها في ملف gradle.properties، وضع مساحة اسم لفئة R لكل مكتبة بحيث لا تتضمّن فئة R سوى الموارد التي تم الإعلان عنها في المكتبة نفسها وليس أي موارد من تبعيات المكتبة، ما يقلّل من حجم فئة R لهذه المكتبة.
لغة Kotlin DSL: تمت إعادة تسمية coreLibraryDesugaringEnabled
تم تغيير خيار الترجمة في لغة Kotlin DSL coreLibraryDesugaringEnabled إلى isCoreLibraryDesugaringEnabled.
لمزيد من المعلومات عن هذه العلامة، راجِع
مقالة إتاحة إلغاء تجميع واجهات برمجة التطبيقات Java 8 والإصدارات الأحدث (الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث).
إزالة سمات الإصدار من فئة BuildConfig في مشاريع المكتبات
بالنسبة إلى مشاريع المكتبات فقط، تمت إزالة السمتَين BuildConfig.VERSION_NAME و
BuildConfig.VERSION_CODE من فئة
BuildConfig التي تم إنشاؤها لأنّ هذه القيم الثابتة لم تعكس القيم النهائية لرمز الإصدار واسمه في التطبيق، وبالتالي كانت مضلّلة. بالإضافة إلى ذلك، تم تجاهل هذه القيم أثناء دمج البيان.
في إصدار مستقبلي من المكوّن الإضافي لنظام Gradle المتوافق مع Android، ستتم أيضًا إزالة السمتَين versionName و
versionCode من لغة DSL للمكتبات.
ليس هناك حاليًا طريقة للوصول تلقائيًا إلى رمز إصدار التطبيق واسمه
من مشروع فرعي للمكتبة.
بالنسبة إلى وحدات التطبيق، لن يحدث أي تغيير، وسيظل بإمكانك تعيين قيم للسمتَين
versionCode وversionName في لغة DSL، وسيتم نشر هذه القيم في بيان التطبيق وحقول BuildConfig.
ضبط مسار NDK
يمكنك ضبط مسار تثبيت NDK المحلي باستخدام السمة android.ndkPath
في ملف الوحدة build.gradle.
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}إذا كنت تستخدم هذه السمة مع السمة android.ndkVersion، يجب أن يحتوي هذا المسار على إصدار NDK يطابق android.ndkVersion.
تغييرات في سلوك اختبارات الوحدات في المكتبة
لقد غيّرنا سلوك كيفية تجميع اختبارات الوحدات في المكتبة وتشغيلها. يتم الآن تجميع اختبارات الوحدات في المكتبة وتشغيلها مقابل فئات الترجمة/وقت التشغيل في المكتبة نفسها، ما يؤدي إلى استخدام اختبارات الوحدات للمكتبة بالطريقة نفسها التي تستخدمها المشاريع الفرعية الخارجية. يؤدي هذا الإعداد عادةً إلى اختبار أفضل.
في بعض الحالات، قد تواجه اختبارات الوحدات في المكتبة التي تستخدم ربط البيانات فئات DataBindingComponent
أو BR
غير متوفّرة. يجب نقل هذه الاختبارات إلى اختبار مُعدّ في مشروع
androidTest، لأنّ التجميع والتشغيل مقابل هذه الفئات في
اختبار وحدة قد يؤديان إلى إخراج غير صحيح.
إيقاف المكوّن الإضافي io.fabric Gradle نهائيًا
تم إيقاف المكوّن الإضافي io.fabric Gradle نهائيًا، وهو غير متوافق مع الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لمزيد من المعلومات عن الـ Fabric SDK التي تم إيقافها نهائيًا والترحيل إلى Firebase Crashlytics SDK، راجِع الترقية إلى Firebase Crashlytics SDK.