الإصدار 4.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (آب/أغسطس 2020)

التوافق

  الحد الأدنى للإصدار الإصدار التلقائي Notes
المخدّر 6.5 لا ينطبق لمزيد من المعلومات، يمكنك الاطّلاع على تحديث Gradle.
أدوات إنشاء حزمة تطوير البرامج (SDK) 29.0.2 29.0.2 ثبِّت أو ضبط أدوات إصدار SDK.
NDK لا ينطبق 21.1.6352462 ثبِّت أو اضبط نسخة مختلفة من NDK.

يتطلب هذا الإصدار من مكوّن Android الإضافي ما يلي:

الإصدار التلقائي لمعيار NDK في هذا الإصدار هو 21.1.6352462. لتثبيت نسخة مختلفة من NDK، يمكنك الاطّلاع على تثبيت إصدار معيّن من NDK.

الميزات الجديدة

يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android الميزات الجديدة التالية.

دعم Kotlin Script DSL

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

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

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

أصبح تحديد أنواع المجموعات المصممة للتغيير في DSL موحدًا حاليًا على النحو التالي:

val collection: MutableCollectionType

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

collection = collectionTypeOf(...)

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

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

تصدير تبعيات 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 الخارجي الأصلي في تنسيق AAR الذي أنشأه إصدارك، وستُصدِّر كل منهما العناوين من الدليل المحدّد إلى العناصر التابعة لها.

ملاحظة: بالنسبة إلى مستخدمي الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، تم تغيير إعدادات الضبط لاستيراد المكتبات الأصلية التي تم إنشاؤها مسبقًا. لمزيد من المعلومات، يمكنك الاطّلاع على ملاحظات الإصدار 4.0.

إتاحة R8 للبيانات الوصفية بلغة Kotlin

تستخدم لغة Kotlin بيانات وصفية مخصّصة في ملفات فئة Java لتحديد تركيبات لغة Kotlin. تتيح الإصدار R8 حاليًا إمكانية صيانة وإعادة كتابة بيانات Kotlin الوصفية لتوفير إمكانية تقليص مكتبات وتطبيقات Kotlin بشكل كامل باستخدام kotlin-reflect.

للاحتفاظ بالبيانات الوصفية للغة Kotlin، أضِف قواعد Keep التالية:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

سيؤدي هذا الإجراء إلى توجيه R8 بالاحتفاظ بالبيانات الوصفية بلغة Kotlin لجميع الصفوف التي يتم الاحتفاظ بها مباشرةً.

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

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

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

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

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

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

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

تم تقليل حجم التطبيق بشكل كبير للتطبيقات التي تستخدم تقليص الرموز البرمجية.

بدءًا من هذا الإصدار، لن يتم الاحتفاظ تلقائيًا بالحقول من فئات R، ما قد يؤدي إلى توفير كبير في حجم حِزم APK للتطبيقات التي تتيح تقليص الرموز. ويجب ألا يؤدي ذلك إلى تغيير في السلوك ما لم تكن تصل إلى فئات R من خلال الانعكاس. في هذه الحالة، من الضروري إضافة قواعد Keep لفئات R هذه.

تمت إعادة تسمية موقع android.namespacedRClass ليصبح android.nonTransitiveRClass.

تمت إعادة تسمية العلامة التجريبية "android.namespacedRClass" لتصبح android.nonTransitiveRClass.

عند ضبط هذه العلامة في ملف gradle.properties، تتيح هذه العلامة تباعد الأسماء لكل فئة R في كل مكتبة، بحيث لا تتضمّن الفئة R سوى الموارد المعرَّفة في المكتبة نفسها وليس من تبعيات المكتبة، ما يؤدي إلى تقليل حجم الفئة R لتلك المكتبة.

تمت إعادة تسمية Kotlin DSL: تمت إعادة تسمية CoreLibraryDesugaringEnabled.

تم تغيير خيار التجميع في Kotlin DSL coreLibraryDesugaringEnabled إلى isCoreLibraryDesugaringEnabled. للحصول على مزيد من المعلومات حول هذه العلامة، يمكنك الاطّلاع على إتاحة إزالة واجهات برمجة التطبيقات في الإصدار 8 من Java والإصدارات الأحدث (الإصدار 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.