الإصدار 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.
  • يتم تحديد سطح واجهة برمجة التطبيقات للمكوّن الإضافي لنظام 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 من خلال الانعكاس، وفي هذه الحالة من الضروري إضافة قواعد الاحتفاظ لتلك الفئات.

تمت إعادة تسمية السمة 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.