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

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

एपीआई का वर्शन

Android 11 (एपीआई लेवल 30) से, Android डिवाइसों में SDK टूल के एक्सटेंशन का एक सेट शामिल होता है. नए एपीआई जोड़ने पर, उन्हें एपीआई लेवल में शामिल किया जाता है. हालांकि, इन्हें किसी खास वर्शन के एसडीके टूल के एक्सटेंशन में भी शामिल किया जा सकता है. उदाहरण के लिए, फ़ोटो पिकर के लिए ACTION_PICK_IMAGES एपीआई को Android 13 (एपीआई लेवल 33) में सार्वजनिक SDK टूल में जोड़ा गया था. हालांकि, यह R एक्सटेंशन वर्शन 2 से शुरू होने वाले SDK टूल के एक्सटेंशन के ज़रिए भी उपलब्ध है. SDK टूल के एक्सटेंशन के नाम, किसी पूर्णांक के साथ मेल खाते हैं. ये नाम, Build.VERSION_CODES से मिले किसी स्थिरांक या SdkExtensions क्लास में बताए गए किसी स्थिरांक (जैसे कि SdkExtensions.AD_SERVICES) से मेल खाते हैं.

यह तय करना कि SDK टूल के किन एक्सटेंशन का इस्तेमाल करना है

SDK टूल के एक्सटेंशन एपीआई का इस्तेमाल करने से पहले, आपको यह तय करना होगा कि किन SDK टूल में ऐसे एपीआई शामिल हैं जो आपके ऐप्लिकेशन के इस्तेमाल के उदाहरणों के साथ काम करते हैं.

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

उदाहरण के लिए, ACTION_PICK_IMAGES आम तौर पर, Android 13 (एपीआई लेवल 33) से शुरू होने वाले सार्वजनिक SDK टूल में उपलब्ध होता है. हालांकि, यह Android 11 (एपीआई लेवल 30) तक के डिवाइसों पर भी उपलब्ध होता है. इसके लिए ज़रूरी है कि डिवाइस में कम से कम R Extensions का वर्शन 2 हो:

SDK टूल के एक्सटेंशन में शामिल एपीआई, एपीआई के रेफ़रंस दस्तावेज़ों में अपना एक्सटेंशन वर्शन दिखाते हैं

इस एपीआई का इस्तेमाल करने के लिए, आपको कम से कम एपीआई लेवल 33 या एक्सटेंशन लेवल 2 वाले SDK टूल के हिसाब से कंपाइल करना होगा.

एक्सटेंशन SDK का इस्तेमाल करने के लिए, यह तरीका अपनाएं:

  1. आपको एक्सटेंशन का कौनसा वर्शन चाहिए, यह पता लगाने के लिए, उन एपीआई के लिए सुविधा के दस्तावेज़ और एपीआई रेफ़रंस देखें जिनका आपको इस्तेमाल करना है.
  2. अपने फ़ीचर सेट के लिए ज़रूरी एक्सटेंशन वर्शन तय करने के बाद, Android Studio में SDK Manager खोलें.
  3. Android SDK प्लैटफ़ॉर्म की एंट्री को उसी एक्सटेंशन के वर्शन के साथ चुनें (या इसके बाद का वर्शन, क्योंकि एपीआई जोड़े जाते हैं). उदाहरण के लिए: Android SDK Platform 33, एक्सटेंशन लेवल 4.
  4. अपने ऐप्लिकेशन की build.gradle.kts या build.gradle फ़ाइल में इन वैल्यू का एलान करें:

    Groovy

    android {
        compileSdk 33
        compileSdkExtension 4
        ...
    }
    

    Kotlin

    android {
        compileSdk = 33
        compileSdkExtension = 4
        ...
    }
    

देखें कि SDK टूल के एक्सटेंशन उपलब्ध हैं या नहीं

आपका ऐप्लिकेशन यह देख सकता है कि रनटाइम के दौरान SDK टूल के कौनसे वर्शन उपलब्ध हैं. साथ ही, ऐप्लिकेशन डेवलप करते समय, Android Debug Bridge (adb) निर्देशों का इस्तेमाल करके, एक्सटेंशन के वर्शन देखे जा सकते हैं. इस बारे में यहां दिए गए सेक्शन में बताया गया है.

रनटाइम के दौरान जांच करना

