एसडीके एक्सटेंशन, मॉड्यूलर सिस्टम कॉम्पोनेंट का इस्तेमाल करते हैं. इससे, पहले रिलीज़ किए गए कुछ एपीआई लेवल के लिए, सार्वजनिक एसडीके में एपीआई जोड़े जा सकते हैं. ये एपीआई, डिवाइसों पर तब डिलीवर किए जाते हैं, जब उपयोगकर्ताओं को Google Play के सिस्टम अपडेट के ज़रिए मॉड्यूल के अपडेट मिलते हैं. ऐप्लिकेशन डेवलपर, अपने ऐप्लिकेशन में इन एपीआई का इस्तेमाल कर सकते हैं. इससे उन्हें अतिरिक्त सुविधाएं मिलती हैं. ये सुविधाएं, Android के पुराने वर्शन के लिए एसडीके में उपलब्ध नहीं थीं.
एपीआई वर्शनिंग
Android 11 (एपीआई लेवल 30) से, Android डिवाइसों में एसडीके एक्सटेंशन का एक सेट शामिल होता है. नए एपीआई जोड़े जाने पर, उन्हें एपीआई लेवल में शामिल किया जाता है. हालांकि, उन्हें किसी वर्शन के एसडीके एक्सटेंशन में भी शामिल किया जा सकता है. उदाहरण के लिए, फ़ोटो पिकर के लिए ACTION_PICK_IMAGES एपीआई को Android 13 (एपीआई लेवल 33) में सार्वजनिक एसडीके में जोड़ा गया था. हालांकि, यह एसडीके एक्सटेंशन के ज़रिए भी उपलब्ध है. इसके लिए, R एक्सटेंशन का वर्शन 2 या इसके बाद का होना ज़रूरी है.
एसडीके एक्सटेंशन के नाम, पूर्णांक वाले कॉन्स्टेंट से मेल खाते हैं. ये कॉन्स्टेंट, Build.VERSION_CODES से लिए गए कॉन्स्टेंट या SdkExtensions क्लास में तय किए गए कॉन्स्टेंट (जैसे कि SdkExtensions.AD_SERVICES) हो सकते हैं.
तय करें कि आपको किन SDK एक्सटेंशन का इस्तेमाल करना है
एसडीके एक्सटेंशन एपीआई का इस्तेमाल करने से पहले, आपको यह तय करना होगा कि किन एसडीके में ऐसे एपीआई शामिल हैं जो आपके ऐप्लिकेशन के इस्तेमाल के उदाहरणों के साथ काम करते हैं.
एसडीके एक्सटेंशन एपीआई के लिए एपीआई रेफ़रंस पेजों पर, एसडीके एक्सटेंशन का सबसे पुराना वर्शन बताया जाता है. इस वर्शन का इस्तेमाल करके, आपका ऐप्लिकेशन किसी एपीआई को ऐक्सेस कर सकता है. अगर दस्तावेज़ में Android प्लैटफ़ॉर्म का वर्शन (एपीआई लेवल के हिसाब से) भी बताया गया है, तो वह एपीआई, Android के उस वर्शन या उसके बाद वाले वर्शन पर काम करने वाले सभी डिवाइसों के लिए भी उपलब्ध होता है.
उदाहरण के लिए, ACTION_PICK_IMAGES आम तौर पर Android 13 (एपीआई लेवल 33) से शुरू होने वाले सार्वजनिक एसडीके में उपलब्ध है. हालांकि, यह Android 11 (एपीआई लेवल 30) वाले डिवाइसों पर भी उपलब्ध है. इसके लिए, डिवाइस में कम से कम R एक्सटेंशन वर्शन 2 होना ज़रूरी है:
इस एपीआई का इस्तेमाल करने के लिए, आपको कम से कम एपीआई लेवल 33 या एक्सटेंशन लेवल 2 वाले एसडीके के साथ कंपाइल करना होगा.
एक्सटेंशन SDK का इस्तेमाल करने के लिए, यह तरीका अपनाएं:
- आपको एक्सटेंशन के जिस वर्शन की ज़रूरत है उसे ढूंढने के लिए, उस सुविधा का दस्तावेज़ और एपीआई रेफ़रंस देखें जिसका इस्तेमाल करना है.
- अपनी सुविधा के सेट के लिए ज़रूरी एक्सटेंशन का वर्शन तय करने के बाद, Android Studio में SDK Manager खोलें.
- मिलते-जुलते एक्सटेंशन वर्शन (या इससे ज़्यादा वर्शन, क्योंकि एपीआई ऐडिटिव होते हैं) के साथ Android SDK प्लैटफ़ॉर्म एंट्री चुनें. उदाहरण के लिए: Android SDK प्लैटफ़ॉर्म 33, एक्सटेंशन लेवल 4.
इन वैल्यू का एलान, अपने ऐप्लिकेशन की
build.gradle.ktsयाbuild.gradleफ़ाइल में करें:शानदार
android { compileSdk 33 compileSdkExtension 4 ... }
Kotlin
android { compileSdk = 33 compileSdkExtension = 4 ... }
देखें कि SDK एक्सटेंशन उपलब्ध हैं या नहीं
आपका ऐप्लिकेशन, रनटाइम के दौरान यह देख सकता है कि SDK एक्सटेंशन के कौनसे वर्शन उपलब्ध हैं. साथ ही, डेवलपमेंट के दौरान Android Debug Bridge (adb) कमांड का इस्तेमाल करके, एक्सटेंशन के वर्शन देखे जा सकते हैं. इसके बारे में यहां बताया गया है.
रनटाइम के दौरान जांच करना
आपका ऐप्लिकेशन, रनटाइम के दौरान यह देख सकता है कि किसी प्लैटफ़ॉर्म वर्शन के लिए SDK एक्सटेंशन उपलब्ध हैं या नहीं. इसके लिए, getExtensionVersion() तरीके का इस्तेमाल करें. उदाहरण के लिए, यहां दिया गया कोड यह देखेगा कि Android 11 (एपीआई लेवल 30) के SDK एक्सटेंशन के लिए, एक्सटेंशन का दूसरा या उसके बाद का वर्शन उपलब्ध है या नहीं:
Kotlin
fun isPhotoPickerAvailable(): Boolean { return SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2 // Safely use extension APIs that are available with Android 11 (API level 30) Extensions Version 2, such as Photo Picker. }
Java
public static final boolean isPhotoPickerAvailable() { return SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2; }
यह Build.VERSION.SDK_INT के आधार पर जांच करने जैसा ही है:
Kotlin
fun isPhotoPickerAvailable(): Boolean { return Build.VERSION.SDK_INT >= 33 }
Java
public static final boolean isPhotoPickerAvailable() { return Build.VERSION.SDK_INT >= 33; }
यह SDK_INT जांच अब भी सुरक्षित और मान्य है. हालांकि, isPhotoPickerAvailable कुछ डिवाइसों पर गलत जवाब देगा. भले ही, एक्सटेंशन एपीआई उपलब्ध हो. इस वजह से, SDK_INT की जांच सही तरीके से नहीं हो पाती. साथ ही, एक्सटेंशन के वर्शन की जांच करना, एपीआई की उपलब्धता की जांच करने का बेहतर तरीका है. SDK_INT 33 (Android 13 या इसके बाद का वर्शन) या इससे ज़्यादा वर्शन वाले सभी डिवाइसों में, सार्वजनिक एसडीके में फ़ोटो पिकर एपीआई होते हैं. हालांकि, SDK_INT 33 से कम वर्शन वाले डिवाइस (जैसे कि Android 11, 12, और 12L) भी इन एपीआई को ऐक्सेस कर सकते हैं. इसके लिए, ज़रूरी है कि उनके पास कम से कम 2 के R एक्सटेंशन वर्शन हों.
ऐसे में, एक्सटेंशन के वर्शन की जांच करने से, आपका ऐप्लिकेशन ज़्यादा लोगों को अतिरिक्त सुविधाएं दे सकता है. एसडीके एक्सटेंशन के नाम और कॉन्स्टेंट में, उन सभी कॉन्स्टेंट की सूची देखें जिनका इस्तेमाल किसी डिवाइस पर कुछ एसडीके एक्सटेंशन की जांच करने के लिए किया जा सकता है.
विज्ञापन सेवाओं के एक्सटेंशन
एसडीके एक्सटेंशन के सामान्य सेट की तरह ही, AdServices एपीआई का संदर्भ कभी-कभी यह बताता है कि कोई एपीआई, "विज्ञापन सेवाओं के एक्सटेंशन" वर्शन का हिस्सा है.
सामान्य एसडीके एक्सटेंशन के उलट, विज्ञापन सेवाओं से जुड़े एक्सटेंशन, SdkExtensions.AD_SERVICES कॉन्स्टेंट का इस्तेमाल करके यह पता लगाते हैं कि डिवाइस पर कौनसा वर्शन मौजूद है:
Kotlin
fun isAdServicesAvailable(): Boolean { return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4 }
Java
public static final boolean isAdServicesAvailable() { return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4; }
Ad Services Extensions में मौजूद सुविधाओं और उन्हें इस्तेमाल करने का तरीका जानने के लिए, Ad Services Extensions का दस्तावेज़ देखें.
यूटिलिटी मेथड
कुछ मामलों में, एसडीके एक्सटेंशन में Jetpack के यूटिलिटी मेथड होते हैं. इनकी मदद से, एसडीके एक्सटेंशन एपीआई की उपलब्धता की जांच की जा सकती है. उदाहरण के लिए, Jetpack लाइब्रेरी फ़ंक्शन का इस्तेमाल करके, यह पता लगाया जा सकता है कि PhotoPicker उपलब्ध है या नहीं. इससे, शर्त के हिसाब से वर्शन की जांच करने की ज़रूरत नहीं पड़ती.
टूल से जुड़ी सहायता
Android Studio Flamingo | 2022.2.1 या इसके बाद के वर्शन में, Lint टूल SDK एक्सटेंशन के वर्शन से जुड़ी समस्याओं को स्कैन कर सकता है. ऐसा वह NewAPI की जांच के दौरान करता है. इसके अलावा, Android Studio उन एपीआई के लिए सही वर्शन की जांच अपने-आप जनरेट कर सकता है जिन्हें एसडीके एक्सटेंशन का इस्तेमाल करके लॉन्च किया गया है.
एसडीके एक्सटेंशन के नाम और कॉन्स्टेंट
यहां दी गई टेबल में बताया गया है कि एपीआई के संदर्भ दस्तावेज़ में दिए गए एसडीके एक्सटेंशन के अलग-अलग सेट, उन कॉन्स्टेंट से कैसे मैप होते हैं जिनका इस्तेमाल करके आपका ऐप्लिकेशन, रनटाइम के दौरान एपीआई की उपलब्धता की जांच कर सकता है. हर सार्वजनिक एसडीके के लिए, एसडीके एक्सटेंशन का सामान्य सेट, Build.VERSION_CODES की वैल्यू के साथ मैप करता है.
| SDK एक्सटेंशन का नाम | कॉन्स्टेंट | मंज़ूरी दिए गए डिवाइस |
|---|---|---|
| R एक्सटेंशन | VERSION_CODES.R |
Android 11 (एपीआई लेवल 30) और इसके बाद के वर्शन |
| एस एक्सटेंशन | VERSION_CODES.S |
Android 12 (एपीआई लेवल 31) और उसके बाद के वर्शन |
| टी एक्सटेंशन | VERSION_CODES.TIRAMISU |
Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन |
| U एक्सटेंशन | VERSION_CODES.UPSIDE_DOWN_CAKE |
Android 14 (एपीआई लेवल 34) और इसके बाद के वर्शन |
| V एक्सटेंशन | VERSION_CODES.VANILLA_ICE_CREAM |
Android 15 (एपीआई लेवल 35) और इसके बाद के वर्शन |
| B एक्सटेंशन | VERSION_CODES.BAKLAVA |
Android 16 (एपीआई लेवल 36) और इसके बाद के वर्शन |
| C एक्सटेंशन | VERSION_CODES.CINNAMON_BUN |
Android 17 (एपीआई लेवल 37) और इसके बाद के वर्शन |
| विज्ञापन सेवाओं के एक्सटेंशन | SdkExtensions.AD_SERVICES |
Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन |
adb का इस्तेमाल करके जांच करना
adb का इस्तेमाल करके, यह देखने के लिए कि किसी डिवाइस पर कौनसा SDK एक्सटेंशन उपलब्ध है, यह कमांड चलाएं:
adb shell getprop | grep build.version.extensions
कमांड चलाने के बाद, आपको इससे मिलता-जुलता आउटपुट दिखेगा:
[build.version.extensions.r]: [3] # Android 11 (API level 30) and higher
[build.version.extensions.s]: [3] # Android 12 (API level 31) and higher
[build.version.extensions.t]: [3] # Android 13 (API level 33) and higher
हर लाइन में, डिवाइस पर मौजूद एसडीके एक्सटेंशन दिखते हैं. साथ ही, उनके एक्सटेंशन का वर्शन भी दिखता है. इस मामले में, यह वर्शन 3 है.