विक्रेता मूल विकास किट (VNDK) सिंहावलोकन

विक्रेता मूल विकास किट (VNDK) अन्य पुस्तकालयों या बायनेरिज़ द्वारा उपयोग किए जाने वाले पुस्तकालयों का एक समूह है, जो विक्रेता या उत्पाद विभाजन में, dlopen के लिए रनटाइम पर होता है।

वीएनडीके क्यों?

AOSP केवल फ्रेमवर्क अपडेट की अनुमति देता है जिसमें सिस्टम विभाजन को नवीनतम फ्रेमवर्क संस्करण में अपग्रेड किया जा सकता है जबकि विक्रेता विभाजन को अपरिवर्तित छोड़ दिया जाता है। अलग-अलग समय पर निर्मित होने के बावजूद, प्रत्येक विभाजन में बायनेरिज़ को एक दूसरे के साथ काम करने में सक्षम होना चाहिए।

केवल-फ़्रेमवर्क अपडेट में निम्नलिखित चुनौतियाँ शामिल हैं:

  • फ्रेमवर्क मॉड्यूल और विक्रेता मॉड्यूल के बीच निर्भरता । एंड्रॉइड 8.0 से पहले, विक्रेता और सिस्टम विभाजन में मॉड्यूल एक दूसरे के साथ जुड़ सकते थे। हालांकि, विक्रेता मॉड्यूल से निर्भरता ने फ्रेमवर्क मॉड्यूल विकास के लिए अवांछित प्रतिबंध लगाए।
  • एओएसपी पुस्तकालयों में विस्तार । जब सिस्टम विभाजन को एक मानक जेनेरिक सिस्टम इमेज (GSI) से बदल दिया जाता है, तो Android को सभी Android उपकरणों को CTS पास करने की आवश्यकता होती है। हालांकि, जैसा कि विक्रेता प्रदर्शन को बढ़ावा देने या अपने एचआईडीएल कार्यान्वयन के लिए अतिरिक्त कार्यक्षमता जोड़ने के लिए एओएसपी पुस्तकालयों का विस्तार करते हैं, मानक जीएसआई के साथ सिस्टम विभाजन को चमकाने से विक्रेता के एचआईडीएल कार्यान्वयन को तोड़ सकता है। ऐसे टूट-फूट को रोकने के दिशा-निर्देशों के लिए, VNDK एक्सटेंशन देखें।

इन चुनौतियों का समाधान करने के लिए, Android में VNDK (इस खंड में वर्णित), HIDL , hwbinder, डिवाइस ट्री ओवरले और सेपॉलिसी ओवरले जैसी कई विशेषताएं शामिल हैं।

वीएनडीके-विशिष्ट शब्द

VNDK-संबंधित दस्तावेज़ निम्नलिखित शब्दावली का उपयोग करते हैं:
  • मॉड्यूल या तो साझा पुस्तकालयों या निष्पादन योग्य को संदर्भित करता है। मॉड्यूल बिल्ड-टाइम निर्भरता बनाते हैं।
  • प्रक्रियाएं निष्पादन योग्य से उत्पन्न ऑपरेटिंग सिस्टम कार्य हैं। प्रक्रियाएं रन-टाइम निर्भरता बनाती हैं।
  • फ्रेमवर्क -योग्य शब्द system विभाजन से संबंधित हैं:
    • फ्रेमवर्क निष्पादन योग्य /system/bin या /system/xbin में निष्पादन योग्य को संदर्भित करता है।
    • फ्रेमवर्क साझा पुस्तकालय /system/lib[64] के अंतर्गत साझा पुस्तकालयों को संदर्भित करता है।
    • फ्रेमवर्क मॉड्यूल फ्रेमवर्क साझा पुस्तकालयों और फ्रेमवर्क निष्पादन योग्य दोनों को संदर्भित करता है।
    • फ्रेमवर्क प्रक्रियाएं फ्रेमवर्क एक्जिक्यूटिव से उत्पन्न प्रक्रियाएं हैं, जैसे /system/bin/app_process
  • विक्रेता -योग्य शर्तें vendor विभाजन से संबंधित हैं:
    • विक्रेता निष्पादन योग्य /vendor/bin . में निष्पादन योग्य को संदर्भित करता है
    • विक्रेता साझा पुस्तकालय /vendor/lib[64] के अंतर्गत साझा पुस्तकालयों को संदर्भित करता है।
    • विक्रेता मॉड्यूल विक्रेता निष्पादन योग्य और विक्रेता साझा पुस्तकालयों दोनों को संदर्भित करता है।
    • विक्रेता प्रक्रियाएं वेंडर एक्जीक्यूटेबल्स से उत्पन्न प्रक्रियाएं हैं, जैसे /vendor/bin/android.hardware.camera.provider@2.4-service