आपका ऐप्लिकेशन, रनटाइम के दौरान यह जांच कर सकता है कि किसी प्लैटफ़ॉर्म के वर्शन के लिए, SDK टूल के एक्सटेंशन उपलब्ध हैं या नहीं. इसके लिए, getExtensionVersion() तरीका इस्तेमाल किया जाता है. उदाहरण के लिए, यह कोड यह जांच करेगा कि Android 11 (एपीआई लेवल 30) SDK टूल के लिए, एक्सटेंशन का वर्शन 2 या उसके बाद का वर्शन उपलब्ध है या नहीं:

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 की जांच करना सबसे सही तरीका नहीं है. एपीआई की उपलब्धता की जांच करने का सबसे अच्छा तरीका, एक्सटेंशन वर्शन की जांच करना है. 33 (Android 13 या इसके बाद के वर्शन) या उससे ज़्यादा SDK_INT वाले सभी डिवाइसों के लिए, सार्वजनिक SDK टूल में फ़ोटो पिकर के एपीआई उपलब्ध होते हैं. हालांकि, ऐसे डिवाइस भी हैं जिनका SDK_INT 33 से कम है. जैसे, Android 11, 12, और 12L. अगर इन डिवाइसों में कम से कम 2 का R एक्सटेंशन वर्शन है, तो वे भी एपीआई ऐक्सेस कर सकते हैं.

इस मामले में, एक्सटेंशन के वर्शन की जांच करने से, आपके ऐप्लिकेशन को ज़्यादा उपयोगकर्ताओं को अतिरिक्त सुविधाएं देने में मदद मिल सकती है. SDK टूल के एक्सटेंशन के नाम और कॉन्स्टेंट देखें. इन कॉन्स्टेंट की मदद से, किसी डिवाइस पर SDK टूल के कुछ एक्सटेंशन की जांच की जा सकती है.

Ad Services एक्सटेंशन

SDK टूल के सामान्य सेट की तरह ही, AdServices एपीआई रेफ़रंस से कभी-कभी पता चलता है कि कोई एपीआई, "विज्ञापन सेवाओं के एक्सटेंशन" वर्शन का हिस्सा है. सामान्य SDK एक्सटेंशन के उलट, Ad Services एक्सटेंशन, डिवाइस पर कौनसा वर्शन है, यह पता लगाने के लिए 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 एक्सटेंशन की सुविधाओं और उन्हें इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, Ad Services एक्सटेंशन का दस्तावेज़ देखें.

काम के तरीके

कुछ मामलों में, SDK टूल के एक्सटेंशन में SDK टूल के एक्सटेंशन एपीआई की उपलब्धता की जांच करने के लिए, Jetpack के यूटिलिटी तरीके होते हैं. उदाहरण के लिए, PhotoPicker के उपलब्ध होने की जांच करने के लिए, Jetpack लाइब्रेरी फ़ंक्शन का इस्तेमाल किया जा सकता है. इससे, वर्शन की शर्तों के हिसाब से की जाने वाली जांच को हटाया जा सकता है.

टूल से जुड़ी सहायता

Android Studio Flamingo | 2022.2.1 या इसके बाद के वर्शन में, लिंट टूल, NewAPI की जांच के तहत SDK टूल के एक्सटेंशन वर्शन से जुड़ी समस्याओं का पता लगा सकता है. इसके अलावा, Android Studio, SDK टूल के एक्सटेंशन का इस्तेमाल करके लॉन्च किए गए एपीआई के लिए, सही वर्शन की जांच अपने-आप जनरेट कर सकता है.

lint टूल उन इंस्टेंस को फ़्लैग करता है जहां एपीआई को कॉल करने के लिए, SDK टूल के कम से कम वर्शन का इस्तेमाल नहीं किया गया है.

SDK टूल एक्सटेंशन के नाम और कॉन्स्टेंट

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

SDK टूल के एक्सटेंशन का नाम कॉन्स्टेंट मंज़ूरी दिए गए डिवाइस
R एक्सटेंशन VERSION_CODES.R Android 11 (एपीआई लेवल 30) और उसके बाद के वर्शन
S एक्सटेंशन VERSION_CODES.S Android 12 (एपीआई लेवल 31) और उसके बाद के वर्शन
T एक्सटेंशन VERSION_CODES.TIRAMISU Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन
U एक्सटेंशन VERSION_CODES.UPSIDE_DOWN_CAKE Android 14 (एपीआई लेवल 34) और उसके बाद के वर्शन
V एक्सटेंशन VERSION_CODES.VANILLA_ICE_CREAM Android 15 (एपीआई लेवल 35) और उसके बाद के वर्शन
Ad Services एक्सटेंशन 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) की जानकारी दिखती है.