مجموعة أدوات التطوير الأصلية للبائع (VNDK)

مجموعة أدوات تطوير البائع الأصلي (VNDK) عبارة عن مجموعة من المكتبات مخصصة للموردين حصريًا لتنفيذ HALs الخاصة بهم. السفن VNDK في system.img ويرتبط بشكل حيوي رمز بائع في وقت التشغيل.

لماذا VNDK؟

يمكّن Android 8.0 والإصدارات الأحدث تحديثات إطار العمل فقط حيث يمكن ترقية قسم النظام إلى أحدث إصدار بينما تُترك أقسام البائع دون تغيير. هذا يعني أن الثنائيات التي تم إنشاؤها في أوقات مختلفة يجب أن تكون قادرة على العمل مع بعضها البعض ؛ يغطي VNDK تغييرات API / ABI عبر إصدارات Android.

تتضمن تحديثات الإطار فقط التحديات التالية:

  • تبعية بين وحدات الإطار وحدات البائع. قبل Android 8.0 ، يمكن ربط الوحدات من كلا الجانبين بوحدات من الجانب الآخر. ومع ذلك ، فإن التبعيات من وحدات البائعين فرضت قيودًا غير مرغوب فيها على تطوير وحدات إطار العمل.
  • ملحقات للمكتبات AOSP. يتطلب Android 8.0 والإصدارات الأحدث من جميع أجهزة Android اجتياز CTS عند استبدال قسم النظام بصورة نظام عامة قياسية (GSI). ومع ذلك ، مع قيام البائعين بتوسيع مكتبات AOSP لتعزيز الأداء أو لإضافة وظائف إضافية لتطبيقات HIDL الخاصة بهم ، فإن وميض قسم النظام باستخدام GSI القياسي قد يؤدي إلى تعطيل تطبيق HIDL الخاص بالمورد. (للحصول على إرشادات حول منع مثل هذه الكسور، انظر ملحقات VNDK ).

ولمواجهة هذه التحديات، الروبوت 8.0 يدخل العديد من التقنيات مثل VNDK (الموضحة في هذا القسم)، HIDL ، hwbinder، جهاز شجرة تراكب ، وتراكب sepolicy.

موارد VNDK

يتضمن هذا القسم موارد VNDK التالية:

  • مفاهيم VNDK (أدناه) تصف مكتبات إطار مشترك، طبقة تجريد العملية نفسها (SP-طبقة تجريد)، والمصطلحات VNDK.
  • VNDK ملحقات يتغير يصنف ببائعي إلى فئات. على سبيل المثال ، يجب نسخ المكتبات ذات الوظائف الموسعة التي تعتمد عليها وحدات المورد النمطية في قسم البائع ، لكن التغييرات غير المتوافقة مع ABI محظورة.
  • VNDK بناء نظام دعم يصف تكوينات نظام بناء وجمل تعريف الوحدة النمطية التي ترتبط VNDK.
  • و تعريف VNDK أداة تساعد شجرة المصدر ترحيل لالروبوت 8.0 وأعلى.
  • رابط النطاق يوفر سيطرة الحبيبات غرامة على روابط المكتبة المشتركة.
  • الدلائل، القواعد، وsepolicy يعرف بنية الدليل على أجهزة تعمل بنظام التشغيل أندرويد 8.0 وأعلى، وقواعد VNDK، وsepolicy المرتبطة بها.
  • و VNDK تصميم يوضح عرض المفاهيم الأساسية المستخدمة في VDNK أندرويد 8.0 وأعلى.

مفاهيم VNDK

في نظام Android 8.0 المثالي والعالم الأحدث ، لا تقوم عمليات إطار العمل بتحميل مكتبات البائعين المشتركة ، وتحمل جميع عمليات البائعين مكتبات البائعين المشتركة فقط (وجزء من مكتبات إطار العمل المشتركة) ، وتحكم HIDL والأجهزة الاتصالات بين عمليات إطار العمل وعمليات البائع الموثق.

