SDK एक्सटेंशन मॉड्यूल, डिवाइस के एक्सटेंशन एसडीके लेवल का फ़ैसला करता है. साथ ही, यह ऐप्लिकेशन को एक्सटेंशन एसडीके लेवल के बारे में क्वेरी करने के लिए एपीआई उपलब्ध कराता है. इस मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि इसे Android की सामान्य रिलीज़ साइकल के बाहर, फ़ंक्शन से जुड़े अपडेट मिल सकते हैं.
एसडीके एक्सटेंशन, इन कामों के लिए ज़िम्मेदार है:
- डिवाइस के एक्सटेंशन एसडीके टूल का लेवल तय करना.
- ऐप्लिकेशन को एक्सटेंशन SDK लेवल के बारे में क्वेरी करने के लिए एपीआई उपलब्ध कराना.
- (Android 12 से शुरू होने वाले वर्शन के लिए)
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
, औरSYSTEMSERVERCLASSPATH
एनवायरमेंट वैरिएबल की वैल्यू तय करना.
मॉड्यूल का फ़ॉर्मैट
SDK एक्सटेंशन मॉड्यूल (com.android.sdkext
), APEX फ़ॉर्मैट में होता है. यह Android 11 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों के लिए उपलब्ध है.
पैकेज का फ़ॉर्मैट
एसडीके एक्सटेंशन मॉड्यूल (com.google.android.sdkext
) APEX फ़ॉर्मैट में है. इसमें ये कॉम्पोनेंट शामिल हैं:
(Android 12 से शुरू होने वाले वर्शन के लिए)
bin/derive_classpath
: यह एक नेटिव बाइनरी है, जो डिवाइस के बूट होने की प्रोसेस के दौरान शुरू होती है. यह सिस्टम और अन्य मॉड्यूल से अलग-अलग क्लासपाथ कॉन्फ़िगरेशन फ़ाइलों को पढ़ता है, उन्हें मर्ज करता है, औरCLASSPATH
एनवायरमेंट वैरिएबल की परिभाषा तय करता है.bin/derive_sdk
: यह एक नेटिव बाइनरी है, जो डिवाइस के बूट होने की प्रोसेस में सबसे पहले चलती है. यह अन्य मॉड्यूल का मेटाडेटा पढ़ती है, ताकि एक्सटेंशन एसडीके (उदाहरण के लिए,build.version.extensions.r
) से जुड़ी सिस्टम प्रॉपर्टी सेट की जा सकें.javalib/framework-sdkextension.jar
: यह फ़ाइल बूटक्लाथपाथ पर है. यह ऐप्लिकेशन को एक्सटेंशन एसडीके लेवल के बारे में क्वेरी करने के लिए एपीआई उपलब्ध कराती है.
एक्सटेंशन एसडीके का लेवल तय करना
derive_sdk
प्रोग्राम, हर APEX मॉड्यूल में etc/sdkinfo.binarypb
सबपाथ के अंदर बाइनरी प्रोटोबफ़ फ़ाइलों के तौर पर सेव किए गए मेटाडेटा को पढ़ता है. प्रोटोबफ़ के स्ट्रक्चर के बारे में जानने के लिए, protobuf
फ़ाइल देखें.
एक्सटेंशन SDK टूल का लेवल पढ़ने की अनुमति
SDK एक्सटेंशन मॉड्यूल, android.os.ext
पैकेज में SdkExtensions
java क्लास दिखाता है. एसडीके एक्सटेंशन का वर्शन पढ़ने के लिए, getExtensionVersion(int)
मेथड का इस्तेमाल करें. उदाहरण के लिए,
getExtensionVersion(Build.VERSION_CODES.R)
.
क्लाथपाथ पाना
derive_classpath
सेवा, /system/etc/classpaths/
और /apex/*/etc/classpaths/
में मौजूद अलग-अलग कॉन्फ़िगरेशन फ़ाइलों को पढ़ती है और उन्हें मर्ज करती है. हर कॉन्फ़िगरेशन, classpaths.proto
से मिले प्रोटोबफ़ मैसेज को प्रोटो बाइनरी फ़ॉर्मैट में सेव करता है. मर्ज करने वाले सटीक एल्गोरिदम के बारे में derive_classpath.cpp
में बताया गया है. यह एल्गोरिदम, क्लासपाथ एंट्री के क्रम का पता लगाता है. इसमें समय के साथ बदलाव हो सकता है.