वीएनडीके स्नैपशॉट डिजाइन

VNDK स्नैपशॉट का उपयोग सिस्टम छवि द्वारा विक्रेता छवियों को सही VNDK लाइब्रेरी प्रदान करने के लिए किया जा सकता है, भले ही सिस्टम और विक्रेता छवियां एंड्रॉइड के विभिन्न संस्करणों से बनाई गई हों। VNDK स्नैपशॉट बनाने के लिए VNDK लाइब्रेरीज़ को स्नैपशॉट के रूप में कैप्चर करने और उन्हें संस्करण संख्या के साथ चिह्नित करने की आवश्यकता होती है। विक्रेता छवि एक विशिष्ट VNDK संस्करण से लिंक हो सकती है जो विक्रेता छवि में मॉड्यूल के लिए आवश्यक ABI प्रदान करती है। हालाँकि, उसी VNDK संस्करण के भीतर, VNDK लाइब्रेरीज़ ABI-स्थिर होनी चाहिए।

VNDK स्नैपशॉट डिज़ाइन में वर्तमान सिस्टम छवि से VNDK स्नैपशॉट के प्री-बिल्ड को जेनरेट करने और उन प्री-बिल्ट लिबास को नए एंड्रॉइड संस्करण के सिस्टम विभाजन में स्थापित करने के तरीके शामिल हैं।

वीएनडीके पुस्तकालयों के बारे में

एंड्रॉइड 8.0 में पेश किया गया HIDL-HALs , सिस्टम और विक्रेता विभाजन के लिए अलग-अलग अपग्रेड को सक्षम बनाता है। वीएनडीके पुस्तकालयों के सेट (वीएनडीके-कोर, वीएनडीके-एसपी और एलएल-एनडीके) को परिभाषित करता है, जिसके साथ विक्रेता कोड लिंक कर सकता है और विक्रेताओं को उन पुस्तकालयों का उपयोग करने से रोकता है जो वीएनडीके सेट में नहीं हैं। परिणामस्वरूप, विक्रेता छवि को बनाया और चलाया जा सकता है यदि सिस्टम छवि पर उचित VNDK सेट विक्रेता छवि को प्रदान किए जाते हैं।

VNDK-कोर

पुस्तकालयों का VNDK-कोर सेट /system/lib[64]/vndk-${VER} में स्थापित है और केवल ${VER} के बराबर एपीआई स्तर वाली विक्रेता प्रक्रियाओं के लिए उपलब्ध है। सिस्टम प्रक्रियाएँ इन पुस्तकालयों का उपयोग नहीं कर सकती हैं और इसके बजाय /system/lib[64] में स्थापित पुस्तकालयों का उपयोग करना होगा। प्रत्येक प्रक्रिया के लिए सख्त नामस्थान प्रतिबंध के कारण, VNDK-कोर लाइब्रेरी दोहरे लोडिंग से सुरक्षित हैं।

VNDK-कोर में लाइब्रेरी शामिल करने के लिए, Android.bp में निम्नलिखित जोड़ें:

vendor_available: true,
vndk: {
    enabled: true,
},

वीएनडीके-एसपी

VNDK-SP लाइब्रेरीज़ /system/lib[64]/vndk-sp-${VER} में स्थापित हैं और विक्रेता प्रक्रियाओं और सिस्टम प्रक्रियाओं के लिए उपलब्ध हैं (विक्रेता विभाजन में स्थापित SP-HAL लाइब्रेरीज़ के माध्यम से)। VNDK-SP लाइब्रेरीज़ दोहरे लोड वाली हो सकती हैं।

VNDK-SP में लाइब्रेरी शामिल करने के लिए, Android.bp में निम्नलिखित जोड़ें:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

एलएल-एनडीके

एलएल-एनडीके लाइब्रेरीज़ /system/lib[64] में स्थापित हैं। विक्रेता मॉड्यूल एलएल-एनडीके पुस्तकालयों के पूर्व-चयनित प्रतीकों तक पहुंचने के लिए एलएल-एनडीके स्टब पुस्तकालयों का उपयोग कर सकते हैं। एलएल-एनडीके लाइब्रेरीज़ को एलएल-एनडीके लाइब्रेरीज़ के नए संस्करणों का उपयोग करने के लिए विक्रेता मॉड्यूल के पुराने संस्करणों को सक्षम करने के लिए बैकवर्ड-संगत और एबीआई-स्थिर होना चाहिए। एलएल-एनडीके की एबीआई-स्थिर विशेषताओं के कारण, वीएनडीके स्नैपशॉट को पुरानी विक्रेता छवियों के लिए एलएल-एनडीके लाइब्रेरी शामिल करने की आवश्यकता नहीं है।

