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

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

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

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

"साथ काम करने" का क्या मतलब है?

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

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

ऐप्लिकेशन डेवलपर के तौर पर, आपको इस बात की चिंता करने की ज़रूरत नहीं है कि कोई डिवाइस 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(36)
        ...
    }
}

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 36
        ...
    }
}

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 इन वैरिएंट को ग्रुप में बांटता है. इससे उन्हें टारगेट करना आसान हो जाता है:

  • चार सामान्य साइज़: छोटा, सामान्य, बड़ा, और बहुत बड़ा
  • कई सामान्य डेंसिटी: एमडीपीआई (मीडियम), एचडीपीआई (हाई), एक्सएचडीपीआई (एक्स्ट्रा हाई), एक्सएक्सएचडीपीआई (एक्स्ट्रा-एक्स्ट्रा हाई), और अन्य

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

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

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

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

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

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

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

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