الإصدار 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 الميزات الجديدة التالية.

توافق لغة Kotlin Script DSL

للمساعدة في تحسين تجربة التعديل لمستخدمي Kotlin buildscript، تمّ الآن تحديد DSL وواجهات برمجة التطبيقات لحزمة Android Gradle الإضافية 4.1 في مجموعة من واجهات Kotlin بشكل منفصل عن فئات التنفيذ. ويعني هذا أنّ:

  • تم الآن الإعلان بشكل صريح عن قابلية القيمة الخالية للتغيير وقابلية التغير في أنواع Kotlin.
  • يتم نشر المستندات التي يتم إنشاؤها من هذه الواجهات في مرجع Kotlin API.
  • تم تحديد واجهة برمجة التطبيقات في "المكوّن الإضافي لنظام Gradle المتوافق مع Android" بوضوح، وذلك لجعل عملية توسيع نطاق عمليات إنشاء تطبيقات Android أقلّ تعقيدًا في المستقبل.

ملاحظة مهمة: إذا سبق لك استخدام نصوص إنشاء KTS أو استخدام Kotlin في buildSrc، قد يؤدي ذلك إلى حدوث مشاكل في توافق المصدر بسبب أخطاء معيّنة كانت ستظهر كأخطاء وقت التشغيل في الإصدارات السابقة.

إنّ أنواع المجموعات المصمّمة للتغيير في لغة وصف البيانات (DSL) يتم الآن تحديدها بشكلٍ موحّد على النحو التالي:

val collection: MutableCollectionType

وهذا يعني أنّه لم يعُد من الممكن كتابة ما يلي في نصوص Kotlin البرمجية لبعض المجموعات التي كانت تتيح ذلك في السابق:

collection = collectionTypeOf(...)

ومع ذلك، يمكن تعديل المجموعة بشكلٍ موحّد، لذا من المفترض أن تعمل collection += … وcollection.add(...) الآن في كل مكان.

إذا رصدت أي مشاكل عند ترقية مشروع يستخدِم واجهتَي برمجة التطبيقات وDSL لـ Kotlin في مكوّن Android Gradle Plugin، يُرجى الإبلاغ عن خطأ.

تصدير تبعيات C/C++ من حِزم AAR

أضاف الإصدار 4.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" إمكانية استيراد حِزم Prefab في ملحق AAR. في الإصدار 4.1 من AGP، أصبح من الممكن الآن تصدير المكتبات من الإصدار الخارجي من التطبيق الأصلي في ملف 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 external native build في حزمة 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 لجميع الفئات التي يتم حفظها مباشرةً.

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تصغير مكتبات Kotlin وتطبيقاتها باستخدام ميزة Kotlin reflection مع R8{:.external} على Medium.

الأحكام في الإصدارات المخصّصة لتصحيح الأخطاء

عند إنشاء إصدار تصحيح الأخطاء من تطبيقك باستخدام الإصدار 4.1.0 من "مكوّن Android Gradle المكوّن" والإصدارات الأحدث، سيعيد المُجمِّع المضمّن (D8) كتابة رمز تطبيقك لتفعيل التأكيدات في وقت الترجمة، ما يضمن لك دائمًا تفعيل عمليات التحقّق من التأكيدات.

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

إزالة ذاكرة التخزين المؤقت لإنشاء المكوّن الإضافي لنظام Gradle المتوافق مع Android

تمت إزالة ذاكرة التخزين المؤقت لإنشاء AGP في الإصدار 4.1 من AGP. تم تقديم ذاكرة التخزين المؤقت لإنشاء AGP سابقًا في الإصدار 2.3 من AGP تكميلاً لذاكرة التخزين المؤقت لإنشاء Gradle، ولكن تم استبدال ذاكرة التخزين المؤقت لإنشاء AGP بالكامل بذاكرة التخزين المؤقت لإنشاء Gradle في الإصدار 4.1 من AGP. لا يؤثّر هذا التغيير في وقت الإنشاء.

تم إيقاف مهمة cleanBuildCache وسمات android.enableBuildCache و android.buildCacheDir نهائيًا وسيتمّت إزالتها في IDE AGP 7.0. لا يكون للملكية android.enableBuildCache أي تأثير حاليًا، في حين أنّ الملكية android.buildCacheDir ومهمّة cleanBuildCache ستظلان صالحتَين حتى الإصدار 7.0 من AGP لحذف أي محتوًى حالي من ذاكرة التخزين المؤقت لإنشاء AGP.

انخفاض كبير في حجم التطبيقات التي تستخدم ميزة "تصغير حجم الرموز"

بدءًا من هذا الإصدار، لم يعُد يتم الاحتفاظ بالحقول من فئات 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 والإصدارات الأحدث من واجهة برمجة التطبيقات (مكوّن إضافي لنظام Gradle المتوافق مع Android 4.0.0 والإصدارات الأحدث).

خصائص الإصدار التي تمّت إزالتها من فئة BuildConfig في مشاريع المكتبات

بالنسبة إلى مشاريع المكتبات فقط، تمت إزالة السمتَين BuildConfig.VERSION_NAME و BuildConfig.VERSION_CODE من فئة BuildConfig التي تم إنشاؤها لأنّ هاتين القيمتَين الثابتتَين لم تعكسا القيم النهائية لرمز إصدار التطبيق واسمه، وبالتالي كانت مضلِّلة. بالإضافة إلى ذلك، تم تجاهل هذه القيم أثناء دمج البيان.

في إصدار مستقبلي من المكوّن الإضافي لنظام Gradle المتوافق مع Android، ستتم أيضًا إزالة السمتَين versionName و versionCode من لغة برمجة التطبيقات المحدودة (DSL) للمكتبات. لا تتوفّر حاليًا طريقة للوصول تلقائيًا إلى رمز/اسم إصدار التطبيق من مشروع فرعي للمكتبة.

بالنسبة إلى وحدات التطبيق، لن يحدث أي تغيير، وسيظل بإمكانك تحديد قيم لسمتي versionCode وversionName في لغة وصف البيانات، وسيتم نشر هذه القيم في بيان التطبيق وحقل 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. يجب نقل هذه الاختبارات إلى اختبار مُزوَّد بأدوات قياس في project androidTest، لأنّ تجميع هذه الفئات وتشغيلها في اختبار الوحدة قد يؤدي إلى ظهور نتيجة غير صحيحة.

إيقاف المكوّن الإضافي io.fabric Gradle نهائيًا

تم إيقاف المكوّن الإضافي io.fabric Gradle نهائيًا، وهو غير متوافق مع الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لمزيد من المعلومات عن حزمة تطوير البرامج (SDK) المتوقّفة نهائيًا من Fabric ونقل البيانات إلى حزمة تطوير البرامج (SDK) لمنصّة Firebase Crashlytics، اطّلِع على الترقية إلى حزمة تطوير البرامج (SDK) لمنصّة Firebase Crashlytics.