يتضمن هذا العالم إمكانية أن تكون واجهات برمجة التطبيقات (API) المستقرة والعامة من المكتبات المشتركة لإطار العمل غير كافية لمطوري وحدات البائعين (على الرغم من أن واجهات برمجة التطبيقات يمكن أن تتغير بين إصدارات Android) ، مما يتطلب أن يكون جزء من مكتبات الإطار المشتركة في متناول عمليات البائعين. بالإضافة إلى ذلك ، نظرًا لأن متطلبات الأداء يمكن أن تؤدي إلى تنازلات ، يجب التعامل مع بعض HALs الحساسة لوقت الاستجابة بشكل مختلف.

توضح الأقسام التالية بالتفصيل كيفية معالجة VNDK للمكتبات المشتركة لإطار العمل للموردين و Same-Process HALs (SP-HALs).

مكتبات الإطار المشتركة للبائع

يصف هذا القسم معايير تصنيف المكتبات المشتركة التي يمكن الوصول إليها لعمليات البائعين. هناك طريقتان لدعم وحدات البائعين عبر إصدارات Android المتعددة:

  1. استقرار أبيس / واجهات برمجة التطبيقات في إطار تقاسم المكتبات. يمكن لوحدات إطار العمل الجديدة ووحدات البائعين القديمة استخدام نفس المكتبة المشتركة لتقليل أثر الذاكرة وحجم التخزين. تتجنب المكتبة المشتركة الفريدة أيضًا العديد من مشكلات التحميل المزدوج. ومع ذلك ، فإن تكلفة التطوير للحفاظ على ثبات ABIs / APIs مرتفعة ومن غير الواقعي تحقيق الاستقرار في جميع واجهات برمجة التطبيقات / واجهات برمجة التطبيقات التي يتم تصديرها بواسطة كل مكتبة إطار عمل مشتركة.
  2. نسخ الإطار القديم المكتبات المشتركة. يأتي مع قيود قوية ضد القنوات الجانبية ، والتي تم تعريفها على أنها جميع آليات التواصل بين وحدات إطار العمل ووحدات البائعين ، بما في ذلك (على سبيل المثال لا الحصر) الموثق ، والمقبس ، والأنبوب ، والذاكرة المشتركة ، والملف المشترك ، وخصائص النظام. يجب ألا يكون هناك اتصال ما لم يتم تجميد بروتوكول الاتصال واستقراره (على سبيل المثال HIDL من خلال hwbinder). قد يتسبب التحميل المزدوج للمكتبات المشتركة في حدوث مشكلات أيضًا ؛ على سبيل المثال ، إذا تم تمرير كائن تم إنشاؤه بواسطة المكتبة الجديدة إلى الوظائف من المكتبة القديمة ، فقد يحدث خطأ لأن هذه المكتبات قد تفسر الكائن بشكل مختلف.

يتم استخدام طرق مختلفة اعتمادًا على خصائص المكتبات المشتركة. نتيجة لذلك ، يتم تصنيف المكتبات المشتركة في إطار العمل إلى ثلاث فئات فرعية:

  • LL-NDK المكتبات هي الإطار المكتبات المشتركة التي هي معروفة لتكون مستقرة. يلتزم مطوروها بالحفاظ على ثباتات API / ABI الخاصة بهم.
    • يشمل LL-NDK المكتبات التالية: libEGL.so ، libGLESv1_CM.so ، libGLESv2.so ، libGLESv3.so ، libandroid_net.so ، libc.so ، libdl.so ، liblog.so ، libm.so ، libnativewindow.so ، libneuralnetworks.so ، libsync.so ، libvndksupport.so ، و libvulkan.so ،
  • المكتبات VNDK المؤهلة (VNDK) هي الإطار المشتركة المكتبات التي هي آمنة ليتم نسخها مرتين. إطار وحدات البائع وحدات يمكن ربط مع نسخهم الخاصة. يمكن أن تصبح مكتبة إطار العمل المشتركة مكتبة VNDK مؤهلة فقط إذا كانت تفي بالمعايير التالية:
    • لا يرسل / يستقبل IPCs إلى / من إطار العمل.
    • لا علاقة له بجهاز ART الظاهري.
    • لا يقرأ / يكتب الملفات / الأقسام بتنسيقات ملفات غير مستقرة.
    • ليس لديها ترخيص برنامج خاص يتطلب مراجعات قانونية.
    • ليس لدى مالك الرمز الخاص بها اعتراضات على استخدامات البائعين.
  • الإطار فقط مكتبات (FWK-ONLY) هي الإطار المكتبات المشتركة التي لا تنتمي إلى الفئات المذكورة أعلاه. هذه المكتبات:
    • تعتبر تفاصيل تنفيذ الإطار الداخلي.
    • يجب ألا يتم الوصول إليها من خلال وحدات البائعين.
    • احصل على واجهات برمجة تطبيقات / واجهات برمجة تطبيقات غير مستقرة ولا توجد ضمانات توافق API / ABI.
    • لا يتم نسخها.