VNDK स्नैपशॉट के बारे में

एंड्रॉइड 8.1 में स्रोत कोड से निर्मित VNDK लाइब्रेरी शामिल हैं। हालाँकि, Android के बाद के संस्करणों के लिए, प्रत्येक VNDK संस्करण को एक स्नैपशॉट के रूप में कैप्चर किया जाना चाहिए और पुराने विक्रेता छवि से लिंक करने को सक्षम करने के लिए प्री-बिल्ड के रूप में प्रदान किया जाना चाहिए।

एंड्रॉइड 9 से शुरू होकर, एंड्रॉइड के नए संस्करणों में एंड्रॉइड स्रोत कोड में पुराने संस्करणों के लिए वीएनडीके-कोर और वीएनडीके-एसपी निर्देशिकाओं का कम से कम एक स्नैपशॉट शामिल होगा। निर्माण के समय, आवश्यक स्नैपशॉट /system/lib[64]/vndk-${VER} और /system/lib[64]/vndk-sp-${VER} (निर्देशिकाएं जिनका उपयोग विक्रेता द्वारा किया जा सकता है) में स्थापित किया जाएगा विभाजन), जहां ${VER} स्ट्रिंग वेरिएबल है जो VNDK स्नैपशॉट के संस्करण नाम का प्रतिनिधित्व करता है।

चूँकि VNDK स्नैपशॉट लाइब्रेरीज़ प्रत्येक VNDK संस्करण के लिए भिन्न हो सकती हैं, VNDK स्नैपशॉट में लिंकर नेमस्पेस कॉन्फ़िगरेशन भी शामिल है, जिसे etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt के रूप में स्थापित किया गया है। , और /etc/vndksp.libraries.${VER}.txt .

उदाहरण: सिस्टम और विक्रेता छवियों को अपग्रेड करना

किसी स्नैपशॉट की आवश्यकता नहीं; VNDK स्नैपशॉट के लिए अतिरिक्त कॉन्फ़िगरेशन के बिना निर्माण करें।

उदाहरण: केवल सिस्टम छवि को अपग्रेड करना

सिस्टम छवि में विक्रेता छवि के लिए VNDK स्नैपशॉट और लिंकर नेमस्पेस कॉन्फ़िगरेशन फ़ाइलें शामिल होनी चाहिए। लिंकर नेमस्पेस कॉन्फ़िगरेशन फ़ाइलें स्वचालित रूप से /system/lib[64]/vndk-${VER} और /system/lib[64]/vndk-sp-${VER} में VNDK लाइब्रेरी की खोज करने के लिए कॉन्फ़िगर की जाती हैं।

चित्र 1. केवल सिस्टम को अपग्रेड करना

उदाहरण: सिस्टम छवि को अपग्रेड करना, विक्रेता की छवि में मामूली बदलाव

VNDK स्नैपशॉट के विरुद्ध विक्रेता छवि बनाना अभी तक समर्थित नहीं है, इसलिए आपको विक्रेता छवि को उसके मूल स्रोत कोड के साथ अलग से बनाना होगा, फिर पिछले उदाहरण में बताए अनुसार सिस्टम छवि को अपग्रेड करना होगा।

VNDK स्नैपशॉट आर्किटेक्चर

एंड्रॉइड 9 सिस्टम छवि को एंड्रॉइड 8.1 विक्रेता छवि के साथ संगत बनाने के लिए, एंड्रॉइड 8.1 विक्रेता छवि से मेल खाने वाला वीएनडीके स्नैपशॉट एंड्रॉइड 9 सिस्टम छवि के साथ प्रदान किया जाना चाहिए, जैसा कि नीचे दिखाया गया है:

चित्र 2. वीएनडीके स्नैपशॉट आर्किटेक्चर

