VNDK एक्सटेंशन

Android डिवाइस निर्माता इसके लिए AOSP लाइब्रेरी का सोर्स कोड बदलते हैं में हो सकती है. कुछ वेंडर, एओएसपी लाइब्रेरी में फ़ंक्शन फिर से लागू करके परफ़ॉर्मेंस को बेहतर बनाते हैं, जबकि अन्य वेंडर नए हुक, नए एपीआई या नए और एओएसपी लाइब्रेरी की सुविधाओं के बारे में ज़्यादा जानें. इस सेक्शन में, इन कामों के लिए दिशा-निर्देश दिए गए हैं एओएसपी लाइब्रेरी को इस तरह से बढ़ाया जा रहा हो जिससे सीटीएस/वीटीएस का उल्लंघन न होता हो.

ड्रॉप-इन रिप्लेसमेंट

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

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

मॉड्यूल की एक्सटेंडेड कैटगरी

मॉड्यूल को उन सुविधाओं के हिसाब से कैटगरी में बांटें जो वे तय करते हैं और इस्तेमाल करें.

ध्यान दें: यहां फ़ंक्शनलिटी का इस्तेमाल किया जाता है की जगह एपीआई/एबीआई की तरह काम करता है, क्योंकि इसमें बदलाव किए बिना फ़ंक्शन जोड़ा जा सकता है किसी भी एपीआई/एबीआई के साथ काम करता है.

मॉड्यूल में बताई गई सुविधाओं के आधार पर, मॉड्यूल या DA-माड्यूल और DX-मॉड्यूल में बांटा गया है:

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

मॉड्यूल में इस्तेमाल की जाने वाली सुविधाओं के आधार पर, मॉड्यूल की कैटगरी तय की जा सकती है UA-Module और UX-Module में स्विच किया गया है.

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

परिभाषाएं और इस्तेमाल का तरीका, एक-दूसरे से अलग होता है:

इस्तेमाल की गई फ़ंक्शन
सिर्फ़ एओएसपी (UA) एक्सटेंडेड (UX)
तय की गई फ़ंक्शन सिर्फ़ एओएसपी (डीए) डायूए डीएयूएक्स
एक्सटेंडेड (DX) डीएक्सयूए डक्सयूएक्स

VNDK एक्सटेंशन मैकेनिज़्म

वेंडर के ऐसे मॉड्यूल काम नहीं करेंगे जो एक्सटेंडेड फ़ंक्शन का इस्तेमाल करते हैं, क्योंकि इसी नाम की AOSP लाइब्रेरी में बढ़ाई गई सुविधाएं नहीं हैं. अगर आपने वेंडर मॉड्यूल सीधे तौर पर या किसी दूसरे तरीके से, बढ़ाई गई सुविधाओं पर निर्भर करते हैं. वेंडर को DAUX, DXUA, और DXUX की शेयर की गई लाइब्रेरी को वेंडर में कॉपी करना होगा विभाजन (वेंडर प्रोसेस हमेशा वेंडर में शेयर की गई लाइब्रेरी ढूंढती हैं विभाजन). हालांकि, LL-NDK लाइब्रेरी कॉपी नहीं की जानी चाहिए, इसलिए वेंडर मॉड्यूल में, वे सुविधाएं इस्तेमाल नहीं की जानी चाहिए जिनके लिए, एलएल-एनडीके लाइब्रेरी.

डीएयूए की शेयर की गई लाइब्रेरी, सिस्टम पार्टिशन में बनी रह सकती हैं, अगर: संबंधित AOSP लाइब्रेरी से, वे सुविधाएं और वेंडर उपलब्ध हो सकते हैं मॉड्यूल तब काम करता रहता है, जब सिस्टम विभाजन किसी जेनेरिक से ओवरराइट हो जाता है सिस्टम इमेज (GSI).

इसमें ड्रॉप-इन को बदलना ज़रूरी है, क्योंकि इसमें बदलाव न किए गए VNDK लाइब्रेरी नाम कोलिज़न होने पर जीएसआई, बदली गई शेयर की गई लाइब्रेरी के साथ लिंक करेगा. अगर एओएसपी लाइब्रेरी में, एपीआई/एबीआई के साथ काम नहीं करने वाले तरीके से बदलाव किया जाता है, यानी एओएसपी जीएसआई में लाइब्रेरी लिंक नहीं कर पातीं या इनके नतीजे तय नहीं होते.