Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

مجموعة أدوات التطوير الأصلية للبائع (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 .)

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

موارد VNDK

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

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

مفاهيم VNDK

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

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

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

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

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

  1. ثبّت ABIs / APIs للمكتبات المشتركة في إطار العمل . يمكن لوحدات إطار العمل الجديدة ووحدات البائعين القديمة استخدام نفس المكتبة المشتركة لتقليل أثر الذاكرة وحجم التخزين. تتجنب المكتبة المشتركة الفريدة أيضًا العديد من مشكلات التحميل المزدوج. ومع ذلك ، فإن تكلفة التطوير للحفاظ على ABIs / واجهات برمجة التطبيقات مستقرة مرتفعة ومن غير الواقعي تثبيت جميع واجهات برمجة التطبيقات / واجهات برمجة التطبيقات التي يتم تصديرها بواسطة كل مكتبة إطار عمل مشتركة.
  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 ، libneuralnetworks.so ، libneuralnetworks.so ، libsync.so ، libvndksupport.so ، و libvulkan.so ،
  • مكتبات VNDK المؤهلة (VNDK) هي مكتبات إطار عمل مشتركة آمنة ليتم نسخها مرتين. يمكن ربط وحدات الإطار والوحدات النمطية للموردين بنُسخها الخاصة. يمكن أن تصبح مكتبة إطار العمل المشتركة مكتبة VNDK مؤهلة فقط إذا كانت تفي بالمعايير التالية:
    • لا يرسل / يستقبل IPCs إلى / من إطار العمل.
    • لا علاقة له بجهاز ART الظاهري.
    • لا يقرأ / يكتب الملفات / الأقسام بتنسيقات ملفات غير مستقرة.
    • ليس لديها ترخيص برنامج خاص يتطلب مراجعات قانونية.
    • ليس لدى مالك الرمز الخاص بها اعتراضات على استخدامات البائعين.
  • مكتبات الإطار فقط (FWK-ONLY) هي مكتبات إطار عمل مشتركة لا تنتمي إلى الفئات المذكورة أعلاه. هذه المكتبات:
    • تعتبر تفاصيل تنفيذ الإطار الداخلي.
    • يجب ألا يتم الوصول إليها بواسطة وحدات البائعين.
    • احصل على واجهات برمجة تطبيقات / واجهات برمجة تطبيقات غير مستقرة ولا توجد ضمانات توافق API / ABI.
    • لا يتم نسخها.

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

نفس العملية HAL ( SP-HAL ) عبارة عن مجموعة من HALs المحددة مسبقًا والتي يتم تنفيذها كمكتبات مشتركة للبائع وتحميلها في عمليات الإطار . يتم عزل SP-HALs بواسطة مساحة اسم رابط (يتحكم في المكتبات والرموز المرئية للمكتبات المشتركة). يجب أن تعتمد SP-HALs على 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-Private وتكون غير مرئية لـ SP-HALS .

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

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

مصطلحات VNDK

  • تشير الوحدات النمطية إلى المكتبات المشتركة أو الملفات التنفيذية .
  • العمليات هي مهام نظام التشغيل التي ولدت من العناصر التنفيذية .
  • تشير المصطلحات المؤهلة للإطار إلى المفاهيم المتعلقة بقسم النظام .
  • بائع حيث -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 خاصية نظام 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 ).

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

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

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

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

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

ro.vndk.version نظام Android 9 Vendor Test Suite (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 بدلاً من ذلك. قد تضيف بعض إصدارات -lstdc++ الأدوات المستقلة -lstdc++ إلى أعلام الرابط الافتراضية. لتعطيل الإعدادات الافتراضية ، أضف -nodefaultlibs -lc -lm -ldl إلى LDFLAGS .
  • انقل libz.so من LL-NDK إلى مكتبات VNDK-SP. في بعض التكوينات ، قد يستمر libz.so في كونه LL-NDK. ومع ذلك ، لا ينبغي أن يكون هناك اختلافات ملحوظة.