<इस्तेमाल-सुविधा>

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

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

Google Play, फ़िल्टर करने के लिए सुविधाओं का इस्तेमाल कैसे करता है, इस बारे में अहम जानकारी पाने के लिए Google Play और सुविधा के हिसाब से फ़िल्टर करना सेक्शन देखें.

सिंटैक्स:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
इनमें शामिल है:
<manifest>
जानकारी:

ऐप्लिकेशन में इस्तेमाल होने वाले किसी एक हार्डवेयर या सॉफ़्टवेयर की सुविधा के बारे में बताता है.

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

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

आपके ऐप्लिकेशन में उपलब्ध सुविधाओं का सेट, Android PackageManager के ज़रिए उपलब्ध कराई गई सुविधाओं के कॉन्स्टेंट के सेट से मेल खाता है. सुविधा के कॉन्स्टेंट, इस दस्तावेज़ के सुविधाओं के रेफ़रंस सेक्शन में दिए गए हैं.

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

<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.camera.any" android:required="true" />

आम तौर पर, अपने ऐप्लिकेशन में मौजूद सभी ज़रूरी सुविधाओं के लिए, <uses-feature> एलिमेंट का इस्तेमाल हमेशा करें.

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

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

कुछ सुविधाओं के लिए, ऐसा हो सकता है कि कोई खास एट्रिब्यूट मौजूद हो. इसकी मदद से, सुविधा के वर्शन की जानकारी दी जा सकती है. जैसे, इस्तेमाल किए गए Open GL वर्शन की जानकारी (glEsVersion के साथ एलान की गई). कैमरे जैसे किसी डिवाइस के लिए मौजूद या मौजूद न होने वाली अन्य सुविधाओं की जानकारी, name एट्रिब्यूट का इस्तेमाल करके दी जाती है.

<uses-feature> एलिमेंट सिर्फ़ एपीआई लेवल 4 या उसके बाद के वर्शन पर काम करने वाले डिवाइसों के लिए चालू होता है. हालांकि, इन एलिमेंट को सभी ऐप्लिकेशन के लिए शामिल करें. भले ही, minSdkVersion का लेवल 3 या उससे कम हो. प्लैटफ़ॉर्म के पुराने वर्शन वाले डिवाइस, एलिमेंट को अनदेखा करते हैं.

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

एट्रिब्यूट:
android:name
यह किसी एक हार्डवेयर या सॉफ़्टवेयर की सुविधा के बारे में बताता है. ऐप्लिकेशन, इस सुविधा का इस्तेमाल डिस्क्रिप्टर स्ट्रिंग के तौर पर करता है. एट्रिब्यूट की मान्य वैल्यू, हार्डवेयर की सुविधाएं और सॉफ़्टवेयर की सुविधाएं सेक्शन में दी गई हैं. इन एट्रिब्यूट की वैल्यू, केस-सेंसिटिव होती हैं.
android:required
बूलियन वैल्यू, जो बताती है कि ऐप्लिकेशन को android:name में बताई गई सुविधा की ज़रूरत है या नहीं.
  • किसी सुविधा के लिए android:required="true" का एलान करने का मतलब है कि डिवाइस पर बताई गई सुविधा मौजूद न होने पर, ऐप्लिकेशन काम नहीं कर सकता या उसे काम करने के लिए डिज़ाइन नहीं किया गया है.
  • किसी सुविधा के लिए android:required="false" एट्रिब्यूट का एलान करने का मतलब है कि ऐप्लिकेशन, डिवाइस पर मौजूद होने पर उस सुविधा का इस्तेमाल करता है. हालांकि, ज़रूरत पड़ने पर, उसे तय की गई सुविधा के बिना काम करने के लिए डिज़ाइन किया गया है.

android:required की डिफ़ॉल्ट वैल्यू "true" है.

android:glEsVersion
ऐप्लिकेशन के लिए ज़रूरी OpenGL ES वर्शन. ऊपर के 16 बिट, मेजर नंबर दिखाते हैं और नीचे के 16 बिट, माइनर नंबर दिखाते हैं. उदाहरण के लिए, OpenGL ES के वर्शन 2.0 की जानकारी देने के लिए, वैल्यू को "0x00020000" पर सेट करें. इसके अलावा, OpenGL ES 3.2 की जानकारी देने के लिए, वैल्यू को "0x00030002" पर सेट करें.

कोई ऐप्लिकेशन अपने मेनिफ़ेस्ट में ज़्यादा से ज़्यादा एक android:glEsVersion एट्रिब्यूट तय करता है. अगर एक से ज़्यादा वैल्यू दी गई हैं, तो सबसे बड़ी संख्या वाली android:glEsVersion का इस्तेमाल किया जाता है और बाकी सभी वैल्यू को अनदेखा कर दिया जाता है.

अगर किसी ऐप्लिकेशन में android:glEsVersion एट्रिब्यूट की जानकारी नहीं दी गई है, तो यह माना जाता है कि ऐप्लिकेशन को सिर्फ़ OpenGL ES 1.0 की ज़रूरत है. यह वर्शन, Android वाले सभी डिवाइसों पर काम करता है.

कोई ऐप्लिकेशन यह मान सकता है कि अगर कोई प्लैटफ़ॉर्म किसी OpenGL ES वर्शन के साथ काम करता है, तो वह संख्या के हिसाब से उससे पहले के सभी OpenGL ES वर्शन के साथ भी काम करता है. इसलिए, ऐसे ऐप्लिकेशन के लिए, बताएं कि उसे OpenGL ES 1.0 और OpenGL ES 2.0, दोनों वर्शन की ज़रूरत है.

अगर कोई ऐप्लिकेशन, OpenGL ES के कई वर्शन के साथ काम कर सकता है, तो ऐप्लिकेशन के लिए ज़रूरी OpenGL ES के सबसे पुराने वर्शन की जानकारी दें. यह रनटाइम के दौरान यह जांच सकता है कि OpenGL ES का कोई ज़्यादा लेवल उपलब्ध है या नहीं.

OpenGL ES का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, OpenGL ES API की गाइड देखें. इसमें, रनटाइम के दौरान काम करने वाले OpenGL ES वर्शन की जांच करने का तरीका भी बताया गया है.

पहली बार इसमें दिखाया गया:
एपीआई लेवल 4
यह भी देखें:

Google Play और सुविधा के हिसाब से फ़िल्टर करना

Google Play, उपयोगकर्ताओं को दिखने वाले ऐप्लिकेशन को फ़िल्टर करता है, ताकि उपयोगकर्ता सिर्फ़ उन ऐप्लिकेशन को देख और डाउनलोड कर सकें जो उनके डिवाइस के साथ काम करते हैं. ऐप्लिकेशन को फ़िल्टर करने का एक तरीका यह है कि वे सुविधाओं के साथ काम करते हैं या नहीं.

किसी उपयोगकर्ता के डिवाइस पर ऐप्लिकेशन की सुविधाएं काम करेंगी या नहीं, यह तय करने के लिए Google Play इनकी तुलना करता है:

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

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

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

जब भी Google Play Console पर कोई ऐप्लिकेशन अपलोड किया जाता है, तो Google Play उस ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल को स्कैन करता है. यह <uses-feature> एलिमेंट ढूंढता है और कुछ मामलों में, <uses-sdk> और <uses-permission> एलिमेंट जैसे अन्य एलिमेंट के साथ उनका आकलन करता है. ऐप्लिकेशन के लिए ज़रूरी सुविधाओं का सेट तय करने के बाद, यह सूची को ऐप्लिकेशन के APK और ऐप्लिकेशन के वर्शन से जुड़े मेटाडेटा के तौर पर अंदरूनी तौर पर सेव करती है.

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

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

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

साफ़ तौर पर बताई गई सुविधाओं के आधार पर फ़िल्टर करना

