الإصدار 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 Script

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

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

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

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

val collection: MutableCollectionType

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

collection = collectionTypeOf(...)

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

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

تصدير تبعيات C/C++ من ملفات AAR

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

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

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

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

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

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

تمت إزالة ذاكرة التخزين المؤقت لإنشاء AGP في الإصدار 4.1 من AGP. في الإصدارات السابقة، تم طرح ذاكرة التخزين المؤقت لعمليات الإنشاء في "المكوّن الإضافي لنظام Gradle المتوافق مع Android" (AGP) 2.3 لتكمّل ذاكرة التخزين المؤقت لعمليات الإنشاء في Gradle، وتم استبدالها بالكامل بذاكرة التخزين المؤقت لعمليات الإنشاء في Gradle في الإصدار 4.1 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". لا يؤثّر هذا التغيير في وقت الإنشاء.

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

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

اعتبارًا من هذا الإصدار، لن يتم الاحتفاظ تلقائيًا بالحقول من فئات 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. لمزيد من المعلومات حول حزمة تطوير البرامج (SDK) المتوقّفة نهائيًا من Fabric ونقل البيانات إلى حزمة تطوير البرامج (SDK) من Firebase Crashlytics، اطّلِع على مقالة الترقية إلى حزمة تطوير البرامج (SDK) من Firebase Crashlytics.