ملحقات 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-Module.
  • تحديد وحدات الامتداد (DX-Module) إما أن تحدد وظائف جديدة أو لا تملك نظير AOSP.
    • مثال 1. إذا أضاف البائع وظيفة مساعدة إلى libjpeg.so للوصول إلى بعض البيانات الداخلية ، فإن libjpeg.so المعدل سيكون DX-Lib وستكون الوظيفة المضافة حديثًا هي الجزء الموسع من المكتبة.
    • مثال 2. إذا قام البائع بتعريف مكتبة غير تابعة لـ AOSP تسمى libfoo.so ، فإن libfoo.so سيكون DX-Lib.

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

  • تستخدم وحدات 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) DAUA دوكس
ممتد (DX) DXUA DXUX

آلية تمديد VNDK

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

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

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