VNDK स्नैपशॉट डिज़ाइन में निम्नलिखित विधियाँ शामिल हैं:

  • VNDK-कोर और VNDK-SP लाइब्रेरीज़ के लिए एक स्नैपशॉट तैयार करना । एंड्रॉइड 9 में एक स्क्रिप्ट शामिल है जिसका उपयोग आप वर्तमान वीएनडीके बिल्ड का स्नैपशॉट बनाने के लिए कर सकते हैं। यह स्क्रिप्ट /system/lib[64]/vndk-28 और /system/lib[64]/vndk-sp-28 में सभी लाइब्रेरीज़ को बंडल करती है जो वर्तमान स्रोत के साथ VNDK स्नैपशॉट के रूप में बनाई गई थीं, जहां 28 VNDK संस्करण है एंड्रॉइड 9. स्नैपशॉट में लिंकर नेमस्पेस कॉन्फ़िगरेशन फ़ाइलें /etc/ld.config.28.txt , /etc/llndk.libraries.28.txt , और /etc/vndksp.libraries.28.txt भी शामिल हैं। जेनरेट किए गए स्नैपशॉट का उपयोग नए एंड्रॉइड संस्करणों (एंड्रॉइड 9 से अधिक) के साथ किया जाएगा।
  • स्नैपशॉट से पूर्व-निर्मित वीएनडीके-कोर और वीएनडीके-एसपी लाइब्रेरी स्थापित करना । Android 9 में, VNDK स्नैपशॉट में पूर्व-निर्मित VNDK-कोर लाइब्रेरीज़ और VNDK-SP लाइब्रेरीज़ का एक सेट, साथ ही लिंकर नेमस्पेस कॉन्फ़िगरेशन फ़ाइलें होती हैं। जब आप स्थापित किए जाने वाले VNDK स्नैपशॉट संस्करणों की एक सूची प्रदान करते हैं, तो निर्माण समय पर, सिस्टम छवि VNDK स्नैपशॉट लाइब्रेरी को /system/lib[64]/vndk-${VER} और /system/lib[64]/vndk-sp-${VER} स्थापित करती है। /etc निर्देशिका के उन VNDK स्नैपशॉट के लिए /system/lib[64]/vndk-sp-${VER} निर्देशिकाएं और लिंकर नेमस्पेस कॉन्फ़िगरेशन फ़ाइलें।

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

प्रत्येक Android रिलीज़ में केवल एक VNDK स्नैपशॉट होता है और SDK संस्करण का उपयोग VNDK संस्करण के रूप में किया जाता है (जिसका अर्थ है कि VNDK संस्करण में एक पूर्णांक संख्या होती है, जैसे Android 8.1 के लिए 27)। Android संस्करण जारी होने पर VNDK संस्करण ठीक हो जाता है। विक्रेता विभाजन द्वारा उपयोग किया गया VNDK संस्करण स्वचालित रूप से ro.vndk.version प्रॉपर्टी में संग्रहीत होता है, जिसे रनटाइम पर पढ़ा जा सकता है। इस संस्करण का उपयोग कुछ पुस्तकालयों के लिए विक्रेता VNDK संस्करण की पहचान करने और नेमस्पेस कॉन्फ़िगरेशन के लिए VNDK स्नैपशॉट संस्करण की पहचान करने में किया जाता है।

वीएनडीके पुस्तकालयों का निर्माण

मेक make vndk है जिनमें निर्भरता और नेमस्पेस कॉन्फ़िगरेशन फ़ाइलों सहित vndk: { enabled: true, … } यदि BOARD_VNDK_VERSION := current सेट है, तो ये लाइब्रेरी make कमांड के साथ बनाई गई हैं।

क्योंकि यह बिल्ड स्नैपशॉट से VNDK लाइब्रेरीज़ को स्थापित नहीं करता है, स्थापित VNDK लाइब्रेरीज़ ABI-स्थिर नहीं हैं। हालाँकि, जब कोई Android संस्करण जारी किया जाता है, तो वर्तमान VNDK संस्करण के लिए ABI तय हो जाता है। इस बिंदु पर, कोई भी एबीआई टूटना एक बिल्ड त्रुटि है, इसलिए एंड्रॉइड संस्करण के पैच को वीएनडीके पुस्तकालयों के लिए एबीआई को नहीं बदलना चाहिए।