वीएनडीके अवधारणाएं

एक आदर्श एंड्रॉइड 8.0 और उच्चतर दुनिया में, फ्रेमवर्क प्रक्रियाएं विक्रेता साझा पुस्तकालयों को लोड नहीं करती हैं, सभी विक्रेता प्रक्रियाएं केवल विक्रेता साझा पुस्तकालयों (और फ्रेमवर्क साझा पुस्तकालयों का एक हिस्सा) लोड करती हैं, और फ्रेमवर्क प्रक्रियाओं और विक्रेता प्रक्रियाओं के बीच संचार एचआईडीएल और हार्डवेयर द्वारा नियंत्रित होते हैं। जिल्दसाज़।

इस तरह की दुनिया में यह संभावना शामिल है कि फ्रेमवर्क साझा पुस्तकालयों से स्थिर, सार्वजनिक एपीआई विक्रेता मॉड्यूल डेवलपर्स के लिए पर्याप्त नहीं हो सकते हैं (हालांकि एपीआई एंड्रॉइड रिलीज के बीच बदल सकते हैं), इसके लिए आवश्यक है कि फ्रेमवर्क साझा पुस्तकालयों के कुछ हिस्से विक्रेता प्रक्रियाओं के लिए सुलभ हों। इसके अलावा, जैसा कि प्रदर्शन आवश्यकताओं से समझौता हो सकता है, कुछ प्रतिक्रिया-समय-महत्वपूर्ण एचएएल को अलग तरह से व्यवहार किया जाना चाहिए।

निम्नलिखित खंड विस्तार से बताते हैं कि कैसे VNDK विक्रेताओं और समान-प्रक्रिया HALs (SP-HALs) के लिए फ्रेमवर्क साझा पुस्तकालयों को संभालता है।

विक्रेता के लिए फ्रेमवर्क साझा पुस्तकालय

यह खंड विक्रेता प्रक्रियाओं के लिए सुलभ साझा पुस्तकालयों को वर्गीकृत करने के मानदंडों का वर्णन करता है। कई Android रिलीज़ में विक्रेता मॉड्यूल का समर्थन करने के लिए दो दृष्टिकोण हैं:

  1. साझा पुस्तकालयों के ढांचे के एबीआई/एपीआई को स्थिर करें । मेमोरी फुटप्रिंट और स्टोरेज साइज को कम करने के लिए नए फ्रेमवर्क मॉड्यूल और पुराने वेंडर मॉड्यूल समान साझा लाइब्रेरी का उपयोग कर सकते हैं। एक अद्वितीय साझा पुस्तकालय कई डबल-लोडिंग मुद्दों से भी बचा जाता है। हालांकि, स्थिर एबीआई/एपीआई को बनाए रखने के लिए विकास लागत अधिक है और प्रत्येक फ्रेमवर्क साझा पुस्तकालय द्वारा निर्यात किए गए सभी एबीआई/एपीआई को स्थिर करना अवास्तविक है।
  2. पुराने ढांचे की साझा पुस्तकालयों की प्रतिलिपि बनाएँ । साइड चैनलों के खिलाफ मजबूत प्रतिबंध के साथ आता है, फ्रेमवर्क मॉड्यूल और विक्रेता मॉड्यूल के बीच संवाद करने के लिए सभी तंत्र के रूप में परिभाषित किया गया है, जिसमें बाइंडर, सॉकेट, पाइप, साझा मेमोरी, साझा फ़ाइल और सिस्टम गुण शामिल हैं (लेकिन सीमित नहीं)। कोई संचार तब तक नहीं होना चाहिए जब तक कि संचार प्रोटोकॉल स्थिर और स्थिर न हो (उदाहरण के लिए hwbinder के माध्यम से HIDL)। साझा पुस्तकालयों को डबल-लोड करने से भी समस्याएँ हो सकती हैं; उदाहरण के लिए, यदि नई लाइब्रेरी द्वारा बनाई गई कोई वस्तु पुरानी लाइब्रेरी से फ़ंक्शन में पास की जाती है, तो एक त्रुटि हो सकती है क्योंकि ये लाइब्रेरी ऑब्जेक्ट की अलग-अलग व्याख्या कर सकती हैं।