साफ़ तौर पर बताई गई सुविधा वह होती है जिसके बारे में आपके ऐप्लिकेशन में <uses-feature> एलिमेंट में बताया गया हो. अगर एपीआई लेवल 5 या उसके बाद के वर्शन के लिए कॉम्पाइल किया जा रहा है, तो सुविधा के एलान में android:required=["true" | "false"] एट्रिब्यूट शामिल किया जा सकता है.

इससे यह तय किया जा सकता है कि ऐप्लिकेशन को इस सुविधा की ज़रूरत है या नहीं. साथ ही, यह भी तय किया जा सकता है कि इस सुविधा के बिना ऐप्लिकेशन ठीक से काम कर सकता है या नहीं ("true"). इसके अलावा, यह भी तय किया जा सकता है कि ऐप्लिकेशन में यह सुविधा उपलब्ध होने पर उसका इस्तेमाल किया जाता है या नहीं, लेकिन इसे इस सुविधा के बिना भी चलाया जा सकता है ("false").

Google Play, साफ़ तौर पर बताई गई सुविधाओं को इस तरह मैनेज करता है:

  • अगर किसी सुविधा को साफ़ तौर पर ज़रूरी बताया गया है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है, तो Google Play उस सुविधा को ऐप्लिकेशन के लिए ज़रूरी सुविधाओं की सूची में जोड़ देता है. इसके बाद, यह उन डिवाइसों पर उपयोगकर्ताओं से ऐप्लिकेशन को फ़िल्टर कर देता है जिन पर यह सुविधा उपलब्ध नहीं है.
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
  • अगर किसी सुविधा के लिए साफ़ तौर पर यह बताया गया है कि वह ज़रूरी नहीं है, तो Google Play उस सुविधा को ज़रूरी सुविधाओं की सूची में नहीं जोड़ता. उदाहरण के लिए, यहां दिया गया उदाहरण देखें. इसलिए, ऐप्लिकेशन को फ़िल्टर करते समय, साफ़ तौर पर बताई गई ऐसी सुविधा को कभी भी ध्यान में नहीं रखा जाता जो ज़रूरी नहीं है. भले ही, डिवाइस में बताई गई सुविधा उपलब्ध न हो, तब भी Google Play ऐप्लिकेशन को डिवाइस के साथ काम करने वाला मानता है और उसे उपयोगकर्ता को दिखाता है. ऐसा तब तक होता है, जब तक फ़िल्टर करने के अन्य नियम लागू न हो जाएं.
    <uses-feature android:name="android.hardware.camera" android:required="false" />
  • अगर किसी फ़ीचर के बारे में साफ़ तौर पर बताया गया है, लेकिन उसमें android:required एट्रिब्यूट नहीं है, तो Google Play यह मान लेता है कि उस फ़ीचर की ज़रूरत है. साथ ही, उस पर फ़िल्टर करने की सुविधा सेट अप कर देता है.

आम तौर पर, अगर आपके ऐप्लिकेशन को Android 1.6 और उससे पहले के वर्शन पर चलाने के लिए डिज़ाइन किया गया है, तो एपीआई में android:required एट्रिब्यूट उपलब्ध नहीं होता. साथ ही, Google Play यह मान लेता है कि सभी android:required एट्रिब्यूट की जानकारी देना ज़रूरी है.<uses-feature>

ध्यान दें: किसी सुविधा के बारे में साफ़ तौर पर बताकर और android:required="false" एट्रिब्यूट को शामिल करके, उस सुविधा के लिए Google Play पर फ़िल्टर करने की सभी सुविधाओं को बंद किया जा सकता है.

इन-ऐप्लिकेशन सुविधाओं के हिसाब से फ़िल्टर करना

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

हालांकि, उपयोगकर्ताओं और डेवलपर को सुरक्षित रखने के लिए, Google Play हर ऐप्लिकेशन में छिपी हुई सुविधाओं को ढूंढता है और उन सुविधाओं के लिए फ़िल्टर सेट अप करता है. यह ठीक वैसा ही होता है जैसे साफ़ तौर पर बताई गई सुविधाओं के लिए किया जाता है.

किसी ऐप्लिकेशन को किसी सुविधा की ज़रूरत हो सकती है, लेकिन इन वजहों से उसका एलान न किया गया हो:

  • ऐप्लिकेशन को Android लाइब्रेरी के पुराने वर्शन (Android 1.5 या उससे पहले के वर्शन) के लिए कंपाइल किया गया था. इसके लिए, <uses-feature> एलिमेंट उपलब्ध नहीं है.
  • डेवलपर यह गलत मानता है कि यह सुविधा सभी डिवाइसों पर मौजूद है और एलान करना ज़रूरी नहीं है.
  • डेवलपर ने सुविधा के एलान को गलती से शामिल नहीं किया है.
  • डेवलपर ने सुविधा का साफ़ तौर पर एलान किया है, लेकिन एलान अमान्य है. उदाहरण के लिए, <uses-feature> एलिमेंट के नाम में स्पेलिंग की गड़बड़ी या android:name एट्रिब्यूट के लिए ऐसी स्ट्रिंग वैल्यू जो पहचानी न जा सके, तो सुविधा के एलान को अमान्य कर दिया जाता है.

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

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

उदाहरण के लिए, अगर कोई ऐप्लिकेशन CAMERA अनुमति का अनुरोध करता है, तो Google Play यह मान लेता है कि ऐप्लिकेशन को पीछे (सामान्य) कैमरे की ज़रूरत है. भले ही, ऐप्लिकेशन ने android.hardware.camera के लिए <uses-feature> एलिमेंट का एलान न किया हो. इस वजह से, Google Play उन डिवाइसों को फ़िल्टर करता है जिनमें पीछे का कैमरा नहीं है.

अगर आपको Google Play को किसी खास सुविधा के आधार पर फ़िल्टर नहीं करना है, तो <uses-feature> एलिमेंट में उस सुविधा के बारे में साफ़ तौर पर बताएं और android:required="false" एट्रिब्यूट शामिल करें. उदाहरण के लिए, CAMERA अनुमति से जुड़ी फ़िल्टर करने की सुविधा बंद करने के लिए, इन सुविधाओं का एलान करें:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

चेतावनी: <uses-permission> एलिमेंट में अनुमतियों का अनुरोध करने पर, Google Play आपके ऐप्लिकेशन को फ़िल्टर करने के तरीके पर सीधे तौर पर असर डाल सकता है. ऐसी अनुमतियां जिनसे सुविधा की ज़रूरी शर्तों का पता चलता है सेक्शन में, उन अनुमतियों का पूरा सेट शामिल होता है जिनसे सुविधा की ज़रूरी शर्तों का पता चलता है और इसलिए, फ़िल्टर करने की सुविधा चालू होती है.

ब्लूटूथ की सुविधा के लिए खास हैंडलिंग

ब्लूटूथ के लिए फ़िल्टर तय करते समय, Google Play ऊपर दिए गए उदाहरण में बताए गए नियमों से थोड़े अलग नियम लागू करता है.

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

नीचे दी गई टेबल में दिखाया गया है कि Google Play, ब्लूटूथ की सुविधा के लिए फ़िल्टर करने की सुविधा सिर्फ़ तब चालू करता है, जब ऐप्लिकेशन में सबसे कम या टारगेट किए गए प्लैटफ़ॉर्म के तौर पर Android 2.0 (एपीआई लेवल 5) या उसके बाद के वर्शन का एलान किया गया हो. हालांकि, ध्यान दें कि जब ऐप्लिकेशन में <uses-feature> एलिमेंट में Bluetooth की सुविधा के बारे में साफ़ तौर पर बताया जाता है, तो Google Play फ़िल्टर करने के सामान्य नियम लागू करता है.

टेबल 1. Google Play, ब्लूटूथ की अनुमति का अनुरोध करने वाले ऐसे ऐप्लिकेशन के लिए, ब्लूटूथ की सुविधा की ज़रूरत का पता कैसे लगाता है जो <uses-feature> एलिमेंट में ब्लूटूथ की सुविधा का एलान नहीं करता.

