डिवाइस पर काम करने से जुड़ी खास जानकारी

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

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

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

"कंपैटिबिलिटी" का क्या मतलब है?

Android डेवलपमेंट के मामले में, दो तरह की संगतता होती है: डिवाइस के साथ काम करने की सुविधा और ऐप्लिकेशन के साथ काम करने की सुविधा.

Android एक ओपन-सोर्स प्रोजेक्ट है. इसलिए, हार्डवेयर बनाने वाली कोई भी कंपनी ऐसा डिवाइस बना सकती है जिस पर Android ऑपरेटिंग सिस्टम काम करता हो. हालांकि, किसी डिवाइस को "Android के साथ काम करने वाला डिवाइस" तब ही कहा जा सकता है, जब वह Android एक्ज़ीक्यूशन एनवायरमेंट के लिए लिखे गए ऐप्लिकेशन को सही तरीके से चला सके. Android के एक्ज़ीक्यूशन एनवायरमेंट के बारे में सटीक जानकारी, Android Compatibility Program में दी गई है. हर डिवाइस को, Compatibility Test Suite (CTS) पास करना होगा, ताकि उसे इस्तेमाल किया जा सके.

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

हालांकि, आपको यह देखना होगा कि आपका ऐप्लिकेशन, डिवाइस के हर संभावित कॉन्फ़िगरेशन के साथ काम करता है या नहीं. Android, अलग-अलग डिवाइस कॉन्फ़िगरेशन पर काम करता है. इसलिए, कुछ सुविधाएँ सभी डिवाइसों पर उपलब्ध नहीं होती हैं. उदाहरण के लिए, हो सकता है कि कुछ डिवाइसों में कंपास सेंसर मौजूद न हो. अगर आपके ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए कंपास सेंसर की ज़रूरत है, तो आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों के साथ काम करेगा जिनमें यह सुविधा शामिल है.

यह कंट्रोल करना कि आपका ऐप्लिकेशन किन डिवाइसों पर उपलब्ध होगा

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

अपने ऐप्लिकेशन के लिए ज़्यादा से ज़्यादा उपयोगकर्ताओं तक पहुंचने के लिए, एक ही APK या AAB का इस्तेमाल करके ज़्यादा से ज़्यादा डिवाइस कॉन्फ़िगरेशन के साथ काम करें. ज़्यादातर मामलों में, ऐसा रनटाइम के दौरान वैकल्पिक सुविधाओं को बंद करके किया जा सकता है. साथ ही, अलग-अलग कॉन्फ़िगरेशन के लिए विकल्पों के साथ ऐप्लिकेशन के संसाधन उपलब्ध कराकर ऐसा किया जा सकता है. जैसे, अलग-अलग स्क्रीन साइज़ के लिए अलग-अलग लेआउट. अगर ज़रूरी हो, तो Google Play Store के ज़रिए अपने ऐप्लिकेशन की उपलब्धता को कुछ डिवाइसों तक सीमित किया जा सकता है. इसके लिए, डिवाइस की इन विशेषताओं का इस्तेमाल किया जा सकता है:

डिवाइस की सुविधाएं

डिवाइस की सुविधाओं के आधार पर, अपने ऐप्लिकेशन की उपलब्धता को मैनेज करने के लिए Android, किसी भी हार्डवेयर या सॉफ़्टवेयर सुविधा के लिए सुविधा आईडी तय करता है. ऐसा इसलिए, ताकि यह पता चल सके कि कौनसी सुविधा सभी डिवाइसों पर उपलब्ध नहीं है. उदाहरण के लिए, कंपास सेंसर के लिए सुविधा आईडी FEATURE_SENSOR_COMPASS है और ऐप्लिकेशन विजेट के लिए सुविधा आईडी FEATURE_APP_WIDGETS है.

अगर ज़रूरी हो, तो लोगों को आपका ऐप्लिकेशन इंस्टॉल करने से रोका जा सकता है. ऐसा तब किया जा सकता है, जब उनके डिवाइसों में ज़रूरी सुविधा मौजूद न हो. इसके लिए, आपको अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में <uses-feature> एलिमेंट का इस्तेमाल करके, सुविधा के बारे में बताना होगा.

