تصميم لقطة VNDK

يمكن استخدام لقطات VNDK بواسطة صورة النظام لتوفير مكتبات VNDK الصحيحة لصور البائعين حتى عندما يتم إنشاء صور النظام والبائعين من إصدارات مختلفة من Android. يتطلب إنشاء لقطة VNDK التقاط مكتبات VNDK كلقطة ووضع علامة عليها برقم الإصدار. قد ترتبط صورة البائع بإصدار VNDK محدد يوفر واجهات برمجة التطبيقات المطلوبة للوحدات النمطية الموجودة في صورة البائع. ومع ذلك، ضمن نفس إصدار VNDK، يجب أن تكون مكتبات VNDK مستقرة ABI .

يتضمن تصميم لقطة VNDK طرقًا لإنشاء الإصدارات المسبقة من لقطة VNDK من صورة النظام الحالية وتثبيت تلك libs المعدة مسبقًا على قسم النظام لإصدار Android الأحدث.

حول مكتبات VNDK

يتيح HIDL-HALs ، الذي تم تقديمه في Android 8.0، إجراء ترقيات منفصلة لأقسام النظام والبائعين. يحدد VNDK مجموعات من المكتبات (VNDK-core وVNDK-SP وLL-NDK) التي يمكن لرمز البائع الارتباط بها ويمنع البائعين من استخدام المكتبات غير الموجودة في مجموعة VNDK. ونتيجة لذلك، يمكن إنشاء صورة البائع وتشغيلها إذا تم توفير مجموعات VNDK المناسبة على صورة النظام إلى صورة البائع.

VNDK النواة

تم تثبيت مجموعة مكتبات VNDK الأساسية في /system/lib[64]/vndk-${VER} وهي متاحة فقط لعمليات البائعين بمستوى API الذي يساوي ${VER} . لا يجوز لعمليات النظام استخدام هذه المكتبات ويجب بدلاً من ذلك استخدام المكتبات المثبتة في /system/lib[64] . نظرًا لقيود مساحة الاسم الصارمة لكل عملية، فإن مكتبات VNDK الأساسية آمنة من التحميل المزدوج.

لتضمين مكتبة في VNDK-core، أضف ما يلي إلى Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
},

فندك-SP

يتم تثبيت مكتبات VNDK-SP في /system/lib[64]/vndk-sp-${VER} وهي متاحة لعمليات البائع وعمليات النظام (من خلال مكتبات SP-HAL المثبتة في قسم البائع). قد يتم تحميل مكتبات VNDK-SP بشكل مزدوج.

لتضمين مكتبة في VNDK-SP، أضف ما يلي إلى Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

إل إل إن دي كيه

تم تثبيت مكتبات LL-NDK في /system/lib[64] . يمكن لوحدات البائع استخدام مكتبات LL-NDK للوصول إلى الرموز المحددة مسبقًا لمكتبات LL-NDK. يجب أن تكون مكتبات LL-NDK متوافقة مع الإصدارات السابقة ومستقرة مع ABI لتمكين الإصدارات القديمة من وحدات البائع من استخدام الإصدارات الجديدة من مكتبات LL-NDK. نظرًا لخصائص LL-NDK المستقرة لـ ABI، لا تحتاج لقطة VNDK إلى تضمين مكتبات LL-NDK لصور البائعين القديمة.

حول لقطات VNDK

يتضمن Android 8.1 مكتبات VNDK المبنية من كود المصدر . ومع ذلك، بالنسبة للإصدارات الأحدث من Android، يجب التقاط كل إصدار VNDK كلقطة وتقديمها كإنشاء مسبق لتمكين الارتباط بصورة بائع أقدم.

بدءًا من Android 9، ستتضمن الإصدارات الجديدة من Android لقطة واحدة على الأقل من أدلة VNDK-core وVNDK-SP للإصدارات الأقدم في كود مصدر Android. في وقت الإنشاء، سيتم تثبيت اللقطات المطلوبة على /system/lib[64]/vndk-${VER} و /system/lib[64]/vndk-sp-${VER} (الدلائل التي يمكن أن يستخدمها البائع القسم)، حيث ${VER} هو متغير السلسلة الذي يمثل اسم إصدار لقطة VNDK.

نظرًا لأن مكتبات لقطة VNDK قد تختلف لكل إصدار VNDK، فإن لقطة VNDK تتضمن أيضًا تكوينات مساحة اسم الرابط، المثبتة كـ etc/ld.config.${VER}.txt ، /etc/llndk.libraries.${VER}.txt و /etc/vndksp.libraries.${VER}.txt .

