يقوم مصنعو أجهزة 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.
- مثال 1. إذا أضاف البائع وظيفة مساعدة إلى
اعتمادًا على الوظائف التي تستخدمها الوحدة النمطية ، يمكن تصنيف الوحدات النمطية إلى وحدة 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.
- مثال 1. إذا كان
التعريفات والاستخدامات مستقلة عن بعضها البعض:
الوظائف المستخدمة | |||
---|---|---|---|
فقط 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 في الارتباط أو تؤدي إلى سلوكيات غير محددة.