نفس العملية HAL (SP-HAL)

نفس-عملية HAL (SP-HAL) هي مجموعة من طبقة تجريد محددة سلفا تنفيذها باعتبارها المورد المكتبات المشتركة وتحميلها في عمليات الإطار. يتم عزل SP-HALs بواسطة مساحة اسم رابط (يتحكم في المكتبات والرموز المرئية للمكتبات المشتركة). يجب SP-طبقة تجريد تعتمد فقط على LL-NDK وVNDK-SP.

VNDK-SP هي مجموعة فرعية محددة مسبقًا من مكتبات VNDK المؤهلة. تتم مراجعة مكتبات VNDK-SP بعناية للتأكد من أن التحميل المزدوج لمكتبات VNDK-SP في عمليات إطار العمل لا يسبب مشاكل. يتم تحديد كل من SP-HALs و VNDK-SPs بواسطة Google.

المكتبات التالية معتمدة من SP-HALs:

  • libGLESv1_CM_${driver}.so
  • libGLESv2_${driver}.so
  • libGLESv3_${driver}.so
  • libEGL_${driver}.so
  • vulkan.${driver}.so
  • android.hardware.renderscript@1.0-impl.so
  • android.hardware.graphics.mapper@2.0-impl.so

مكتبات VNDK-SP تحدد vndk: { support_system_process: true } في ملفات Android.bp بهم. إذا vendor_available: false تم تعيينه أيضا، ثم تسمى هذه المكتبات VNDK-SP-خاصة وأنها غير مرئية للSP-HALS.

وفيما يلي مكتبات الإطار الوحيد مع وجود استثناءات RS (FWK-ONLY-RS):

  • libft2.so (Renderscript)
  • libmediandk.so (Renderscript)

مصطلحات VNDK

  • وحدات تشير إما إلى المكتبات المشتركة أو للتنفيذ.
  • عمليات تعمل مهام النظام ولدت من تنفيذ.
  • -qualified إطار المصطلحات تشير إلى المفاهيم المتعلقة قسم النظام.
  • بائع حيث -qualified تشير إلى المفاهيم المتعلقة أقسام البائع.

على سبيل المثال:

  • إطار للتنفيذ الرجوع إلى التنفيذية في /system/bin أو /system/xbin .
  • الإطار المكتبات المشتركة الرجوع إلى المكتبات المشتركة تحت /system/lib[64] .
  • إطار وحدات إشارة إلى كل إطار المكتبات المشتركة وإطار للتنفيذ.
  • العمليات هي عمليات إطار لدت من إطار للتنفيذ (على سبيل المثال /system/bin/app_process ).
  • الثقافة بائع تشير إلى التنفيذية في /vendor/bin
  • بائع المكتبات المشتركة الرجوع إلى المكتبات المشتركة تحت /vendor/lib[64] .
  • بائع حدات إشارة إلى كل بائع للتنفيذ وبائع المكتبات المشتركة.
  • العمليات هي عمليات بائع لدت من بائع للتنفيذ (على سبيل المثال
  • /vendor/bin/android.hardware.camera.provider@2.4-service ).

إصدار VNDK

في Android 9 ، يتم إصدار مكتبات VNDK المشتركة:

  • و ro.vndk.version يتم إضافة خاصية النظام تلقائيا إلى /vendor/default.prop .
  • مشترك VNDK يتم تثبيت المكتبات ل /system/lib[64]/vndk-${ro.vndk.version} .
  • مشترك VNDK-SP يتم تثبيت المكتبات ل /system/lib[64]/vndk-sp-${ro.vndk.version} .
  • يتم تثبيت ملف التكوين رابط حيوي إلى /system/etc/ld.config.${ro.vndk.version}.txt .