अगर minSdkVersion ...है, तो और targetSdkVersion नतीजा
<=4 या <uses-sdk> का एलान नहीं किया गया है <=4 Google Play, android.hardware.bluetooth सुविधा के साथ काम करने की जानकारी के आधार पर, किसी भी डिवाइस से ऐप्लिकेशन को फ़िल्टर नहीं करता.
<=4 >=5 Google Play, ऐप्लिकेशन को उन सभी डिवाइसों से फ़िल्टर कर देता है जिन पर android.hardware.bluetooth सुविधा काम नहीं करती. इनमें पुराने वर्शन भी शामिल हैं.
>=5 >=5

नीचे दिए गए उदाहरणों में, फ़िल्टर करने के अलग-अलग असर दिखाए गए हैं. ये असर इस बात पर निर्भर करते हैं कि Google Play, ब्लूटूथ की सुविधा को कैसे मैनेज करता है.

पहले उदाहरण में, पुराने एपीआई लेवल पर चलने के लिए डिज़ाइन किया गया ऐप्लिकेशन, ब्लूटूथ की अनुमति का एलान करता है. हालांकि, वह <uses-feature> एलिमेंट में ब्लूटूथ की सुविधा का एलान नहीं करता.
नतीजा: Google Play, किसी भी डिवाइस से ऐप्लिकेशन को फ़िल्टर नहीं करता.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
दूसरे उदाहरण में, उसी ऐप्लिकेशन ने "5" के टारगेट एपीआई लेवल का भी एलान किया है.
नतीजा: Google Play अब मानता है कि इस सुविधा का होना ज़रूरी है. साथ ही, वह उन सभी डिवाइसों से ऐप्लिकेशन को फ़िल्टर कर देता है जिनमें ब्लूटूथ की सुविधा काम नहीं करती. इनमें, प्लैटफ़ॉर्म के पुराने वर्शन वाले डिवाइस भी शामिल हैं.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
यहां, उसी ऐप्लिकेशन में अब ब्लूटूथ की सुविधा के बारे में खास तौर पर बताया गया है.
नतीजा: यह पिछले उदाहरण जैसा ही है: फ़िल्टर लागू किया गया है.
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
आखिर में, नीचे दिए गए मामले में, वही ऐप्लिकेशन एक android:required="false" एट्रिब्यूट जोड़ता है.
नतीजा: Google Play, सभी डिवाइसों के लिए ब्लूटूथ की सुविधा के आधार पर फ़िल्टर करने की सुविधा बंद कर देता है.
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" android:required="false" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>

अपने ऐप्लिकेशन के लिए ज़रूरी सुविधाओं की जांच करना

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

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

  1. अपने ऐप्लिकेशन को बिना हस्ताक्षर वाले APK के तौर पर बनाएं और एक्सपोर्ट करें. अगर Android Studio में डेवलप किया जा रहा है, तो Gradle की मदद से अपना ऐप्लिकेशन इस तरह बनाएं:
    1. प्रोजेक्ट खोलें और रन करें > कॉन्फ़िगरेशन में बदलाव करें को चुनें.
    2. रन/डीबग कॉन्फ़िगरेशन विंडो के सबसे ऊपर बाएं कोने में मौजूद, प्लस साइन को चुनें.
    3. Gradle चुनें.
    4. नाम में "बिना हस्ताक्षर वाला APK" डालें.
    5. Gradle प्रोजेक्ट सेक्शन में जाकर, अपना मॉड्यूल चुनें.
    6. Tasks में "assemble" डालें.
    7. नया कॉन्फ़िगरेशन पूरा करने के लिए, ठीक है को चुनें.
    8. पक्का करें कि टूलबार में, बिना हस्ताक्षर वाला APK रन कॉन्फ़िगरेशन चुना गया हो. इसके बाद, रन करें > 'बिना हस्ताक्षर वाला APK' चलाएं को चुनें.
    आपको बिना हस्ताक्षर वाला APK, <ProjectName>/app/build/outputs/apk/ डायरेक्ट्री में मिल सकता है.
  2. अगर aapt2 टूल पहले से आपके PATH में नहीं है, तो उसे ढूंढें. अगर SDK टूल के r8 या उसके बाद के वर्शन का इस्तेमाल किया जा रहा है, तो आपको aapt2, <SDK>/build-tools/<tools version number> डायरेक्ट्री में दिखेगा.

    ध्यान दें: आपको aapt2 के उस वर्शन का इस्तेमाल करना होगा जो उपलब्ध सबसे नए Build-Tools कॉम्पोनेंट के लिए दिया गया है. अगर आपके पास सबसे नया Build-Tools कॉम्पोनेंट नहीं है, तो Android SDK Manager का इस्तेमाल करके इसे डाउनलोड करें.

  3. इस सिंटैक्स का इस्तेमाल करके aapt2 चलाएं:
$ aapt2 dump badging <path_to_exported_.apk>

यहां पहले दिखाए गए दूसरे ब्लूटूथ उदाहरण के लिए, निर्देश के आउटपुट का एक उदाहरण दिया गया है:

$ ./aapt2 dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''
uses-permission:'android.permission.BLUETOOTH_ADMIN'
uses-feature:'android.hardware.bluetooth'
sdkVersion:'3'
targetSdkVersion:'5'
application: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name='com.example.android.btexample.MyActivity'label='' icon=''
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large'
locales: '--_--'
densities: '160'

सुविधाओं का रेफ़रंस

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

हार्डवेयर की सुविधाएं

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

ऑडियो हार्डवेयर की सुविधाएं

android.hardware.audio.low_latency
यह ऐप्लिकेशन, डिवाइस की कम इंतज़ार वाली ऑडियो पाइपलाइन का इस्तेमाल करता है. इससे, आवाज़ के इनपुट या आउटपुट को प्रोसेस करने में लगने वाला समय कम हो जाता है.
android.hardware.audio.output
ऐप्लिकेशन, डिवाइस के स्पीकर, ऑडियो जैक, ब्लूटूथ स्ट्रीमिंग की सुविधाओं या किसी मिलते-जुलते तरीके का इस्तेमाल करके आवाज़ भेजता है.
android.hardware.audio.pro
ऐप्लिकेशन, डिवाइस के बेहतर ऑडियो फ़ंक्शन और परफ़ॉर्मेंस की सुविधाओं का इस्तेमाल करता है.
android.hardware.microphone
यह ऐप्लिकेशन, डिवाइस के माइक्रोफ़ोन का इस्तेमाल करके ऑडियो रिकॉर्ड करता है.

ब्लूटूथ हार्डवेयर की सुविधाएं

android.hardware.bluetooth
यह ऐप्लिकेशन, डिवाइस की ब्लूटूथ सुविधाओं का इस्तेमाल करता है. आम तौर पर, ऐसा ब्लूटूथ की सुविधा वाले दूसरे डिवाइसों से संपर्क करने के लिए किया जाता है.
android.hardware.bluetooth_le
यह ऐप्लिकेशन, डिवाइस के ब्लूटूथ कम ऊर्जा रेडियो की सुविधाओं का इस्तेमाल करता है.

कैमरे के हार्डवेयर की सुविधाएं

ध्यान दें: Google Play पर अपने ऐप्लिकेशन को ग़ैर-ज़रूरी तौर पर फ़िल्टर होने से बचाने के लिए, कैमरे की ऐसी सुविधा के लिए android:required="false" जोड़ें जिसकी ज़रूरत आपके ऐप्लिकेशन को नहीं है. ऐसा न करने पर, Google Play यह मान लेता है कि इस सुविधा की ज़रूरत है. साथ ही, इस सुविधा के साथ काम न करने वाले डिवाइसों को आपके ऐप्लिकेशन को ऐक्सेस करने से रोक देता है.

बड़ी स्क्रीन पर काम करने की सुविधा

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

कैमरे की बुनियादी सुविधाएं उपलब्ध कराने और अपने ऐप्लिकेशन को ज़्यादा से ज़्यादा डिवाइसों के लिए उपलब्ध कराने के लिए, अपने ऐप्लिकेशन के मेनिफ़ेस्ट में कैमरे की सुविधा की ये सेटिंग जोड़ें:

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />

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

