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

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

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

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

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

SDK टूल एक्सटेंशन मॉड्यूल (com.android.sdkext), APEX फ़ॉर्मैट में है. यह Android 11 या इसके बाद के वर्शन वाले डिवाइसों के लिए उपलब्ध है.

पैकेज का फ़ॉर्मैट

SDK एक्सटेंशन मॉड्यूल (com.google.android.sdkext) APEX फ़ॉर्मैट में है और इसमें ये कॉम्पोनेंट शामिल हैं:

  • (Android 12 से) bin/derive_classpath: डिवाइस के बूट होने की प्रोसेस के शुरू में चलने वाला नेटिव बाइनरी. यह सिस्टम और अन्य मॉड्यूल से अलग-अलग क्लासपथ कॉन्फ़िगरेशन फ़ाइलें पढ़ता है, उन्हें मर्ज करता है, और CLASSPATH एनवायरमेंट वैरिएबल की परिभाषा तय करता है.

  • bin/derive_sdk: एक नेटिव बाइनरी, जो डिवाइस को चालू करने की प्रोसेस में सबसे पहले चलती है. साथ ही, यह एक्सटेंशन SDK टूल से जुड़ी सिस्टम प्रॉपर्टी सेट करने के लिए, दूसरे मॉड्यूल के मेटाडेटा को पढ़ती है. उदाहरण के लिए, build.version.extensions.r.

  • javalib/framework-sdkextension.jar: यह फ़ाइल बूटक्लासपाथ पर है, जो एक्सटेंशन SDK लेवल से क्वेरी करने के लिए ऐप्लिकेशन में एपीआई दिखाती है.

एक्सटेंशन SDK टूल का लेवल तय करना

derive_sdk प्रोग्राम, हर APEX मॉड्यूल के अंदर etc/sdkinfo.binarypb सबपाथ में, बाइनरी प्रोटोबफ़ फ़ाइलों के तौर पर सेव किए गए मेटाडेटा को पढ़ता है. प्रोटोबफ़ स्ट्रक्चर के बारे में जानने के लिए, protobuf फ़ाइल देखें.

एक्सटेंशन SDK टूल का लेवल देखना

SDK टूल के एक्सटेंशन मॉड्यूल में, android.os.ext पैकेज में SdkExtensions java क्लास मौजूद होती है. किसी SDK एक्सटेंशन का वर्शन पढ़ने के लिए, getExtensionVersion(int) तरीके का इस्तेमाल करें (जैसे, getExtensionVersion(Build.VERSION_CODES.R)).

क्लासपाथ बनाना

derive_classpath सेवा, /system/etc/classpaths/ और /apex/*/etc/classpaths/ में मौजूद अलग-अलग कॉन्फ़िगरेशन फ़ाइलों को पढ़ती है और उन्हें मर्ज करती है. हर कॉन्फ़िगरेशन, classpaths.proto से मिले प्रोटोबबल मैसेज को प्रोटो बाइनरी फ़ॉर्मैट में सेव करता है. मर्ज करने वाले जिस एल्गोरिदम की मदद से क्लासपाथ एंट्री का क्रम तय किया जाता है उसके बारे में derive_classpath.cpp में बताया गया है. इसमें समय के साथ बदलाव हो सकता है.