قيمة ro.vndk.version يتم اختياره من قبل الخوارزمية التالية:

  • إذا BOARD_VNDK_VERSION لا تساوي current ، واستخدام BOARD_VNDK_VERSION .
  • إذا BOARD_VNDK_VERSION تساوي current :
    • إذا PLATFORM_VERSION_CODENAME هو REL ، واستخدام PLATFORM_SDK_VERSION (على سبيل المثال 28 ).
    • خلاف ذلك، واستخدام PLATFORM_VERSION_CODENAME (على سبيل المثال P ).

ترقية الأجهزة

إذا كان جهاز الروبوت 8.x من VNDK تعطيل إنفاذ وقت التشغيل التي يجري بناؤها دون BOARD_VNDK_VERSION ، فإنه قد تضيف PRODUCT_USE_VNDK_OVERRIDE := false ل BoardConfig.mk بينما الترقية إلى الروبوت 9.

إذا PRODUCT_USE_VNDK_OVERRIDE غير false ، و ro.vndk.lite ستضاف تلقائيا إلى الملكية /vendor/default.prop وسوف تكون قيمته true . وبالتالي، فإن رابط دينامية تحميل تكوين رابط مساحة من /system/etc/ld.config.vndk_lite.txt ، الذي يعزل فقط SP-HAL وVNDK-SP.

لترقية جهاز أندرويد 7.0 أو أقل لالروبوت 9، إضافة PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false ل BoardConfig.mk .

مجموعة اختبار البائع (VTS)

الروبوت 9 البائع اختبار جناح (VTS) ولايات غير فارغة ro.vndk.version الممتلكات. كلا الجهازين حديثا أطلقت ويجب أن أجهزة الارتقاء تحديد ro.vndk.version . بعض حالات الاختبار VNDK (على سبيل المثال VtsVndkFilesTest و VtsVndkDependencyTest ) تعتمد على ro.vndk.version الملكية لتحميل مطابقة المؤهلة المكتبات VNDK مجموعات البيانات.

إذا كان ro.product.first_api_level الخاصية هي أكبر من 27، و ro.vndk.lite يجب ألا تكون محددة الملكية. VtsTreblePlatformVersionTest ستفشل إذا ro.vndk.lite يتم تعريفها في إطلاق حديثا الروبوت 9 الجهاز.

سجل المستند

يتتبع هذا القسم التغييرات على وثائق VNDK.

يتغير Android 9

  • إضافة قسم إصدارات VNDK.
  • إضافة قسم VTS.
  • تمت إعادة تسمية بعض فئات VNDK:
    • تمت إعادة تسمية LL-NDK-Indirect إلى LL-NDK-Private.
    • تمت إعادة تسمية VNDK-Indirect إلى VNDK-Private.
    • تمت إعادة تسمية VNDK-SP-Indirect-Private إلى VNDK-SP-Private.
    • تمت إزالة VNDK-SP-Indirect.

تغييرات Android 8.1

  • تم دمج مكتبات SP-NDK في مكتبات LL-NDK.
  • استبدال libui.so مع libft2.so في RS قسم مساحة الاسم. كان خطأ لتشمل libui.so .
  • إضافة libGLESv3.so و libandroid_net.so للمكتبات LL-NDK.
  • إضافة libion.so للمكتبات VNDK-SP.
  • إزالة libstdc++.so من المكتبات LL-NDK. استخدام libc++.so بدلا من ذلك. بعض إصدارات toolchains مستقل قد تضيف -lstdc++ لأعلام رابط الافتراضية. لتعطيل الإعدادات الافتراضية، إضافة -nodefaultlibs -lc -lm -ldl إلى LDFLAGS .
  • نقل libz.so من LL-NDK للمكتبات VNDK-SP. في بعض التكوينات libz.so قد يستمر كونه LL-NDK. ومع ذلك ، لا ينبغي أن يكون هناك اختلافات يمكن ملاحظتها.