सुविधाओं की सूची
android.hardware.camera.any

ऐप्लिकेशन, डिवाइस के किसी कैमरे या डिवाइस से कनेक्ट किए गए किसी बाहरी कैमरे का इस्तेमाल करता है. अगर आपके ऐप्लिकेशन के लिए, कैमरे को पीछे (दुनिया) या सामने (उपयोगकर्ता) की ओर देखने की ज़रूरत नहीं है, तो android.hardware.camera या android.hardware.camera.front के बजाय इस सुविधा का इस्तेमाल करें.

CAMERA अनुमति का मतलब है कि आपका ऐप्लिकेशन android.hardware.camera का भी इस्तेमाल करता है. पीछे का कैमरा होना ज़रूरी है, बशर्ते android.hardware.camera के साथ android:required="false" का इस्तेमाल न किया गया हो.

android.hardware.camera

ऐप्लिकेशन, डिवाइस के पीछे (सामने की ओर) लगे कैमरे का इस्तेमाल करता है.

चेतावनी: Chromebook जैसे डिवाइसों पर, सिर्फ़ सामने वाला (उपयोगकर्ता के सामने वाला) कैमरा होने पर, यह सुविधा काम नहीं करती. अगर आपका ऐप्लिकेशन किसी भी कैमरे का इस्तेमाल कर सकता है, तो android.hardware.camera.any का इस्तेमाल करें. इससे कोई फ़र्क़ नहीं पड़ता कि कैमरा किस दिशा में है.

ध्यान दें: CAMERA अनुमति का मतलब है कि बैक कैमरा होना ज़रूरी है. अगर आपके ऐप्लिकेशन के मेनिफ़ेस्ट में CAMERA अनुमति शामिल है, तो Google Play पर सही फ़िल्टरिंग की सुविधा पाने के लिए, साफ़ तौर पर बताएं कि आपका ऐप्लिकेशन camera सुविधा का इस्तेमाल करता है. साथ ही, यह भी बताएं कि यह सुविधा ज़रूरी है या नहीं. जैसे:
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

ऐप्लिकेशन, डिवाइस के सामने वाले कैमरे का इस्तेमाल करता है.

CAMERA अनुमति का मतलब है कि आपका ऐप्लिकेशन android.hardware.camera का भी इस्तेमाल करता है. पीछे का कैमरा होना ज़रूरी है, बशर्ते android.hardware.camera के साथ android:required="false" का इस्तेमाल न किया गया हो.

चेतावनी: अगर आपका ऐप्लिकेशन android.hardware.camera.front का इस्तेमाल करता है, लेकिन android.required="false" के साथ android.hardware.camera का साफ़ तौर पर एलान नहीं करता है, तो Google Play उन डिवाइसों को फ़िल्टर कर देता है जिनमें बैक कैमरा नहीं है. जैसे, Chromebook. अगर आपका ऐप्लिकेशन सिर्फ़ फ़्रंट कैमरे वाले डिवाइसों पर काम करता है, तो android.hardware.camera के साथ android.required="false" का इस्तेमाल करके, ऐप्लिकेशन को ग़ैर-ज़रूरी फ़िल्टरिंग से बचाएं.

android.hardware.camera.external

ऐप्लिकेशन, डिवाइस से कनेक्ट किए गए किसी बाहरी कैमरे से संपर्क करता है. इस सुविधा से यह गारंटी नहीं मिलती कि आपके ऐप्लिकेशन के इस्तेमाल के लिए, बाहरी कैमरा उपलब्ध है.

CAMERA अनुमति का मतलब है कि आपका ऐप्लिकेशन android.hardware.camera का भी इस्तेमाल करता है. पीछे का कैमरा होना ज़रूरी है, बशर्ते android.hardware.camera के साथ android:required="false" का इस्तेमाल न किया गया हो.

android.hardware.camera.autofocus

यह ऐप्लिकेशन, डिवाइस के कैमरे में मौजूद ऑटोफ़ोकस की सुविधा का इस्तेमाल करता है.

ध्यान दें: CAMERA की अनुमति का मतलब है कि ऑटोफ़ोकस की सुविधा ज़रूरी है. अगर आपके ऐप्लिकेशन के मेनिफ़ेस्ट में CAMERA अनुमति शामिल है, तो Google Play पर सही तरीके से फ़िल्टर करने के लिए, साफ़ तौर पर बताएं कि आपका ऐप्लिकेशन ऑटोफ़ोकस की सुविधा का इस्तेमाल करता है. साथ ही, यह भी बताएं कि इसकी ज़रूरत है या नहीं. जैसे:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />.

android.hardware.camera.flash

यह ऐप्लिकेशन, डिवाइस के कैमरे में मौजूद फ़्लैश की सुविधा का इस्तेमाल करता है.

android.hardware.camera.capability.manual_post_processing

ऐप्लिकेशन, डिवाइस के कैमरे पर काम करने वाली MANUAL_POST_PROCESSING सुविधा का इस्तेमाल करता है.

इस सुविधा की मदद से, आपका ऐप्लिकेशन कैमरे के अपने-आप वाइट बैलेंस करने की सुविधा को बदल सकता है. android.colorCorrection.transform, android.colorCorrection.gains, और TRANSFORM_MATRIX में से android.colorCorrection.mode का इस्तेमाल करें.

android.hardware.camera.capability.manual_sensor

ऐप्लिकेशन, डिवाइस के कैमरे पर काम करने वाली MANUAL_SENSOR सुविधा का इस्तेमाल करता है.

इस सुविधा का मतलब है कि ऑटो एक्सपोज़र लॉकिंग (android.control.aeLock) की सुविधा काम करती है. इससे कैमरे के एक्सपोज़र समय और संवेदनशीलता को तय वैल्यू पर सेट किया जा सकता है.

android.hardware.camera.capability.raw

ऐप्लिकेशन, डिवाइस के कैमरे पर काम करने वाली RAW सुविधा का इस्तेमाल करता है.

इस सुविधा का मतलब है कि डिवाइस में डीएनजी (रॉ) फ़ाइलें सेव की जा सकती हैं. डिवाइस का कैमरा, DNG से जुड़ा मेटाडेटा उपलब्ध कराता है. यह मेटाडेटा, आपके ऐप्लिकेशन के लिए ज़रूरी होता है, ताकि वह सीधे तौर पर रॉ इमेज को प्रोसेस कर सके.

android.hardware.camera.level.full
यह ऐप्लिकेशन, डिवाइस के कम से कम एक कैमरे से ली गई इमेज के लिए, FULL लेवल की इमेज कैप्चर करने की सुविधा का इस्तेमाल करता है. FULL के साथ ये सुविधाएं काम करती हैं: बर्स्ट मोड में फ़ोटो खींचने की सुविधा, हर फ़्रेम को कंट्रोल करने की सुविधा, और पोस्ट-प्रोसेसिंग को मैन्युअल तरीके से कंट्रोल करने की सुविधा. INFO_SUPPORTED_HARDWARE_LEVEL_FULL देखें.

डिवाइस के यूज़र इंटरफ़ेस (यूआई) की हार्डवेयर सुविधाएं

android.hardware.type.automotive

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

ध्यान दें: इस सुविधा के इस्तेमाल और कार के लिए ऐप्लिकेशन बनाने के दिशा-निर्देशों के बारे में ज़्यादा जानकारी के लिए, कार में डिस्ट्रिब्यूट करें देखें.

android.hardware.type.television

(इस्तेमाल नहीं किया जा सकता. इसके बजाय, android.software.leanback का इस्तेमाल करें.)

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

android.hardware.type.watch
ऐप्लिकेशन को स्मार्टवॉच पर यूज़र इंटरफ़ेस (यूआई) दिखाने के लिए डिज़ाइन किया गया है. स्मार्टवॉच को शरीर पर पहना जाता है, जैसे कि कलाई पर. उपयोगकर्ता, डिवाइस से इंटरैक्ट करते समय उसके बहुत करीब है.
android.hardware.type.pc

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

