ملحقات VNDK

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

قطرة في استبدال

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

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

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

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

ملاحظة : يتم استخدام الوظائف هنا بدلاً من API/ABI لأنه من الممكن إضافة وظائف دون تغيير أي API/ABI.

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

  • لا تحدد وحدات 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.

اعتمادًا على الوظائف التي تستخدمها الوحدة، يمكن تصنيف الوحدات إلى وحدة UA ووحدة UX .

  • تستخدم وحدات 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 المعدل سيكون وحدة UX.
    • مثال 2. إذا أضاف البائع وظيفة جديدة إلى libexif.so المعدل الخاص به وكان libjpeg.so المعدل يستخدم الوظيفة المضافة حديثًا من libexif.so ، فإن libjpeg.so المعدل الخاص به سيكون وحدة UX.

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

الوظائف المستخدمة
AOSP (UA) فقط موسعة (UX)
وظائف محددة AOSP (DA) فقط داوا دوكس
ممتد (DX) DXUA دي إكس يو إكس

آلية تمديد VNDK

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

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

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