उदाहरण के लिए, अगर आपका ऐप्लिकेशन ऐसे डिवाइस पर काम नहीं करता जिसमें कंपास सेंसर नहीं है, तो कंपास सेंसर को ज़रूरी शर्त के तौर पर सेट किया जा सकता है. इसके लिए, मेनिफ़ेस्ट टैग का इस्तेमाल करें:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

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

हालांकि, अगर आपके ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए डिवाइस की किसी सुविधा की ज़रूरत नहीं है, तो required एट्रिब्यूट को "false" पर सेट करें. साथ ही, रनटाइम के दौरान डिवाइस की सुविधा की जांच करें. अगर ऐप्लिकेशन की सुविधा मौजूदा डिवाइस पर उपलब्ध नहीं है, तो ऐप्लिकेशन की उस सुविधा को बंद कर दें. उदाहरण के लिए, यह क्वेरी की जा सकती है कि कोई सुविधा उपलब्ध है या नहीं. इसके लिए, hasSystemFeature() को इस तरह कॉल करें:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

Google Play Store पर अपने ऐप्लिकेशन की उपलब्धता को कंट्रोल करने के लिए इस्तेमाल किए जा सकने वाले सभी फ़िल्टर के बारे में जानने के लिए, Google Play पर फ़िल्टर दस्तावेज़ पढ़ें.

प्लेटफ़ॉर्म वर्शन

अलग-अलग डिवाइसों पर Android प्लैटफ़ॉर्म के अलग-अलग वर्शन चल सकते हैं. जैसे, Android 12 या Android 13. प्लैटफ़ॉर्म के हर नए वर्शन में अक्सर ऐसे एपीआई जोड़े जाते हैं जो पिछले वर्शन में उपलब्ध नहीं होते. यह बताने के लिए कि कौनसे एपीआई उपलब्ध हैं, हर प्लैटफ़ॉर्म वर्शन में एपीआई लेवल तय किया जाता है. उदाहरण के लिए, Android 12 का एपीआई लेवल 31 है और Android 13 का एपीआई लेवल 33 है.

आपको अपनी build.gradle फ़ाइल में, minSdkVersion और targetSdkVersion वैल्यू देनी होंगी:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

Groovy

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

build.gradle फ़ाइल के बारे में ज़्यादा जानने के लिए, अपने बिल्ड को कॉन्फ़िगर करना लेख पढ़ें.

Android के हर नए वर्शन में, पिछले प्लैटफ़ॉर्म वर्शन के एपीआई का इस्तेमाल करके बनाए गए ऐप्लिकेशन के साथ काम करने की सुविधा मिलती है. इसलिए, Android के एपीआई का इस्तेमाल करते समय, आपका ऐप्लिकेशन Android के आने वाले वर्शन के साथ काम करता है.

हालांकि, अगर आपका ऐप्लिकेशन ऐसे एपीआई का इस्तेमाल करता है जो प्लैटफ़ॉर्म के नए वर्शन में जोड़े गए हैं, लेकिन उन्हें ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए ज़रूरी नहीं है, तो रनटाइम के दौरान एपीआई लेवल की जांच करें. साथ ही, एपीआई लेवल बहुत कम होने पर, उससे जुड़ी सुविधाओं को बंद कर दें. इस मामले में, अपने ऐप्लिकेशन की मुख्य सुविधा के लिए minSdkVersion को सबसे कम वैल्यू पर सेट करें. इसके बाद, मौजूदा सिस्टम के वर्शन SDK_INT की तुलना Build.VERSION_CODES में मौजूद कोडनेम कॉन्स्टेंट से करें. यह कोडनेम कॉन्स्टेंट, उस एपीआई लेवल से मेल खाता है जिसकी आपको जांच करनी है. यहां दिए गए उदाहरण में देखें:

Kotlin

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Java

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

स्क्रीन कॉन्फ़िगरेशन

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

  • चार सामान्य साइज़: छोटा, सामान्य, बड़ा, और बहुत बड़ा
  • कई सामान्य डेंसिटी: mdpi (मीडियम), hdpi (हाई), xhdpi (एक्स्ट्रा हाई), xxhdpi (एक्स्ट्रा-एक्स्ट्रा हाई) वगैरह

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