ध्यान दें: इस एलिमेंट के लिए required="false" सेट करें. ऐसा न करने पर, Google Play Store आपके ऐप्लिकेशन को Chromebook के अलावा अन्य डिवाइसों के लिए उपलब्ध नहीं कराएगा.

फ़िंगरप्रिंट हार्डवेयर की सुविधाएं

android.hardware.fingerprint
यह ऐप्लिकेशन, डिवाइस के बायोमेट्रिक हार्डवेयर का इस्तेमाल करके फ़िंगरप्रिंट पढ़ता है.

गेमपैड के हार्डवेयर की सुविधाएं

android.hardware.gamepad
यह ऐप्लिकेशन, डिवाइस या कनेक्ट किए गए गेमपैड से, गेम कंट्रोलर का इनपुट कैप्चर करता है.

इन्फ़्रारेड हार्डवेयर की सुविधाएं

android.hardware.consumerir
यह ऐप्लिकेशन, डिवाइस के इंफ़्रारेड (आईआर) की सुविधाओं का इस्तेमाल करता है. आम तौर पर, ऐसा अन्य उपभोक्ता आईआर डिवाइसों के साथ कम्यूनिकेट करने के लिए किया जाता है.

जगह की जानकारी से जुड़ी हार्डवेयर सुविधाएं

android.hardware.location
जगह की जानकारी का पता लगाने के लिए, ऐप्लिकेशन डिवाइस की एक या उससे ज़्यादा सुविधाओं का इस्तेमाल करता है. जैसे, जीपीएस की जगह की जानकारी, नेटवर्क की जगह की जानकारी या सेल की जगह की जानकारी.
android.hardware.location.gps

यह ऐप्लिकेशन, डिवाइस पर मौजूद ग्लोबल पोज़िशनिंग सिस्टम (जीपीएस) रिसीवर से मिली जगह की सटीक जानकारी के निर्देशांक का इस्तेमाल करता है.

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.hardware.location सुविधा का भी इस्तेमाल किया जाता है. ऐसा तब तक होता है, जब तक इस पैरंट सुविधा के बारे में एट्रिब्यूट android:required="false" की मदद से एलान नहीं किया जाता.

android.hardware.location.network

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

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.hardware.location सुविधा का भी इस्तेमाल किया जाता है. ऐसा तब तक होता है, जब तक इस पैरंट सुविधा के लिए, android:required="false" एट्रिब्यूट का इस्तेमाल नहीं किया जाता.

एनएफ़सी हार्डवेयर की सुविधाएं

android.hardware.nfc
यह ऐप्लिकेशन, डिवाइस के नियर-फ़ील्ड कम्यूनिकेशन (एनएफ़सी) रेडियो की सुविधाओं का इस्तेमाल करता है.
android.hardware.nfc.hce

यह ऐप्लिकेशन, डिवाइस पर होस्ट किए गए एनएफ़सी कार्ड इम्यूलेशन का इस्तेमाल करता है.

OpenGL ES हार्डवेयर की सुविधाएं

android.hardware.opengles.aep
यह ऐप्लिकेशन, डिवाइस पर इंस्टॉल किए गए OpenGL ES Android एक्सटेंशन पैक का इस्तेमाल करता है.

सेंसर के हार्डवेयर की सुविधाएं

android.hardware.sensor.accelerometer
डिवाइस के मौजूदा ओरिएंटेशन का पता लगाने के लिए, ऐप्लिकेशन डिवाइस के एक्सलरोमीटर से मिली मोशन रीडिंग का इस्तेमाल करता है. उदाहरण के लिए, कोई ऐप्लिकेशन पोर्ट्रेट और लैंडस्केप ओरिएंटेशन के बीच स्विच करने का समय तय करने के लिए, एक्सलरोमीटर रीडिंग का इस्तेमाल कर सकता है.
android.hardware.sensor.ambient_temperature
यह ऐप्लिकेशन, डिवाइस के आस-पास के तापमान को मापने वाले सेंसर का इस्तेमाल करता है. उदाहरण के लिए, मौसम की जानकारी देने वाला ऐप्लिकेशन, घर के अंदर या बाहर के तापमान की जानकारी दे सकता है.
android.hardware.sensor.barometer
यह ऐप्लिकेशन, डिवाइस के बैरोमीटर का इस्तेमाल करता है. उदाहरण के लिए, मौसम की जानकारी देने वाला ऐप्लिकेशन, हवा के दबाव की जानकारी दे सकता है.
android.hardware.sensor.compass
यह ऐप्लिकेशन, डिवाइस के मैग्नेटोमीटर (कंपास) का इस्तेमाल करता है. उदाहरण के लिए, नेविगेशन ऐप्लिकेशन में, उपयोगकर्ता की मौजूदा दिशा दिख सकती है.
android.hardware.sensor.gyroscope
यह ऐप्लिकेशन, डिवाइस के जाइरोस्कोप का इस्तेमाल करके, घुमाव और ट्विस्ट का पता लगाता है. इससे, डिवाइस की स्क्रीन की दिशा का पता लगाने वाला छह ऐक्सिस वाला सिस्टम बनता है. इस सेंसर का इस्तेमाल करके, ऐप्लिकेशन को पोर्ट्रेट और लैंडस्केप ओरिएंटेशन के बीच स्विच करने में आसानी होती है.
android.hardware.sensor.hifi_sensors
ऐप्लिकेशन, डिवाइस के हाई फ़िडेलिटी (Hi-Fi) सेंसर का इस्तेमाल करता है. उदाहरण के लिए, कोई गेमिंग ऐप्लिकेशन, उपयोगकर्ता की गतिविधियों का सटीक तरीके से पता लगा सकता है.
android.hardware.sensor.heartrate
यह ऐप्लिकेशन, डिवाइस के धड़कन की दर मापने वाले मॉनिटर का इस्तेमाल करता है. उदाहरण के लिए, कोई फ़िटनेस ऐप्लिकेशन, समय के साथ उपयोगकर्ता की दिल की धड़कन की दर के रुझानों की रिपोर्ट कर सकता है.
android.hardware.sensor.heartrate.ecg
यह ऐप्लिकेशन, डिवाइस के इलेक्ट्रोकार्डियोग्राम (ईसीजी) वाले दिल की धड़कन के सेंसर का इस्तेमाल करता है. उदाहरण के लिए, कोई फ़िटनेस ऐप्लिकेशन, उपयोगकर्ता की दिल की धड़कन की दर के बारे में ज़्यादा जानकारी दे सकता है.
android.hardware.sensor.light
यह ऐप्लिकेशन, डिवाइस के लाइट सेंसर का इस्तेमाल करता है. उदाहरण के लिए, हो सकता है कि कोई ऐप्लिकेशन, आस-पास की रोशनी के हिसाब से, दो कलर स्कीम में से कोई एक दिखाए.
android.hardware.sensor.proximity
ऐप्लिकेशन, डिवाइस के प्रॉक्सिमिटी सेंसर का इस्तेमाल करता है. उदाहरण के लिए, जब कोई टेलीफ़ोनी ऐप्लिकेशन यह पता लगाता है कि उपयोगकर्ता ने डिवाइस को अपने शरीर के करीब रखा है, तो वह डिवाइस की स्क्रीन बंद कर सकता है.
android.hardware.sensor.relative_humidity
यह ऐप्लिकेशन, डिवाइस के रिलेटिव ह्यूमिडिटी सेंसर का इस्तेमाल करता है. उदाहरण के लिए, मौसम की जानकारी देने वाला कोई ऐप्लिकेशन, मौजूदा डेउपॉइंट का हिसाब लगाने और उसकी रिपोर्ट करने के लिए, नमी का इस्तेमाल कर सकता है.
android.hardware.sensor.stepcounter
यह ऐप्लिकेशन, डिवाइस के कदमों की गिनती करने वाले टूल का इस्तेमाल करता है. उदाहरण के लिए, कोई फ़िटनेस ऐप्लिकेशन, उपयोगकर्ता को यह जानकारी दे सकता है कि उसे दिन भर में कितने कदम चलने हैं, ताकि वह अपने कदमों की संख्या से जुड़ा लक्ष्य पूरा कर सके.
android.hardware.sensor.stepdetector
यह ऐप्लिकेशन, डिवाइस के कदमों की गिनती करने वाले डिवाइस का इस्तेमाल करता है. उदाहरण के लिए, कोई फ़िटनेस ऐप्लिकेशन, उपयोगकर्ता की गतिविधि का पता लगाने के लिए, एक चरण से अगले चरण के बीच के समय का इस्तेमाल कर सकता है.

