वीएनडीके एक्सटेंशन

एंड्रॉइड डिवाइस निर्माता विभिन्न कारणों से AOSP लाइब्रेरीज़ के स्रोत कोड को बदलते हैं। कुछ विक्रेता प्रदर्शन को बढ़ावा देने के लिए एओएसपी पुस्तकालयों में कार्यों को फिर से लागू करते हैं जबकि अन्य विक्रेता एओएसपी पुस्तकालयों में नए हुक, नए एपीआई या नई कार्यक्षमता जोड़ते हैं। यह अनुभाग एओएसपी पुस्तकालयों को इस तरह से विस्तारित करने के लिए दिशानिर्देश प्रदान करता है जिससे सीटीएस/वीटीएस टूट न जाए।

ड्रॉप-इन प्रतिस्थापन

सभी संशोधित साझा लाइब्रेरीज़ को उनके AOSP समकक्ष के बाइनरी-संगत , ड्रॉप-इन प्रतिस्थापन होना चाहिए। सभी मौजूदा एओएसपी उपयोगकर्ताओं को पुनर्संकलन के बिना संशोधित साझा लाइब्रेरी का उपयोग करने में सक्षम होना चाहिए। इस आवश्यकता का तात्पर्य निम्नलिखित है:

  • AOSP फ़ंक्शंस को हटाया नहीं जाना चाहिए.
  • यदि ऐसी संरचनाएं उनके उपयोगकर्ताओं के संपर्क में आती हैं तो संरचनाओं में बदलाव नहीं किया जाना चाहिए।
  • कार्यों की पूर्व शर्त को मजबूत नहीं किया जाना चाहिए।
  • फ़ंक्शंस को समतुल्य कार्यक्षमताएँ प्रदान करनी चाहिए।
  • कार्यों की उत्तर-स्थिति को कमजोर नहीं किया जाना चाहिए।

विस्तारित मॉड्यूल वर्गीकरण

मॉड्यूल को उनके द्वारा परिभाषित और उपयोग की जाने वाली कार्यक्षमताओं के आधार पर वर्गीकृत करें।

ध्यान दें : एपीआई/एबीआई के बजाय यहां कार्यात्मकताओं का उपयोग किया जाता है क्योंकि किसी भी एपीआई/एबीआई को बदले बिना कार्यक्षमता जोड़ना संभव है।

मॉड्यूल में परिभाषित कार्यात्मकताओं के आधार पर, मॉड्यूल को डीए-मॉड्यूल और डीएक्स-मॉड्यूल में वर्गीकृत किया जा सकता है:

  • केवल-परिभाषित-एओएसपी मॉड्यूल (डीए-मॉड्यूल) नई कार्यात्मकताओं को परिभाषित नहीं करते हैं जो एओएसपी समकक्ष में नहीं थे।
    • उदाहरण 1. एक अक्षुण्ण असंशोधित एओएसपी लाइब्रेरी एक डीए-मॉड्यूल है।
    • उदाहरण 2. यदि कोई विक्रेता SIMD निर्देशों के साथ libcrypto.so में फ़ंक्शन को फिर से लिखता है (नए फ़ंक्शन जोड़े बिना), तो संशोधित libcrypto.so एक DA-मॉड्यूल होगा।
  • डिफाइनिंग-एक्सटेंशन मॉड्यूल (डीएक्स-मॉड्यूल) या तो नई कार्यक्षमताओं को परिभाषित करते हैं या उनमें एओएसपी समकक्ष नहीं होता है।
    • उदाहरण 1. यदि कोई विक्रेता कुछ आंतरिक डेटा तक पहुंचने के लिए libjpeg.so में एक सहायक फ़ंक्शन जोड़ता है, तो संशोधित libjpeg.so एक DX-Lib होगा और नया जोड़ा गया फ़ंक्शन लाइब्रेरी का विस्तारित भाग होगा।
    • उदाहरण 2. यदि कोई विक्रेता libfoo.so नामक गैर-एओएसपी लाइब्रेरी को परिभाषित करता है, तो libfoo.so एक DX-Lib होगा।

