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(Build.VERSION_CODES.R)) का वर्शन पढ़ने के लिए, getExtensionVersion(int) तरीका इस्तेमाल करें.

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

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