Android को फ़ोन, टैबलेट, और टीवी जैसे कई अलग-अलग डिवाइसों पर चलाने के लिए डिज़ाइन किया गया है. अलग-अलग डिवाइसों पर आपका ऐप्लिकेशन उपलब्ध होने से, आपको ज़्यादा लोगों तक पहुंचने का मौका मिलता है. सभी डिवाइसों पर आपका ऐप्लिकेशन सही तरीके से काम करे, इसके लिए ज़रूरी है कि वह अलग-अलग सुविधाओं के साथ काम करे. साथ ही, उसमें ऐसा फ़्लेक्सिबल यूज़र इंटरफ़ेस (यूआई) हो जो अलग-अलग स्क्रीन कॉन्फ़िगरेशन के हिसाब से काम करे.
Android, डिवाइस के साथ काम करने की सुविधा देता है. इसके लिए, वह एक डाइनैमिक ऐप्लिकेशन फ़्रेमवर्क उपलब्ध कराता है. इसमें, स्टैटिक फ़ाइलों में कॉन्फ़िगरेशन के हिसाब से ऐप्लिकेशन के संसाधन उपलब्ध कराए जा सकते हैं. जैसे, अलग-अलग स्क्रीन साइज़ के लिए अलग-अलग XML लेआउट. इसके बाद, Android, डिवाइस के मौजूदा कॉन्फ़िगरेशन के हिसाब से सही संसाधन लोड करता है. अपने ऐप्लिकेशन के डिज़ाइन और ऐप्लिकेशन के अन्य संसाधनों के बारे में सोच-समझकर, ऐप्लिकेशन का एक पैकेज (एपीके) पब्लिश किया जा सकता है. इससे अलग-अलग डिवाइसों पर उपयोगकर्ता अनुभव को ऑप्टिमाइज़ किया जा सकता है.
हालांकि, अगर ज़रूरी हो, तो अपने ऐप्लिकेशन की सुविधाओं से जुड़ी ज़रूरी शर्तें तय की जा सकती हैं. साथ ही, यह कंट्रोल किया जा सकता है कि Google Play Store से आपके ऐप्लिकेशन को किस तरह के डिवाइसों पर इंस्टॉल किया जा सकता है. इस दस्तावेज़ में बताया गया है कि किन डिवाइसों पर आपके ऐप्लिकेशन उपलब्ध होंगे. साथ ही, अपने ऐप्लिकेशन को सही लोगों तक पहुंचाने के लिए, उन्हें कैसे तैयार किया जा सकता है.
"कंपैटबिलिटी" का क्या मतलब है?
Android डेवलपमेंट के मामले में, कंपैटबिलिटी दो तरह की होती है: डिवाइस कंपैटबिलिटी और ऐप्लिकेशन कंपैटबिलिटी.
Android एक ओपन-सोर्स प्रोजेक्ट है. इसलिए, कोई भी हार्डवेयर मैन्युफ़ैक्चरर, Android ऑपरेटिंग सिस्टम पर चलने वाला डिवाइस बना सकता है. हालांकि, कोई डिवाइस "Android के साथ काम करने वाला" तब माना जाता है, जब वह Android एक्ज़ीक्यूशन एनवायरमेंट के लिए लिखे गए ऐप्लिकेशन को सही तरीके से चला सके. Android एक्ज़ीक्यूशन एनवायरमेंट की सटीक जानकारी, Android कंपैटबिलिटी प्रोग्राम से तय होती है. किसी डिवाइस को कंपैटिबल मानने के लिए, उसे कंपैटबिलिटी टेस्ट सुइट (सीटीएस) पास करना ज़रूरी है.
ऐप्लिकेशन डेवलपर के तौर पर, आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि कोई डिवाइस Android के साथ काम करता है या नहीं. ऐसा इसलिए, क्योंकि सिर्फ़ Android के साथ काम करने वाले डिवाइसों में Google Play Store मौजूद होता है. इसलिए, अगर कोई उपयोगकर्ता Google Play Store से आपका ऐप्लिकेशन इंस्टॉल करता है, तो वह Android के साथ काम करने वाले डिवाइस का इस्तेमाल कर रहा है.
हालांकि, आपको यह देखना होगा कि आपका ऐप्लिकेशन, डिवाइस के हर संभावित कॉन्फ़िगरेशन के साथ काम करता है या नहीं. Android, डिवाइस के अलग-अलग कॉन्फ़िगरेशन पर काम करता है. इसलिए, कुछ सुविधाएं सभी डिवाइसों पर उपलब्ध नहीं होती हैं. उदाहरण के लिए, हो सकता है कि कुछ डिवाइसों में कंपास सेंसर मौजूद न हो. अगर आपके ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए कंपास सेंसर इस्तेमाल करना ज़रूरी हो, तो आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों पर काम करेगा जिनमें यह सुविधा मौजूद है.
डिवाइसों के लिए अपने ऐप्लिकेशन की उपलब्धता कंट्रोल करना
Android, कई तरह की सुविधाएं उपलब्ध कराता है. प्लैटफ़ॉर्म एपीआई की मदद से, आपका ऐप्लिकेशन इन सुविधाओं का फ़ायदा उठा सकता है. कुछ सुविधाएं हार्डवेयर पर आधारित होती हैं. जैसे, कंपास सेंसर. कुछ सुविधाएं सॉफ़्टवेयर पर आधारित होती हैं. जैसे, ऐप्लिकेशन विजेट. वहीं, कुछ सुविधाएं प्लैटफ़ॉर्म के वर्शन पर निर्भर करती हैं. हर डिवाइस पर हर सुविधा उपलब्ध नहीं होती. इसलिए, आपको अपने ऐप्लिकेशन के लिए ज़रूरी सुविधाओं के आधार पर, डिवाइसों के लिए अपने ऐप्लिकेशन की उपलब्धता कंट्रोल करनी पड़ सकती है.
अपने ऐप्लिकेशन के लिए ज़्यादा से ज़्यादा लोगों तक पहुंचने के लिए, एक एपीके या एएबी का इस्तेमाल करके, डिवाइस के ज़्यादा से ज़्यादा कॉन्फ़िगरेशन के साथ काम करने की सुविधा उपलब्ध कराएं. ज़्यादातर मामलों में, ऐसा रनटाइम पर वैकल्पिक सुविधाओं को बंद करके किया जा सकता है. साथ ही, अलग-अलग कॉन्फ़िगरेशन के लिए ऐप्लिकेशन के संसाधन उपलब्ध कराकर किया जा सकता है. जैसे, अलग-अलग स्क्रीन साइज़ के लिए अलग-अलग लेआउट. अगर ज़रूरी हो, तो 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 इन वैरिएंट को ग्रुप में बांटता है. इससे इन्हें टारगेट करना आसान हो जाता है:
- सामान्य तौर पर चार साइज़: छोटा, सामान्य, बड़ा, और xlarge
- सामान्य तौर पर कई डेंसिटी: mdpi (मीडियम), hdpi (हाई), xhdpi (एक्स्ट्रा हाई), xxhdpi (एक्स्ट्रा-एक्स्ट्रा हाई) वगैरह
डिफ़ॉल्ट रूप से, आपका ऐप्लिकेशन सभी स्क्रीन साइज़ और डेंसिटी के साथ काम करता है. ऐसा इसलिए, क्योंकि सिस्टम, हर स्क्रीन के लिए आपके यूज़र इंटरफ़ेस (यूआई) लेआउट और इमेज संसाधनों में ज़रूरत के हिसाब से बदलाव करता है. स्क्रीन की सामान्य डेंसिटी के लिए, ऑप्टिमाइज़ की गई बिटमैप इमेज उपलब्ध कराएं.
फ़्लेक्सिबल लेआउट का ज़्यादा से ज़्यादा इस्तेमाल करके, उपयोगकर्ता अनुभव को ऑप्टिमाइज़ करें. अगर बड़े कॉन्फ़िगरेशन में बदलाव के लिए लेआउट मौजूद हैं, जैसे कि पोर्ट्रेट और लैंडस्केप या बड़ी और छोटी विंडो साइज़, तो ऐसे वैकल्पिक लेआउट उपलब्ध कराएं जो कॉन्फ़िगरेशन में छोटे बदलावों के हिसाब से फ़्लेक्सिबल हों. इससे टैबलेट, फ़ोन, और फ़ोल्डेबल जैसे फ़ॉर्म फ़ैक्टर पर उपयोगकर्ता अनुभव बेहतर होता है. मल्टी-विंडो मोड में विंडो का साइज़ बदलने पर भी यह काम आता है.
अलग-अलग स्क्रीन के लिए वैकल्पिक संसाधन बनाने के तरीके के बारे में जानने के लिए, स्क्रीन कंपैटबिलिटी की खास जानकारी पढ़ें. साथ ही, बड़ी स्क्रीन वाले ऐप्लिकेशन की क्वालिटी से जुड़ी गाइडलाइन देखें. इसके अलावा, अगर ज़रूरी हो, तो अपने ऐप्लिकेशन को स्क्रीन के कुछ साइज़ तक सीमित करने के तरीके के बारे में भी जानें.
कारोबार से जुड़ी वजहों से, अपने ऐप्लिकेशन की उपलब्धता कंट्रोल करना
डिवाइस की विशेषताओं के आधार पर, अपने ऐप्लिकेशन की उपलब्धता को सीमित करने के अलावा, आपको कारोबार या कानूनी वजहों से भी अपने ऐप्लिकेशन की उपलब्धता को सीमित करना पड़ सकता है. इस तरह की स्थिति के लिए, Google Play Store, Play Console में फ़िल्टर करने के विकल्प उपलब्ध कराता है. इनकी मदद से, गैर-तकनीकी वजहों से अपने ऐप्लिकेशन की उपलब्धता को कंट्रोल किया जा सकता है. जैसे, उपयोगकर्ता का इलाका या वायरलेस कैरियर.
तकनीकी कंपैटबिलिटी के लिए फ़िल्टर करना—जैसे, ज़रूरी हार्डवेयर कॉम्पोनेंट—हमेशा आपके एपीके या एएबी फ़ाइल में मौजूद जानकारी के आधार पर किया जाता है. हालांकि, गैर-तकनीकी वजहों से फ़िल्टर करना—जैसे, भौगोलिक इलाका—हमेशा Google Play Consoleमें किया जाता है.
दूसरे संसाधन:
- ऐप्लिकेशन के संसाधनों की खास जानकारी
- इस बारे में जानकारी कि Android ऐप्लिकेशन को किस तरह से स्ट्रक्चर किया जाता है, ताकि ऐप्लिकेशन के संसाधनों को ऐप्लिकेशन के कोड से अलग रखा जा सके. इसमें यह भी शामिल है कि डिवाइस के खास कॉन्फ़िगरेशन के लिए, वैकल्पिक संसाधन कैसे उपलब्ध कराए जा सकते हैं.
- Google Play के लिए फ़िल्टर
- इस बारे में जानकारी कि Google Play Store, अलग-अलग डिवाइसों पर आपका ऐप्लिकेशन इंस्टॉल होने से कैसे रोक सकता है.
- Android पर अनुमतियां
- Android, अनुमति सिस्टम की मदद से, कुछ एपीआई को ऐक्सेस करने से ऐप्लिकेशन को कैसे रोकता है इस सिस्टम के तहत, आपके ऐप्लिकेशन को उन एपीआई का इस्तेमाल करने के लिए, उपयोगकर्ता की सहमति की ज़रूरत होती है.