स्क्रीन के हार्डवेयर की सुविधाएं

android.hardware.screen.landscape
android.hardware.screen.portrait

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

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

<uses-feature android:name="android.hardware.screen.portrait" />

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

उदाहरण के लिए, अगर आपने "landscape", "reverseLandscape" या "sensorLandscape" के साथ android:screenOrientation का एलान किया है, तो आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों पर उपलब्ध होगा जिन पर लैंडस्केप ओरिएंटेशन काम करता है.

सबसे सही तरीका यह है कि <uses-feature> एलिमेंट का इस्तेमाल करके, इस ओरिएंटेशन के लिए अपनी ज़रूरत बताएं. अगर आपने android:screenOrientation का इस्तेमाल करके अपनी गतिविधि के लिए ऑरिएंटेशन का एलान किया है, लेकिन असल में इसकी ज़रूरत नहीं है, तो <uses-feature> एलिमेंट का इस्तेमाल करके ऑरिएंटेशन का एलान करके और android:required="false" को शामिल करके, इस ज़रूरी शर्त को बंद किया जा सकता है.

पुराने वर्शन के साथ काम करने के लिए, Android 3.1 (एपीआई लेवल 12) या उससे पहले के वर्शन पर चलने वाले किसी भी डिवाइस पर, लैंडस्केप और पोर्ट्रेट, दोनों ओरिएंटेशन काम करते हैं.

टेलीफ़ोन हार्डवेयर की सुविधाएं

android.hardware.telephony
यह ऐप्लिकेशन, डिवाइस की टेलीफ़ोन सुविधाओं का इस्तेमाल करता है. जैसे, डेटा कम्यूनिकेशन सेवाओं के साथ टेलीफ़ोन रेडियो.
android.hardware.telephony.cdma

यह ऐप्लिकेशन, कोड डिवीज़न मल्टीपल ऐक्सेस (सीडीएमए) टेलीफ़ोनी रेडियो सिस्टम का इस्तेमाल करता है.

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.hardware.telephony सुविधा भी इस्तेमाल की जाती है. ऐसा तब तक होता है, जब तक इस पैरंट सुविधा को android:required="false" के साथ एलान नहीं किया जाता.

android.hardware.telephony.gsm

यह ऐप्लिकेशन, मोबाइल कम्यूनिकेशन के लिए ग्लोबल सिस्टम (जीएसएम) टेलीफ़ोनी रेडियो सिस्टम का इस्तेमाल करता है.

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.hardware.telephony सुविधा भी इस्तेमाल की जाती है. ऐसा तब तक होता है, जब तक इस पैरंट सुविधा को android:required="false" के साथ एलान नहीं किया जाता.

टचस्क्रीन के हार्डवेयर की सुविधाएं

android.hardware.faketouch

ऐप्लिकेशन, टच इंटरैक्शन के बुनियादी इवेंट का इस्तेमाल करता है. जैसे, टैप करना और खींचना.

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

नकली टच इंटरफ़ेस देने वाला डिवाइस, यूज़र इनपुट सिस्टम उपलब्ध कराता है. यह सिस्टम, टचस्क्रीन की सुविधाओं के सबसेट को एमुलेट करता है. उदाहरण के लिए, माउस या रिमोट कंट्रोल से ऑन-स्क्रीन कर्सर को चलाया जा सकता है.

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

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

<uses-feature android:name="android.hardware.touchscreen"
    android:required="true" />

नीचे दिए गए उदाहरण में दिखाए गए सभी ऐप्लिकेशन, android.hardware.faketouch वाले डिवाइसों पर भी काम करते हैं. हालांकि, इसके लिए android.hardware.touchscreen की ज़रूरत नहीं होती.

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
android.hardware.faketouch.multitouch.distinct

ऐप्लिकेशन, फ़र्ज़ी टच इंटरफ़ेस पर दो या उससे ज़्यादा अलग-अलग "उंगलियों" को ट्रैक करता है. यह android.hardware.faketouch सुविधा का सुपरसेट है. ज़रूरी के तौर पर बताए जाने पर, इस सुविधा से पता चलता है कि ऐप्लिकेशन किसी डिवाइस के साथ सिर्फ़ तब काम करता है, जब वह डिवाइस दो या उससे ज़्यादा उंगलियों की अलग-अलग ट्रैकिंग को एमुलेट करता हो या उसमें असल टचस्क्रीन हो.

android.hardware.touchscreen.multitouch.distinct के ज़रिए तय किए गए अलग-अलग मल्टीटच के मुकाबले, ऐसे इनपुट डिवाइस जो नकली टच इंटरफ़ेस के साथ अलग-अलग मल्टीटच की सुविधा देते हैं वे दो उंगलियों से किए जाने वाले सभी जेस्चर के साथ काम नहीं करते. इसकी वजह यह है कि इनपुट को स्क्रीन पर कर्सर की गति में बदल दिया जाता है. इसका मतलब है कि ऐसे डिवाइस पर एक उंगली के जेस्चर से कर्सर को मूव किया जा सकता है, दो उंगलियों से स्वाइप करने पर एक उंगली से टच करने पर होने वाले इवेंट ट्रिगर होते हैं, और दो उंगलियों से किए जाने वाले अन्य जेस्चर से, दो उंगलियों से टच करने पर होने वाले इवेंट ट्रिगर होते हैं.

कर्सर को मूव करने के लिए, दो उंगलियों से टच ट्रैकपैड का इस्तेमाल करने वाला डिवाइस, इस सुविधा के साथ काम कर सकता है.

android.hardware.faketouch.multitouch.jazzhand

ऐप्लिकेशन, नकली टच इंटरफ़ेस पर पांच या उससे ज़्यादा अलग-अलग "उंगलियों" को ट्रैक करता है. यह android.hardware.faketouch सुविधा का सुपरसेट है. ज़रूरी के तौर पर बताए जाने पर, इस सुविधा से पता चलता है कि ऐप्लिकेशन किसी डिवाइस के साथ सिर्फ़ तब काम करता है, जब वह डिवाइस पांच या उससे ज़्यादा उंगलियों की अलग-अलग ट्रैकिंग को एमुलेट करता हो या उसमें असल टचस्क्रीन हो.

android.hardware.touchscreen.multitouch.jazzhand के ज़रिए तय किए गए अलग-अलग मल्टीटच के मुकाबले, ऐसे इनपुट डिवाइस जो नकली टच इंटरफ़ेस के साथ जैज़हैंड मल्टीटच की सुविधा देते हैं वे पांच उंगलियों से किए जाने वाले सभी जेस्चर के साथ काम नहीं करते. इसकी वजह यह है कि इनपुट को स्क्रीन पर कर्सर की गति में बदल दिया जाता है. इसका मतलब है कि ऐसे डिवाइस पर एक उंगली से किए जाने वाले जेस्चर से कर्सर को एक जगह से दूसरी जगह ले जाया जा सकता है, एक से ज़्यादा उंगलियों से किए जाने वाले जेस्चर से एक उंगली से किए जाने वाले टच इवेंट ट्रिगर होते हैं, और एक से ज़्यादा उंगलियों से किए जाने वाले अन्य जेस्चर से, एक से ज़्यादा उंगलियों से किए जाने वाले टच इवेंट ट्रिगर होते हैं.

