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

विक्रेता मूल विकास किट (वीएनडीके) विशेष रूप से विक्रेताओं के लिए उनके एचएएल को लागू करने के लिए पुस्तकालयों का एक समूह है। में VNDK जहाजों system.img और गतिशील रूप से रनटाइम पर विक्रेता कोड से जुड़ा हुआ है।

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

एंड्रॉइड 8.0 और उच्चतर फ्रेमवर्क-ओनली अपडेट को सक्षम करता है जिसमें सिस्टम विभाजन को नवीनतम संस्करण में अपग्रेड किया जा सकता है जबकि विक्रेता विभाजन को अपरिवर्तित छोड़ दिया जाता है। इसका तात्पर्य यह है कि अलग-अलग समय पर निर्मित बायनेरिज़ को एक दूसरे के साथ काम करने में सक्षम होना चाहिए; VNDK Android रिलीज़ में API/ABI परिवर्तनों को कवर करता है।

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

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

इन चुनौतियों का सामना करने के लिए, इस तरह के VNDK (इस खंड में वर्णित), के रूप में एंड्रॉयड 8.0 द्वारा प्रस्तुत कई तकनीकों HIDL , hwbinder, डिवाइस पेड़ ओवरले , और sepolicy ओवरले।

वीएनडीके संसाधन

इस खंड में निम्नलिखित VNDK संसाधन शामिल हैं:

  • VNDK अवधारणाओं (नीचे) ढांचा साझा पुस्तकालयों, एक ही प्रक्रिया HALs (SP-HALs), और VNDK शब्दावली का वर्णन है।
  • VNDK एक्सटेंशन का वर्गीकरण विक्रेता विशिष्ट श्रेणियों में बदल जाता है। उदाहरण के लिए, विस्तारित कार्यक्षमता वाले पुस्तकालय जिन पर विक्रेता मॉड्यूल निर्भर करते हैं, उन्हें विक्रेता विभाजन में कॉपी किया जाना चाहिए, लेकिन ABI- असंगत परिवर्तन निषिद्ध हैं।
  • VNDK बिल्ड सिस्टम समर्थन का निर्माण प्रणाली विन्यास और मॉड्यूल परिभाषा वाक्यविन्यास कि VNDK से जुड़े हुए हैं वर्णन करता है।
  • VNDK परिभाषा उपकरण एंड्रॉयड 8.0 और उच्चतर के लिए विस्थापित अपने स्रोत पेड़ मदद करता है।
  • लिंकर नाम स्थान साझा लाइब्रेरी संबंधों से अधिक कुशल नियंत्रण प्रदान करता है।
  • निर्देशिकाएँ, नियम, और sepolicy परिभाषित करता है एंड्रॉयड 8.0 और उच्चतर, VNDK नियम चलाने वाले उपकरणों के लिए निर्देशिका संरचना, और संबद्ध sepolicy।
  • VNDK डिजाइन प्रस्तुति मौलिक VDNK एंड्रॉयड 8.0 और उच्चतर में इस्तेमाल किया अवधारणाओं को दिखाता है।

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

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

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

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

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

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

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

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

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

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

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

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

निम्नलिखित रुपये अपवाद (FWK-ही-राज्यसभा) के साथ ढांचा-केवल पुस्तकालयों हैं:

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

वीएनडीके शब्दावली

  • मॉड्यूल या तो साझा पुस्तकालय या निष्पादन योग्य का संदर्भ लें।
  • प्रक्रियाओं प्रणाली कार्य निष्पादन से पैदा काम कर रहे हैं।
  • फ्रेमवर्क -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 )।

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

एंड्रॉइड 9 में, वीएनडीके साझा पुस्तकालयों का संस्करण है:

  • ro.vndk.version प्रणाली संपत्ति स्वचालित रूप से जोड़ा जाता है /vendor/default.prop
  • VNDK पुस्तकालयों के लिए स्थापित कर रहे हैं साझा /system/lib[64]/vndk-${ro.vndk.version}
  • VNDK-एसपी पुस्तकालयों के लिए स्थापित कर रहे हैं साझा /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 जबकि उन्नयन एंड्रॉयड 9।

यदि PRODUCT_USE_VNDK_OVERRIDE है false , ro.vndk.lite संपत्ति स्वचालित रूप में जोड़ दिया जाएगा /vendor/default.prop और अपने मूल्य होगा true । नतीजतन, गतिशील लिंकर से लिंकर नाम स्थान विन्यास लोड होगा /system/etc/ld.config.vndk_lite.txt है, जो केवल SP-एचएएल और VNDK-एसपी को अलग कर देता।

एंड्रॉयड से 9 तक एक Android 7.0 या उससे पहले वाले डिवाइस अपग्रेड करने के लिए, जोड़ने PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false को BoardConfig.mk

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

एंड्रॉयड 9 विक्रेता टेस्ट सुइट (वीटीएस) जनादेश एक गैर खाली 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 दस्तावेज़ीकरण में परिवर्तनों को ट्रैक करता है।

एंड्रॉइड 9 में बदलाव

  • VNDK वर्जनिंग सेक्शन जोड़ें।
  • वीटीएस अनुभाग जोड़ें।
  • कुछ वीएनडीके श्रेणियों का नाम बदल दिया गया है:
    • एलएल-एनडीके-इनडायरेक्ट का नाम बदलकर एलएल-एनडीके-प्राइवेट कर दिया गया है।
    • वीएनडीके-इनडायरेक्ट का नाम बदलकर वीएनडीके-प्राइवेट कर दिया गया है।
    • वीएनडीके-एसपी-इनडायरेक्ट-प्राइवेट का नाम बदलकर वीएनडीके-एसपी-प्राइवेट कर दिया गया है।
    • VNDK-SP-अप्रत्यक्ष हटा दिया गया है।

एंड्रॉइड 8.1 परिवर्तन

  • SP-NDK पुस्तकालयों को LL-NDK पुस्तकालयों में मिला दिया गया है।
  • बदलें libui.so साथ libft2.so रुपये में नाम स्थान अनुभाग। यह शामिल करने के लिए एक त्रुटि थी libui.so
  • जोड़े libGLESv3.so और libandroid_net.so डालूँगा-NDK पुस्तकालयों के लिए।
  • जोड़े libion.so VNDK-एसपी पुस्तकालयों के लिए।
  • निकालें libstdc++.so डालूँगा-NDK पुस्तकालयों से। का प्रयोग करें libc++.so बजाय। स्टैंडअलोन toolchains के कुछ संस्करणों को जोड़ सकते हैं -lstdc++ डिफ़ॉल्ट लिंकर झंडे को। चूक को अक्षम करने के जोड़ने -nodefaultlibs -lc -lm -ldl को LDFLAGS
  • ले जाएँ libz.so VNDK-एसपी पुस्तकालयों के लिए डालूँगा-NDK से। कुछ विन्यास में, libz.so डालूँगा-NDK जा रहा है जारी रख सकते हैं। हालांकि, कोई देखने योग्य अंतर नहीं होना चाहिए।