ज़्यादा से ज़्यादा फ़्लेक्सिबल लेआउट का इस्तेमाल करके, उपयोगकर्ता अनुभव को ऑप्टिमाइज़ करें. जहां कॉन्फ़िगरेशन में बड़े बदलावों के लिए लेआउट उपलब्ध हैं, जैसे कि पोर्ट्रेट और लैंडस्केप या बड़ी बनाम छोटी विंडो के साइज़, वहां ऐसे वैकल्पिक लेआउट उपलब्ध कराएं जो कॉन्फ़िगरेशन में छोटे बदलावों के हिसाब से काम कर सकें. इससे टैबलेट, फ़ोन, और फ़ोल्ड किए जा सकने वाले डिवाइसों जैसे फ़ॉर्म फ़ैक्टर पर उपयोगकर्ता अनुभव बेहतर होता है. यह मल्टी-विंडो मोड में, विंडो का साइज़ बदलने पर भी काम करता है.

अलग-अलग स्क्रीन के लिए वैकल्पिक संसाधन बनाने के तरीके के बारे में जानने के लिए, स्क्रीन के साथ काम करने की सुविधा के बारे में खास जानकारी पढ़ें. साथ ही, यह जानने के लिए कि ज़रूरत पड़ने पर, अपने ऐप्लिकेशन को कुछ स्क्रीन साइज़ तक सीमित कैसे करें, बड़ी स्क्रीन वाले ऐप्लिकेशन की क्वालिटी के बारे में दिशा-निर्देश देखें.

कारोबार से जुड़ी वजहों से, अपने ऐप्लिकेशन की उपलब्धता को कंट्रोल करना

डिवाइस की विशेषताओं के आधार पर, ऐप्लिकेशन की उपलब्धता पर पाबंदी लगाने के अलावा, आपको कारोबार या कानूनी वजहों से भी ऐप्लिकेशन की उपलब्धता पर पाबंदी लगानी पड़ सकती है. इस तरह की स्थिति के लिए, Google Play Store, Play Console में फ़िल्टर करने के विकल्प उपलब्ध कराता है. इनकी मदद से, तकनीकी वजहों के अलावा अन्य वजहों से भी ऐप्लिकेशन की उपलब्धता को कंट्रोल किया जा सकता है. जैसे, उपयोगकर्ता की जगह या वायरलेस कैरियर.

तकनीकी तौर पर काम करने की सुविधा के लिए फ़िल्टर करना—जैसे कि ज़रूरी हार्डवेयर कॉम्पोनेंट—हमेशा आपके APK या AAB फ़ाइल में मौजूद जानकारी पर आधारित होता है. हालांकि, तकनीकी वजहों के अलावा अन्य वजहों से फ़िल्टर करने की सुविधा हमेशा Google Play Console में उपलब्ध होती है. जैसे, भौगोलिक स्थान के हिसाब से भाषा.

दूसरे संसाधन:

ऐप्लिकेशन के संसाधनों के बारे में खास जानकारी
Android ऐप्लिकेशन को इस तरह से स्ट्रक्चर किया जाता है कि ऐप्लिकेशन के कोड से ऐप्लिकेशन के संसाधनों को अलग किया जा सके. इसमें यह भी शामिल है कि डिवाइस के खास कॉन्फ़िगरेशन के लिए, वैकल्पिक संसाधन कैसे उपलब्ध कराए जा सकते हैं.
Google Play पर फ़िल्टर
इस बारे में जानकारी कि Google Play Store, आपके ऐप्लिकेशन को अलग-अलग डिवाइसों पर इंस्टॉल होने से कैसे रोक सकता है.
Android पर अनुमतियां
Android, अनुमति देने की प्रणाली के ज़रिए कुछ एपीआई को ऐप्लिकेशन के ऐक्सेस से कैसे रोकता है. इस प्रणाली के तहत, आपके ऐप्लिकेशन को उन एपीआई का इस्तेमाल करने के लिए उपयोगकर्ता की सहमति लेनी होती है.