कर्सर को मूव करने के लिए, पांच उंगलियों से टच करने की सुविधा देने वाले डिवाइस पर यह सुविधा काम कर सकती है.

android.hardware.touchscreen

यह ऐप्लिकेशन, डिवाइस की टचस्क्रीन की सुविधाओं का इस्तेमाल करके, ऐसे जेस्चर के लिए इवेंट ट्रिगर करता है जो ज़्यादा इंटरैक्टिव होते हैं. जैसे, फ़्लिंग. यह android.hardware.faketouch सुविधा का सुपरसेट है.

डिफ़ॉल्ट रूप से, सभी ऐप्लिकेशन के लिए इस सुविधा की ज़रूरत होती है. इसलिए, ये ऐप्लिकेशन उन डिवाइसों पर उपलब्ध नहीं होते हैं जो सिर्फ़ एमुलेट किए गए "नकली टच" इंटरफ़ेस की सुविधा देते हैं. अपने ऐप्लिकेशन को उन डिवाइसों पर उपलब्ध कराया जा सकता है जो फ़ेक टच इंटरफ़ेस देते हैं. इसके अलावा, सिर्फ़ डी-पैड कंट्रोलर वाले डिवाइसों पर भी ऐप्लिकेशन उपलब्ध कराया जा सकता है. इसके लिए, android:required="false" के साथ android.hardware.touchscreen का इस्तेमाल करके, साफ़ तौर पर यह एलान करें कि टचस्क्रीन की ज़रूरत नहीं है. अगर आपका ऐप्लिकेशन, असल टचस्क्रीन इंटरफ़ेस का इस्तेमाल करता है, लेकिन उसे इसकी ज़रूरत नहीं है, तो यह एलान जोड़ें. जिन ऐप्लिकेशन के लिए android.hardware.touchscreen की ज़रूरत नहीं होती वे android.hardware.faketouch वाले डिवाइसों पर भी काम करते हैं.

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

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

android.hardware.touchscreen.multitouch

यह ऐप्लिकेशन, डिवाइस की दो-पॉइंट मल्टीटच की बुनियादी सुविधाओं का इस्तेमाल करता है. जैसे, पिंच जेस्चर के लिए. हालांकि, ऐप्लिकेशन को टच को अलग से ट्रैक करने की ज़रूरत नहीं होती. यह android.hardware.touchscreen सुविधा का सुपरसेट है.

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.hardware.touchscreen सुविधा भी इस्तेमाल की जाती है. ऐसा तब तक होता है, जब तक इस पैरंट सुविधा को android:required="false" के साथ एलान नहीं किया जाता.

android.hardware.touchscreen.multitouch.distinct

यह ऐप्लिकेशन, डिवाइस की बेहतर मल्टीटच सुविधाओं का इस्तेमाल करके, दो या उससे ज़्यादा बिंदुओं को अलग-अलग ट्रैक करता है. यह सुविधा, android.hardware.touchscreen.multitouch सुविधा का सुपरसेट है.

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.hardware.touchscreen.multitouch सुविधा भी इस्तेमाल की जाती है. ऐसा तब तक होता है, जब तक कि इस पैरंट सुविधा को android:required="false" के साथ एलान न किया गया हो.

android.hardware.touchscreen.multitouch.jazzhand

यह ऐप्लिकेशन, डिवाइस की बेहतर मल्टीटच सुविधाओं का इस्तेमाल करके, पांच या उससे ज़्यादा बिंदुओं को अलग-अलग ट्रैक करता है. यह सुविधा, android.hardware.touchscreen.multitouch सुविधा का सुपरसेट है.

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.hardware.touchscreen.multitouch सुविधा भी इस्तेमाल की जाती है. ऐसा तब तक होता है, जब तक कि इस पैरंट सुविधा को android:required="false" के साथ एलान न किया गया हो.

यूएसबी हार्डवेयर की सुविधाएं

android.hardware.usb.accessory
यह ऐप्लिकेशन, यूएसबी डिवाइस की तरह काम करता है और यूएसबी होस्ट से कनेक्ट होता है.
android.hardware.usb.host
यह ऐप्लिकेशन, डिवाइस से कनेक्ट की गई यूएसबी ऐक्सेसरी का इस्तेमाल करता है. डिवाइस, यूएसबी होस्ट के तौर पर काम करता है.

Vulkan हार्डवेयर की सुविधाएं

android.hardware.vulkan.compute
ऐप्लिकेशन, Vulkan की कंप्यूट सुविधाओं का इस्तेमाल करता है. इस सुविधा से पता चलता है कि ऐप्लिकेशन को हार्डवेयर की मदद से तेज़ी से काम करने वाले Vulkan को लागू करने की ज़रूरत है. सुविधा के वर्शन से पता चलता है कि ऐप्लिकेशन को Vulkan 1.0 की ज़रूरी शर्तों के अलावा, कंप्यूट की कौनसी वैकल्पिक सुविधाओं की ज़रूरत है. उदाहरण के लिए, अगर आपके ऐप्लिकेशन को Vulkan कंप्यूट लेवल 0 की ज़रूरत है, तो इस सुविधा का एलान करें:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
फ़ीचर के वर्शन के बारे में ज़्यादा जानकारी के लिए, FEATURE_VULKAN_HARDWARE_COMPUTE देखें.
android.hardware.vulkan.level
ऐप्लिकेशन, Vulkan लेवल की सुविधाओं का इस्तेमाल करता है. इस सुविधा से पता चलता है कि ऐप्लिकेशन को हार्डवेयर की मदद से तेज़ी से काम करने वाले Vulkan को लागू करने की ज़रूरत है. सुविधा के वर्शन से पता चलता है कि ऐप्लिकेशन को वैकल्पिक हार्डवेयर की कौनसी सुविधाओं की ज़रूरत है. उदाहरण के लिए, अगर आपके ऐप्लिकेशन को Vulkan हार्डवेयर लेवल 0 के साथ काम करने की ज़रूरत है, तो इस सुविधा का एलान करें:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
फ़ीचर के वर्शन के बारे में ज़्यादा जानकारी के लिए, FEATURE_VULKAN_HARDWARE_LEVEL देखें.
android.hardware.vulkan.version
ऐप्लिकेशन, Vulkan का इस्तेमाल करता हो. इस सुविधा से पता चलता है कि ऐप्लिकेशन को हार्डवेयर की मदद से तेज़ी से काम करने वाले Vulkan को लागू करने की ज़रूरत है. सुविधा के वर्शन से पता चलता है कि ऐप्लिकेशन को Vulkan API के कम से कम किस वर्शन की ज़रूरत है. उदाहरण के लिए, अगर आपके ऐप्लिकेशन को Vulkan 1.0 की ज़रूरत है, तो इस सुविधा का एलान करें:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
फ़ीचर के वर्शन के बारे में ज़्यादा जानकारी के लिए, FEATURE_VULKAN_HARDWARE_VERSION देखें.

वाई-फ़ाई हार्डवेयर की सुविधाएं

android.hardware.wifi
यह ऐप्लिकेशन, डिवाइस पर 802.11 नेटवर्किंग (वाई-फ़ाई) सुविधाओं का इस्तेमाल करता है.
android.hardware.wifi.direct
यह ऐप्लिकेशन, डिवाइस पर Wi-Fi Direct नेटवर्किंग की सुविधाओं का इस्तेमाल करता है.

सॉफ़्टवेयर की सुविधाएं

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

कम्यूनिकेशन सॉफ़्टवेयर की सुविधाएं

android.software.sip
ऐप्लिकेशन, सेशन इनिशिएशन प्रोटोकॉल (एसआईपी) सेवाओं का इस्तेमाल करता है. SIP का इस्तेमाल करके, ऐप्लिकेशन में इंटरनेट टेलीफ़ोनी ऑपरेशन की सुविधाएं काम करती हैं. जैसे, वीडियो कॉन्फ़्रेंसिंग और इंस्टैंट मैसेजिंग.
android.software.sip.voip

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