साझा पुस्तकालयों की विशेषताओं के आधार पर विभिन्न दृष्टिकोणों का उपयोग किया जाता है। नतीजतन, फ्रेमवर्क साझा पुस्तकालयों को तीन उप-श्रेणियों में वर्गीकृत किया गया है:

  • एलएल-एनडीके पुस्तकालय फ्रेमवर्क साझा पुस्तकालय हैं जिन्हें स्थिर माना जाता है। उनके डेवलपर अपनी 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 पुस्तकालय तभी बन सकता है जब वह निम्नलिखित मानदंडों को पूरा करता हो:
    • यह फ्रेमवर्क को/से आईपीसी नहीं भेजता/प्राप्त करता है।
    • यह एआरटी वर्चुअल मशीन से संबंधित नहीं है।
    • यह अस्थिर फ़ाइल स्वरूपों वाली फ़ाइलों/विभाजनों को पढ़ता/लिखता नहीं है।
    • इसके पास विशेष सॉफ्टवेयर लाइसेंस नहीं है जिसके लिए कानूनी समीक्षा की आवश्यकता है।
    • इसके कोड मालिक को विक्रेता के उपयोग पर आपत्ति नहीं है।
  • फ्रेमवर्क-ओनली लाइब्रेरी (एफडब्ल्यूके-ओनली) फ्रेमवर्क साझा लाइब्रेरी हैं जो ऊपर उल्लिखित श्रेणियों से संबंधित नहीं हैं। ये पुस्तकालय:
    • ढांचे के आंतरिक कार्यान्वयन विवरण माने जाते हैं।
    • विक्रेता मॉड्यूल द्वारा एक्सेस नहीं किया जाना चाहिए।
    • अस्थिर एबीआई/एपीआई और कोई एपीआई/एबीआई संगतता गारंटी नहीं है।
    • नकल नहीं कर रहे हैं।

समान-प्रक्रिया एचएएल (एसपी-एचएएल)

समान-प्रक्रिया एचएएल ( एसपी-एचएएल ) पूर्व निर्धारित एचएएल का एक सेट है जिसे विक्रेता साझा पुस्तकालयों के रूप में कार्यान्वित किया जाता है और फ्रेमवर्क प्रक्रियाओं में लोड किया जाता है। SP-HALs को एक लिंकर नेमस्पेस द्वारा अलग किया जाता है (पुस्तकालयों और प्रतीकों को नियंत्रित करता है जो साझा पुस्तकालयों को दिखाई देते हैं)। SP-HALs को केवल LL-NDK और VNDK-SP पर निर्भर होना चाहिए।

वीएनडीके-एसपी पात्र वीएनडीके पुस्तकालयों का एक पूर्वनिर्धारित उपसमुच्चय है। VNDK-SP पुस्तकालयों की सावधानीपूर्वक समीक्षा की जाती है ताकि यह सुनिश्चित किया जा सके कि VNDK-SP पुस्तकालयों को फ्रेमवर्क प्रक्रियाओं में डबल-लोड करने से समस्या न हो। SP-HALs और VNDK-SP दोनों को 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 पुस्तकालय अपनी Android.bp फ़ाइलों में vndk: { support_system_process: true } निर्दिष्ट करते हैं। यदि vndk: {private:true} भी निर्दिष्ट है, तो इन पुस्तकालयों को VNDK-SP-Private कहा जाता है और वे SP-HALS के लिए अदृश्य हैं।

आरएस अपवादों (एफडब्ल्यूके-ओनली-आरएस) के साथ फ्रेमवर्क-ओनली लाइब्रेरी निम्नलिखित हैं:

  • libft2.so (रेंडरस्क्रिप्ट)
  • libmediandk.so (रेंडरस्क्रिप्ट)

वीएनडीके संस्करण

VNDK साझा पुस्तकालय संस्करणित हैं:

  • ro.vndk.version सिस्टम गुण स्वचालित रूप से /vendor/default.prop में जुड़ जाता है।
  • VNDK और VNDK-SP साझा लाइब्रेरी VNDK एपेक्स com.android.vndk.v${ro.vndk.version} के रूप में स्थापित हैं और /apex/com.android.vndk.v${ro.vndk.version} पर स्थापित हैं।

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 विक्रेता परीक्षण सूट (VTS) एक गैर-रिक्त ro.vndk.version गुण को अनिवार्य करता है। नए लॉन्च किए गए डिवाइस और अपग्रेड करने वाले डिवाइस दोनों को ro.vndk.version परिभाषित करना चाहिए। कुछ VNDK परीक्षण मामले (जैसे VtsVndkFilesTest और VtsVndkDependencyTest ) मिलान योग्य VNDK लाइब्रेरी डेटा सेट को लोड करने के लिए ro.vndk.version गुण पर निर्भर करते हैं।