SDK टूल के एक्सटेंशन

SDK एक्सटेंशन मॉड्यूल, डिवाइस के एक्सटेंशन एसडीके लेवल का फ़ैसला करता है. साथ ही, यह ऐप्लिकेशन को एक्सटेंशन एसडीके लेवल के बारे में क्वेरी करने के लिए एपीआई उपलब्ध कराता है. इस मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि इसे Android की सामान्य रिलीज़ साइकल के बाहर, फ़ंक्शन से जुड़े अपडेट मिल सकते हैं.

SDK एक्सटेंशन, इन कामों के लिए ज़िम्मेदार है:

  • इससे डिवाइस के एक्सटेंशन एसडीके टूल का लेवल तय किया जाता है.
  • ऐप्लिकेशन को एक्सटेंशन SDK लेवल के बारे में क्वेरी करने के लिए एपीआई उपलब्ध कराना.
  • (Android 12 से शुरू होने वाले वर्शन के लिए) BOOTCLASSPATH, DEX2OATBOOTCLASSPATH, और SYSTEMSERVERCLASSPATH एनवायरमेंट वैरिएबल की वैल्यू तय करना.

मॉड्यूल का फ़ॉर्मैट

एसडीके एक्सटेंशन मॉड्यूल (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 एक्सटेंशन मॉड्यूल, 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 में बताया गया है. यह एल्गोरिदम, क्लासपाथ एंट्री के क्रम का पता लगाता है. इसमें समय के साथ बदलाव हो सकता है.