मॉड्यूल द्वारा उपयोग की जाने वाली कार्यक्षमता के आधार पर, मॉड्यूल को यूए-मॉड्यूल और यूएक्स-मॉड्यूल में वर्गीकृत किया जा सकता है।

  • केवल-एओएसपी मॉड्यूल (यूए-मॉड्यूल) का उपयोग उनके कार्यान्वयन में केवल एओएसपी कार्यात्मकताओं का उपयोग करता है। वे किसी भी गैर-एओएसपी एक्सटेंशन पर भरोसा नहीं करते हैं।
    • उदाहरण 1. एक अक्षुण्ण असंशोधित एओएसपी लाइब्रेरी एक यूए-मॉड्यूल है।
    • उदाहरण 2. यदि एक संशोधित साझा लाइब्रेरी libjpeg.so केवल अन्य AOSP API पर निर्भर करती है, तो यह एक UA-मॉड्यूल होगा।
  • यूज़िंग-एक्सटेंशन मॉड्यूल (यूएक्स-मॉड्यूल) अपने कार्यान्वयन में कुछ गैर-एओएसपी कार्यात्मकताओं पर निर्भर करते हैं।
    • उदाहरण 1. यदि एक संशोधित libjpeg.so libjpeg_turbo2.so नामक किसी अन्य गैर-AOSP लाइब्रेरी पर निर्भर करता है, तो संशोधित libjpeg.so एक UX-मॉड्यूल होगा।
    • उदाहरण 2. यदि कोई विक्रेता अपने संशोधित libexif.so में एक नया फ़ंक्शन जोड़ता है और उनका संशोधित libjpeg.so libexif.so से नए जोड़े गए फ़ंक्शन का उपयोग करता है, तो उनका संशोधित libjpeg.so एक UX-मॉड्यूल होगा।

परिभाषाएँ और उपयोग एक दूसरे से स्वतंत्र हैं:

प्रयुक्त कार्यक्षमताएँ
केवल एओएसपी (यूए) विस्तारित (यूएक्स)
परिभाषित कार्यक्षमताएँ केवल एओएसपी (डीए) दाऊ डौक्स
विस्तारित (डीएक्स) डीएक्सयूए डीएक्सयूएक्स

वीएनडीके विस्तार तंत्र

विस्तारित कार्यक्षमताओं पर निर्भर विक्रेता मॉड्यूल काम नहीं करेंगे क्योंकि समान नाम वाली AOSP लाइब्रेरी में विस्तारित कार्यक्षमता नहीं है। यदि विक्रेता मॉड्यूल प्रत्यक्ष या अप्रत्यक्ष रूप से विस्तारित कार्यक्षमता पर निर्भर करते हैं, तो विक्रेताओं को DAUX, DXUA और DXUX साझा लाइब्रेरी को विक्रेता विभाजन में कॉपी करना चाहिए (विक्रेता प्रक्रियाएं हमेशा पहले विक्रेता विभाजन में साझा लाइब्रेरी की तलाश करती हैं)। हालाँकि, एलएल-एनडीके पुस्तकालयों की प्रतिलिपि नहीं बनाई जानी चाहिए, इसलिए विक्रेता मॉड्यूल को संशोधित एलएल-एनडीके पुस्तकालयों द्वारा परिभाषित विस्तारित कार्यक्षमताओं पर भरोसा नहीं करना चाहिए।

DAUA साझा लाइब्रेरी सिस्टम विभाजन पर बनी रह सकती है यदि संबंधित AOSP लाइब्रेरी समान कार्यक्षमता प्रदान कर सकती है और जेनेरिक सिस्टम इमेज (GSI) द्वारा सिस्टम विभाजन को ओवरराइट करने पर विक्रेता मॉड्यूल काम करना जारी रखता है।

ड्रॉप-इन प्रतिस्थापन महत्वपूर्ण है क्योंकि जीएसआई में असंशोधित वीएनडीके लाइब्रेरी नाम टकराव पर संशोधित साझा लाइब्रेरी से जुड़ेंगी। यदि AOSP लाइब्रेरीज़ को API/ABI असंगत तरीके से संशोधित किया जाता है, तो GSI में AOSP लाइब्रेरीज़ लिंक करने में विफल हो सकती हैं या परिणामस्वरूप अपरिभाषित व्यवहार हो सकता है।