إضافات مجموعة تطوير البرامج الأصلية للمورّدين (VNDK)

تغيّر الشركات المصنّعة لأجهزة Android رمز المصدر لمكتبات AOSP لأسباب مختلفة. يعيد بعض المورّدين تنفيذ الدوال في مكتبات AOSP لتحسين الأداء، في حين يضيف مورّدون آخرون عناصر ربط جديدة أو واجهات برمجة تطبيقات جديدة أو وظائف جديدة إلى مكتبات AOSP. يوفّر هذا القسم إرشادات بشأن توسيع نطاق مكتبات AOSP بطريقة لا تؤدي إلى إيقاف CTS/VTS.

الاستبدال الفوري

يجب أن تكون جميع المكتبات المشتركة المعدَّلة متوافقة مع الثنائيات، وكذلك أن تكون بدائل قابلة للاستبدال لتلك المضمّنة في AOSP. يجب أن يتمكّن جميع مستخدمي AOSP الحاليين من استخدام المكتبة المشترَكة المعدَّلة بدون الحاجة إلى إعادة الترجمة. يشير هذا الشرط إلى ما يلي:

  • يجب عدم إزالة وظائف AOSP.
  • يجب عدم تغيير البنى إذا كانت هذه البنى ظاهرة للمستخدمين.
  • يجب عدم تعزيز الشرط المسبق للوظائف.
  • يجب أن توفّر الدوال وظائف مماثلة.
  • يجب عدم إضعاف الشرط اللاحق للدوالّ.

تصنيفات الوحدات الموسّعة

يمكنك تصنيف الوحدات حسب الوظائف التي تحدّدها و تستخدمها.

ملاحظة: يتم استخدام الوظائف هنا بدلاً من واجهة برمجة التطبيقات/المعيار الأساسي للبرامج (ABI) لأنّه من الممكن إضافة وظائف بدون تغيير أي واجهة برمجة تطبيقات/معيار أساسي للبرامج.

استنادًا إلى الوظائف المحدّدة في الوحدة، يمكن تصنيف الوحدات إلى وحدة DA ووحدة DX:

  • لا تحدِّد وحدات تحديد AOSP فقط (DA-Module) وظائف جديدة لم تكن متوفّرة في نظيرها في AOSP.
    • المثال 1: مكتبة AOSP سليمة وغير معدَّلة هي وحدة DA.
    • المثال 2: إذا أعاد أحد المورّدين كتابة الدوالّ في libcrypto.so باستخدام تعليمات SIMD (بدون إضافة وظائف جديدة)، سيكون libcrypto.so المعدَّل وحدة DA.
  • وحدات التعريف والإضافات (DX-Module): تحدِّد هذه الوحدات وظائف جديدة أو لا تتضمّن نظيرًا في AOSP.
    • المثال 1: إذا أضاف مورّد دالة مساعدة إلى libjpeg.so للوصول إلى بعض البيانات الداخلية، ستكون libjpeg.so المعدّلة هي مكتبة DX-Lib، وستكون الدالة المُضافة حديثًا هي الجزء الموسّع من المكتبة.
    • المثال 2: إذا عرَّف أحد المورّدين مكتبة غير تابعة لمشروع AOSP باسم libfoo.so، ستكون libfoo.so مكتبة DX-Lib.

استنادًا إلى الوظائف التي تستخدمها الوحدة، يمكن تصنيف الوحدات إلى وحدة تجربة المستخدم ووحدة تحليل الأداء.

  • استخدام وحدات AOSP فقط (UA-Module): لا تستخدم هذه الوحدات سوى وظائف AOSP في عمليات التنفيذ. ولا تعتمد هذه التطبيقات على أي إضافات غير تابعة لمشروع AOSP.
    • المثال 1: مكتبة AOSP سليمة وغير معدَّلة هي وحدة UA.
    • المثال 2: إذا كانت مكتبة مشتركة معدَّلة libjpeg.so تعتمد فقط على واجهات برمجة تطبيقات AOSP الأخرى، ستكون وحدة UA.
  • تعتمد وحدات الاستخدام الموسّع (UX-Module) على بعض الوظائف غير المضمّنة في إطار عمل AOSP عند تنفيذها.
    • المثال 1: إذا كان libjpeg.so معدَّلاً يعتمد على مكتبة أخرى غير تابعة لمشروع AOSP باسم libjpeg_turbo2.so، سيكون libjpeg.so المعدَّل وحدة تجربة مستخدم.
    • المثال 2: إذا أضاف المورّد دالة جديدة إلى libexif.so المعدَّلة واستخدم libjpeg.so المعدَّلة الدالة المُضافة حديثًا من libexif.so، ستكون libjpeg.so المعدَّلة وحدة تجربة مستخدم.

التعريفات وطريقة الاستخدام مستقلّة عن بعضها:

الوظائف المستخدَمة
AOSP فقط (UA) موسّع (تجربة المستخدم)
الوظائف المحدّدة AOSP فقط (DA) DAUA DAUX
موسّع (DX) DXUA DXUX

آلية إضافة مجموعة تطوير أصلية للمورّدين (VNDK)

لن تعمل وحدات المورّدين التي تعتمد على وظائف موسّعة لأنّ مكتبة AOSP التي تحمل الاسم نفسه لا تتضمّن الوظائف الموسّعة. إذا كانت وحدات المورّد تعتمد بشكل مباشر أو غير مباشر على وظائف موسّعة، على المورّدين نسخ المكتبات المشتركة DAUX وDXUA وDXUX إلى ملف التمهيد للمورّد (تبحث عمليات المورّد دائمًا عن المكتبات المشتركة في ملف التمهيد للمورّد أولاً). ومع ذلك، يجب عدم نسخ مكتبات LL-NDK، لذا يجب ألا تعتمد وحدات المورّد على الوظائف الموسّعة التي تحدّدها مكتبات LL-NDK المعدَّلة.

يمكن أن تظل المكتبات المشتركة لـ DAUA في قسم النظام إذا كانت مكتبة AOSP المقابلة يمكنها توفير الوظائف نفسها واستمر عمل وحدات التصنيع عند استبدال قسم النظام بـ Generic System Image (GSI).

من المهم إجراء الاستبدال الفوري لأنّ مكتبات VNDK غير المعدَّلة في مجموعة أدوات GSI سترتبط بالمكتبات المشتركة المعدَّلة عند تعارض الأسماء. في حال تعديل مكتبات AOSP بطريقة غير متوافقة مع واجهة برمجة التطبيقات أو مع ABI، قد يتعذّر ربط مكتبات AOSP في GSI أو قد تؤدي إلى سلوكيات غير محدّدة.