مثال: ترقية صور النظام والبائعين

لا توجد لقطة مطلوبة؛ إنشاء بدون تكوينات إضافية للقطات VNDK.

مثال: ترقية صورة النظام فقط

يجب تضمين لقطة VNDK وملفات تكوين مساحة اسم الرابط لصورة البائع في صورة النظام. يتم تكوين ملفات تكوين مساحة اسم الرابط تلقائيًا للبحث عن مكتبات VNDK في /system/lib[64]/vndk-${VER} و /system/lib[64]/vndk-sp-${VER} .

الشكل 1. ترقية النظام فقط

مثال: ترقية صورة النظام، تغيير بسيط في صورة البائع

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

بنية لقطة VNDK

لجعل صورة نظام Android 9 متوافقة مع صورة بائع Android 8.1، يجب توفير لقطة VNDK التي تطابق صورة بائع Android 8.1 مع صورة نظام Android 9، كما هو موضح أدناه:

الشكل 2. بنية لقطة VNDK

يتضمن تصميم لقطة VNDK الطرق التالية:

  • إنشاء لقطة لمكتبات VNDK-core وVNDK-SP . يتضمن Android 9 برنامجًا نصيًا يمكنك استخدامه لأخذ لقطة من بنية VNDK الحالية. يجمع هذا البرنامج النصي جميع المكتبات في /system/lib[64]/vndk-28 و /system/lib[64]/vndk-sp-28 التي تم إنشاؤها باستخدام المصدر الحالي كلقطة VNDK، حيث 28 هو إصدار VNDK من Android 9. تتضمن اللقطة أيضًا ملفات تكوين مساحة اسم الرابط /etc/ld.config.28.txt و /etc/llndk.libraries.28.txt و /etc/vndksp.libraries.28.txt . سيتم استخدام اللقطة التي تم إنشاؤها مع إصدارات Android الأحدث (أعلى من Android 9).
  • تثبيت مكتبات VNDK-core وVNDK-SP المبنية مسبقًا من لقطة . في Android 9، تحتوي لقطة VNDK على مجموعة من مكتبات VNDK الأساسية المعدة مسبقًا ومجموعة من مكتبات VNDK-SP، بالإضافة إلى ملفات تكوين مساحة اسم الرابط. عند تقديم قائمة بإصدارات لقطة VNDK المراد تثبيتها، في وقت الإنشاء، تقوم صورة النظام بتثبيت مكتبات لقطة VNDK على /system/lib[64]/vndk-${VER} و /system/lib[64]/vndk-sp-${VER} أدلة /system/lib[64]/vndk-sp-${VER} وملفات تكوين مساحة اسم الرابط لقطات VNDK تلك إلى دليل /etc .

إصدار VNDK

يحتوي كل إصدار من إصدارات Android على لقطة VNDK واحدة فقط ويتم استخدام إصدار SDK كإصدار VNDK (مما يعني أن إصدار VNDK يحتوي على رقم صحيح، مثل 27 لنظام Android 8.1). تم إصلاح إصدار VNDK عند إصدار إصدار Android. يتم تخزين إصدار VNDK الذي يستخدمه قسم البائع تلقائيًا في خاصية ro.vndk.version ، والذي يمكن قراءته في وقت التشغيل. يتم بعد ذلك استخدام هذا الإصدار في تحديد إصدار VNDK للمورد لبعض المكتبات وتحديد إصدار لقطة VNDK لتكوين مساحة الاسم.

بناء مكتبات VNDK

يقوم الأمر make vndk بإنشاء مكتبات تحتوي على vndk: { enabled: true, … } ، بما في ذلك التبعيات وملفات تكوين مساحة الاسم. إذا تم تعيين BOARD_VNDK_VERSION := current ، فسيتم إنشاء هذه المكتبات باستخدام أمر make .

نظرًا لأن هذا الإصدار لا يقوم بتثبيت مكتبات VNDK من اللقطة، فإن مكتبات VNDK المثبتة ليست مستقرة لـ ABI. ومع ذلك، عند إصدار إصدار Android، يتم إصلاح واجهة برمجة التطبيقات (ABI) لإصدار VNDK الحالي. في هذه المرحلة، يعد أي كسر في ABI بمثابة خطأ في البناء، لذا يجب ألا تؤدي تصحيحات إصدار Android إلى تغيير ABI لمكتبات VNDK.