इस सुविधा का इस्तेमाल करने से, यह पता चलता है कि ऐप्लिकेशन में android.software.sip सुविधा भी इस्तेमाल की जाती है. ऐसा तब तक होता है, जब तक इस पैरंट सुविधा को android:required="false" के साथ एलान नहीं किया जाता.

android.software.webview
ऐप्लिकेशन, इंटरनेट से कॉन्टेंट दिखाता है.

कस्टम इनपुट सॉफ़्टवेयर की सुविधाएं

android.software.input_methods
ऐप्लिकेशन, इनपुट के लिए किसी नए तरीके का इस्तेमाल करता है. डेवलपर, इस तरीके के बारे में InputMethodService में बताता है.

डिवाइस मैनेजमेंट सॉफ़्टवेयर की सुविधाएं

android.software.backup
ऐप्लिकेशन में बैकअप लेने और उसे पहले जैसा करने की सुविधा को मैनेज करने के लिए लॉजिक शामिल है.
android.software.device_admin
यह ऐप्लिकेशन, डिवाइस की नीति लागू करने के लिए डिवाइस एडमिन का इस्तेमाल करता है.
android.software.managed_users
यह ऐप्लिकेशन, सेकंडरी उपयोगकर्ताओं और मैनेज की जा रही प्रोफ़ाइलों के साथ काम करता है.
android.software.securely_removes_users
ऐप्लिकेशन, उपयोगकर्ताओं और उनसे जुड़े डेटा को हमेशा के लिए हटा सकता है.
android.software.verified_boot
इस ऐप्लिकेशन में, डिवाइस के पुष्टि किए गए बूट की सुविधा के नतीजों को मैनेज करने के लिए लॉजिक शामिल है. इससे यह पता चलता है कि रीस्टार्ट करने के दौरान, डिवाइस का कॉन्फ़िगरेशन बदला है या नहीं.

मीडिया सॉफ़्टवेयर की सुविधाएं

android.software.midi
यह ऐप्लिकेशन, म्यूज़िकल इंस्ट्रुमेंट से कनेक्ट होता है या म्यूज़िकल इंस्ट्रुमेंट डिजिटल इंटरफ़ेस (एमआईडीआई) प्रोटोकॉल का इस्तेमाल करके साउंड आउटपुट करता है.
android.software.print
इस ऐप्लिकेशन में, डिवाइस पर दिखने वाले दस्तावेज़ों को प्रिंट करने के लिए निर्देश शामिल हैं.
android.software.leanback
इस ऐप्लिकेशन को Android TV डिवाइसों पर चलाने के लिए डिज़ाइन किया गया है.
android.software.live_tv
यह ऐप्लिकेशन, लाइव टीवी प्रोग्राम स्ट्रीम करता है.

स्क्रीन इंटरफ़ेस सॉफ़्टवेयर की सुविधाएं

android.software.app_widgets
यह ऐप्लिकेशन, ऐप्लिकेशन विजेट का इस्तेमाल करता है या उन्हें उपलब्ध कराता है. साथ ही, यह सिर्फ़ उन डिवाइसों के लिए है जिनमें होम स्क्रीन या ऐसी ही कोई जगह होती है जहां उपयोगकर्ता ऐप्लिकेशन विजेट जोड़ सकते हैं.
android.software.home_screen
यह ऐप्लिकेशन, डिवाइस की होम स्क्रीन की जगह ले लेता है.
android.software.live_wallpaper
ऐप्लिकेशन में ऐसे वॉलपेपर का इस्तेमाल किया जाता है या उपलब्ध कराए जाते हैं जिनमें ऐनिमेशन शामिल होता है.

ऐसी अनुमतियां जिनसे सुविधा से जुड़ी ज़रूरी शर्तों का पता चलता है

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

ऐसे ऐप्लिकेशन को अनजाने में उपलब्ध होने से रोकने के लिए, Google Play यह मानता है कि हार्डवेयर से जुड़ी कुछ अनुमतियां, डिफ़ॉल्ट रूप से हार्डवेयर की सुविधाओं के लिए ज़रूरी हैं. उदाहरण के लिए, ब्लूटूथ का इस्तेमाल करने वाले ऐप्लिकेशन को <uses-permission> एलिमेंट में BLUETOOTH अनुमति का अनुरोध करना होगा.

लेगसी ऐप्लिकेशन के लिए, Google Play यह मानता है कि अनुमति के एलान का मतलब है कि ऐप्लिकेशन के लिए, android.hardware.bluetooth सुविधा ज़रूरी है. साथ ही, वह उस सुविधा के आधार पर फ़िल्टर करने की सुविधा सेट अप करता है. टेबल 2 में, ऐसी अनुमतियों की सूची दी गई है जिनसे पता चलता है कि सुविधा के लिए ज़रूरी शर्तें, <uses-feature> एलिमेंट में बताई गई शर्तों के बराबर हैं.

टेबल 2 में दी गई अनुमतियों से जुड़ी सुविधाओं के मुकाबले, <uses-feature> एलान को हमेशा प्राथमिकता दी जाती है. इन एलान में, एलान किया गया कोई भी android:required एट्रिब्यूट भी शामिल है. इनमें से किसी भी अनुमति के लिए, <uses-feature> एलिमेंट में सुविधा के बारे में साफ़ तौर पर बताकर, required एट्रिब्यूट को false पर सेट करके, सुविधा के आधार पर फ़िल्टर करने की सुविधा बंद की जा सकती है.

उदाहरण के लिए, CAMERA अनुमति के आधार पर फ़िल्टर करने की सुविधा बंद करने के लिए, मेनिफ़ेस्ट फ़ाइल में ये <uses-feature> एलान जोड़ें:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

चेतावनी: अगर आपका ऐप्लिकेशन Android 5.0 (एपीआई लेवल 21) या उसके बाद के वर्शन को टारगेट करता है और नेटवर्क या जीपीएस से जगह की जानकारी पाने के लिए, ACCESS_COARSE_LOCATION या ACCESS_FINE_LOCATION अनुमति का इस्तेमाल करता है, तो आपको साफ़ तौर पर यह भी एलान करना होगा कि आपका ऐप्लिकेशन android.hardware.location.network या android.hardware.location.gps हार्डवेयर सुविधाओं का इस्तेमाल करता है.

दूसरी टेबल. डिवाइस की ऐसी अनुमतियां जिनसे डिवाइस के हार्डवेयर के इस्तेमाल का पता चलता हो.

कैटगरी अनुमति सुविधा से जुड़ी ज़रूरी शर्त
ब्लूटूथ BLUETOOTH android.hardware.bluetooth

ज़्यादा जानकारी के लिए, ब्लूटूथ सुविधा के लिए खास हैंडलिंग देखें.

BLUETOOTH_ADMIN android.hardware.bluetooth
कैमरा CAMERA android.hardware.camera
android.hardware.camera.autofocus
जगह की जानकारी ACCESS_MOCK_LOCATION android.hardware.location
ACCESS_LOCATION_EXTRA_COMMANDS android.hardware.location
INSTALL_LOCATION_PROVIDER android.hardware.location
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (सिर्फ़ तब, जब टारगेट एपीआई लेवल 20 या उससे पहले का हो.)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (सिर्फ़ तब, जब टारगेट एपीआई लेवल 20 या उससे पहले का हो.)

माइक्रोफ़ोन RECORD_AUDIO android.hardware.microphone
टेलीफ़ोनी CALL_PHONE android.hardware.telephony
CALL_PRIVILEGED android.hardware.telephony
MODIFY_PHONE_STATE android.hardware.telephony
PROCESS_OUTGOING_CALLS android.hardware.telephony
READ_SMS android.hardware.telephony
RECEIVE_SMS android.hardware.telephony
RECEIVE_MMS android.hardware.telephony
RECEIVE_WAP_PUSH android.hardware.telephony
SEND_SMS android.hardware.telephony
WRITE_APN_SETTINGS android.hardware.telephony
WRITE_SMS android.hardware.telephony
वाई-फ़ाई ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi