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

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, अनुमति देने वाले सिस्टम की मदद से, ऐप्लिकेशन के कुछ एपीआई को ऐक्सेस करने पर कैसे पाबंदी लगाता है. इस सिस्टम के तहत, आपके ऐप्लिकेशन को उन एपीआई का इस्तेमाल करने के लिए, उपयोगकर्ता की सहमति लेनी होगी.