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

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

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

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

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

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

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

VNDK-विशिष्ट शर्तें

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 और उच्चतर दुनिया में, फ्रेमवर्क प्रक्रियाएं विक्रेता साझा पुस्तकालयों को लोड नहीं करती हैं, सभी विक्रेता प्रक्रियाएं केवल विक्रेता साझा पुस्तकालयों (और फ्रेमवर्क साझा पुस्तकालयों का एक हिस्सा) को लोड करती हैं, और फ्रेमवर्क प्रक्रियाओं और विक्रेता प्रक्रियाओं के बीच संचार एचआईडीएल और हार्डवेयर द्वारा नियंत्रित होते हैं जिल्दसाज़।

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

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

विक्रेता के लिए फ्रेमवर्क साझा लाइब्रेरी

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

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

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

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

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

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

वीएनडीके-एसपी पात्र वीएनडीके पुस्तकालयों का एक पूर्वनिर्धारित उपसमूह है। VNDK-SP लाइब्रेरीज़ की सावधानीपूर्वक समीक्षा की जाती है ताकि यह सुनिश्चित किया जा सके कि फ्रेमवर्क प्रक्रियाओं में VNDK-SP लाइब्रेरीज़ को डबल-लोड करने से समस्याएँ न हों। एसपी-एचएएल और वीएनडीके-एसपी दोनों को Google द्वारा परिभाषित किया गया है।

निम्नलिखित पुस्तकालय एसपी-एचएएल द्वारा अनुमोदित हैं:

  • 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 ) का उपयोग करें।

विक्रेता परीक्षण सूट (वीटीएस)

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