يمكن استخدام لقطات VNDK من خلال صورة نظام لتوفير مكتبات VNDK الصحيحة لصور المصنّعين حتى في حال إنشاء صور النظام والمصنعين من إصدارات مختلفة من Android. يتطلب إنشاء لقطة VNDK التقاط مكتبات VNDK كلقطة ووضع علامة عليها برقم إصدار. قد يتم ربط صورة المورِّد بإصدار محدّد من VNDK يقدّم ABIs المطلوبة للوحدات في صورة المورِّد. ومع ذلك، ضمن إصدار VNDK نفسه، يجب أن تكون مكتبات VNDK مستقرة من حيث معرّف ABI.
يتضمّن تصميم لقطة VNDK طرقًا لإنشاء ملف ثنائي مُعدّ مسبقًا من لقطة VNDK من صورة النظام الحالية وتثبيت هذه المكتبات المُعدّة مسبقًا على قسم النظام في إصدار Android أحدث.
لمحة عن مكتبات مجموعة تطوير البرامج الأصلية للمورّدين (VNDK)
واجهات HIDL-HAL، التي تم طرحها في Android 8.0، تتيح إجراء ترقيات منفصلة لقسمي النظام والمورّد. يحدِّد VNDK مجموعات من المكتبات (VNDK-core وVNDK-SP وLL-NDK) التي يمكن لرمز المورّد الربط بها ويمنع المورّدين من استخدام المكتبات التي لا تندرج ضمن مجموعة VNDK. نتيجةً لذلك، يمكن إنشاء صورة المورّد وتشغيلها إذا تم توفير مجموعات VNDK المناسبة في صورة النظام لصورة المورّد.
VNDK-core
يتم تثبيت مجموعة مكتبات VNDK-core في ملف /system/lib[64]/vndk-${VER}
وهي متاحة
فقط لعمليات المورّدين التي يكون مستوى واجهة برمجة التطبيقات فيها مساويًا لملف ${VER}
. قد لا تستخدم عمليات النظام هذه المكتبات، ويجب بدلاً من ذلك استخدام المكتبات المثبَّتة في /system/lib[64]
. بسبب القيود الصارمة المفروضة على مساحة الاسم لكل عملية، فإنّ مكتبات VNDK-core
محمية من التحميل المزدوج.
لتضمين مكتبة في VNDK-core، أضِف ما يلي إلىملف VMDK:
Android.bp
:
vendor_available: true, vndk: { enabled: true, },
حزمة تطوير برامج (VNDK-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
يتم تثبيت مكتبات LL-NDK في /system/lib[64]
. يمكن لمكوّنات المورّدين
استخدام مكتبات LL-NDK stub للوصول إلى الرموز المحدّدة مسبقًا لمكتبات LL-NDK. يجب أن تكون مكتبات LL-NDK متوافقة مع الإصدارات القديمة وثابتة من حيث معيار ABI لمنح الإصدارات القديمة من وحدات المورّدين إمكانية استخدام الإصدارات الجديدة من مكتبات LL-NDK.
بسبب ثبات ABI في LL-NDK، لا تحتاج لقطة VNDK إلى تضمين مكتبات LL-NDK لصور المورّدين القديمة.
لمحة عن نُسخ VNDK الإضافية
يتضمّن نظام Android 8.1 مكتبات VNDK التي تم إنشاؤها من رمز المصدر. ومع ذلك، بالنسبة إلى الإصدارات الأحدث من Android، يجب تسجيل كل إصدار من VNDK كلقطة شاشة وتقديمه كإصدار pre-build (إصدار مُعدّ مسبقًا) لتفعيل الربط بإصدار قديم من صورة المورّد.
اعتبارًا من 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}
.

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

يتضمّن تصميم لقطة 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 الأحدث (الإصدار 9 من Android أو الإصدارات الأحدث). - تثبيت مكتبتَي VNDK-core وVNDK-SP المُنشأتَين مسبقًا من
لقطة في Android 9، تتضمّن لقطة VNDK
مجموعة من مكتبات VNDK-core المُنشأة مسبقًا ومجموعة من مكتبات VNDK-SP، بالإضافة إلى
ملفات إعدادات مساحة الاسم الخاصة ببرنامج الربط. عند تقديم قائمة بإصدارات لقطات VNDK
التي سيتم تثبيتها، تثبِّت صورة النظام في وقت الإنشاء
مكتبات لقطات VNDK في
/system/lib[64]/vndk-${VER}
و الأدلة/system/lib[64]/vndk-sp-${VER}
وملفات إعدادات مساحة имен الرابط لتلك اللقطات في/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.