1. परिचय
इस दस्तावेज़ में, उन ज़रूरी शर्तों के बारे में बताया गया है जिन्हें पूरा करने के बाद ही डिवाइस, Android 8.0 के साथ काम कर सकते हैं.
“ज़रूरी है”, “ज़रूरी नहीं है”, “ज़रूरी है”, “ज़रूरी है”, “ज़रूरी नहीं है”, “ज़रूरी है”, “ज़रूरी नहीं है”, “सुझाया गया है”, “ज़रूरी नहीं है”, और “ज़रूरी नहीं है” जैसे शब्दों का इस्तेमाल, RFC2119 में बताए गए IETF स्टैंडर्ड के मुताबिक किया गया है.
इस दस्तावेज़ में, “डिवाइस बनाने वाली कंपनी” या “कंपनी” का मतलब ऐसे व्यक्ति या संगठन से है जो Android 8.0 पर चलने वाले हार्डवेयर/सॉफ़्टवेयर का समाधान तैयार करता है. “डिवाइस में सेट किया गया सिस्टम” या “सिस्टम” का मतलब, हार्डवेयर/सॉफ़्टवेयर से जुड़े ऐसे समाधान से है जिसे डेवलप किया गया है.
Android 8.0 के साथ काम करने के लिए, डिवाइस में सेट किए गए सिस्टम को कंपैटबिलिटी डेफ़िनिशन में दी गई ज़रूरी शर्तों को पूरा करना होगा. इसमें रेफ़रंस के तौर पर शामिल किए गए सभी दस्तावेज़ भी शामिल हैं.
अगर इस परिभाषा या सेक्शन 10 में बताए गए सॉफ़्टवेयर टेस्ट के बारे में कोई जानकारी नहीं दी गई है, साफ़ तौर पर नहीं बताया गया है या पूरी जानकारी नहीं दी गई है, तो यह डिवाइस बनाने वाली कंपनी की ज़िम्मेदारी है कि वह मौजूदा सुविधाओं के साथ काम करने वाले सॉफ़्टवेयर को लागू करे.
इस वजह से, Android Open Source Project, Android का रेफ़रंस और पसंदीदा वर्शन, दोनों है. डिवाइस बनाने वाली कंपनियों को यह सुझाव दिया जाता है कि वे अपने डिवाइसों में, Android ओपन सोर्स प्रोजेक्ट से उपलब्ध “अपस्ट्रीम” सोर्स कोड का ज़्यादा से ज़्यादा इस्तेमाल करें. हालांकि, कुछ कॉम्पोनेंट को किसी दूसरे कॉम्पोनेंट से बदला जा सकता है, लेकिन हमारा सुझाव है कि ऐसा न करें. ऐसा इसलिए, क्योंकि इससे सॉफ़्टवेयर की जांच पास करना बहुत मुश्किल हो जाएगा. यह पक्का करना ज़रूरी है कि डिवाइस, Android के स्टैंडर्ड वर्शन के साथ पूरी तरह से काम करता हो. इसमें Compatibility Test Suite के साथ-साथ अन्य टेस्ट भी शामिल हैं. आखिर में, ध्यान दें कि इस दस्तावेज़ में, कुछ कॉम्पोनेंट को बदलने और उनमें बदलाव करने पर साफ़ तौर पर पाबंदी लगाई गई है.
इस दस्तावेज़ में लिंक किए गए कई संसाधन, सीधे तौर पर या किसी अन्य तरीके से Android SDK से लिए गए हैं. साथ ही, ये संसाधन, SDK के दस्तावेज़ में दी गई जानकारी के हिसाब से काम करेंगे. अगर किसी मामले में, कंपैटिबिलिटी डेफ़िनिशन या कंपैटिबिलिटी टेस्ट सुइट, एसडीके के दस्तावेज़ से मेल नहीं खाता है, तो एसडीके के दस्तावेज़ को आधिकारिक माना जाता है. इस दस्तावेज़ में लिंक किए गए संसाधनों में दी गई किसी भी तकनीकी जानकारी को, इस दस्तावेज़ में शामिल करके, कंपैटिबिलिटी डेफ़िनिशन का हिस्सा माना जाता है.
1.1 दस्तावेज़ का स्ट्रक्चर
1.1.1. डिवाइस टाइप के हिसाब से ज़रूरी शर्तें
सेक्शन 2 में, किसी खास डिवाइस टाइप पर लागू होने वाली सभी ज़रूरी शर्तें शामिल होती हैं. सेक्शन 2 का हर सब-सेक्शन, किसी खास तरह के डिवाइस के लिए होता है.
अन्य सभी ज़रूरी शर्तें, सेक्शन 2 के बाद दिए गए सेक्शन में बताई गई हैं. ये शर्तें, Android डिवाइसों पर लागू होने वाली सभी ज़रूरी शर्तें हैं. इस दस्तावेज़ में इन ज़रूरी शर्तों को "मुख्य ज़रूरी शर्तें" के तौर पर बताया गया है.
1.1.2. ज़रूरी शर्त का आईडी
'ज़रूरी है' के तौर पर मार्क की गई ज़रूरी शर्तों के लिए, ज़रूरी शर्त का आईडी असाइन किया जाता है.
- आईडी सिर्फ़ उन ज़रूरी शर्तों के लिए असाइन किया जाता है जिन्हें पूरा करना ज़रूरी है.
- 'बेहद ज़रूरी' के तौर पर मार्क की गई शर्तों को [SR] के तौर पर मार्क किया जाता है. हालांकि, इन्हें आईडी असाइन नहीं किया जाता.
- आईडी में ये शामिल होते हैं : डिवाइस टाइप आईडी - शर्त आईडी - ज़रूरी शर्तें आईडी (जैसे, C-0-1).
हर आईडी की जानकारी यहां दी गई है:
- डिवाइस टाइप आईडी (इसके बारे में ज़्यादा जानने के लिए, 2. डिवाइस टाइप
- C: कोर (ऐसी ज़रूरी शर्तें जो Android डिवाइस में सेट किए गए किसी भी सिस्टम पर लागू होती हैं)
- H: Android हैंडहेल्ड डिवाइस
- T: Android Television डिवाइस
- A: Android Automotive को लागू करना
- टैब: Android टैबलेट पर लागू करना
- शर्त का आईडी
- जब किसी शर्त को पूरा करना बिलकुल ज़रूरी होता है, तो इस आईडी को 0 के तौर पर सेट किया जाता है.
- जब किसी शर्त को किसी स्थिति में पूरा करना ज़रूरी होता है, तो पहली शर्त के लिए 1 असाइन किया जाता है. इसके बाद, उसी सेक्शन और डिवाइस टाइप में, संख्या में 1 की बढ़ोतरी होती है.
- ज़रूरी शर्त का आईडी
- यह आईडी 1 से शुरू होता है और एक ही सेक्शन और एक ही शर्त के तहत, इसमें 1 की बढ़ोतरी होती है.
1.1.3. सेक्शन 2 में ज़रूरी शर्त का आईडी
सेक्शन 2 में मौजूद ज़रूरी शर्त का आईडी, सेक्शन के आईडी से शुरू होता है. इसके बाद, ऊपर बताया गया ज़रूरी शर्त का आईडी होता है.
- सेक्शन 2 में मौजूद आईडी में ये शामिल होते हैं : सेक्शन आईडी / डिवाइस टाइप आईडी - शर्त आईडी - ज़रूरी शर्तें आईडी (उदाहरण के लिए, 7.4.3/A-0-1).
2. डिवाइस टाइप
Android Open Source Project, एक ऐसा सॉफ़्टवेयर स्टैक उपलब्ध कराता है जिसका इस्तेमाल अलग-अलग तरह के डिवाइसों और उनके साइज़, डाइमेंशन या कॉन्फ़िगरेशन के हिसाब से किया जा सकता है. हालांकि, कुछ डिवाइस टाइप ऐसे हैं जिनके लिए ऐप्लिकेशन डिस्ट्रिब्यूशन का ईकोसिस्टम बेहतर तरीके से काम करता है.
इस सेक्शन में, डिवाइसों के टाइप के बारे में बताया गया है. साथ ही, हर डिवाइस टाइप के लिए लागू होने वाली अन्य ज़रूरी शर्तों और सुझावों के बारे में भी बताया गया है.
Android डिवाइस के ऐसे सभी वर्शन जो ऊपर बताए गए किसी भी डिवाइस टाइप में फ़िट नहीं होते हैं उन्हें अब भी, इस कंपैटिबिलिटी डेफ़िनिशन के अन्य सेक्शन में दी गई सभी ज़रूरी शर्तों को पूरा करना होगा.
2.1 डिवाइस कॉन्फ़िगरेशन
डिवाइस टाइप के हिसाब से हार्डवेयर कॉन्फ़िगरेशन में होने वाले मुख्य अंतरों के बारे में जानने के लिए, इस सेक्शन में डिवाइस के हिसाब से दी गई ज़रूरी शर्तें देखें.
2.2. हाथ में पकड़कर इस्तेमाल किए जाने वाले डिवाइसों के लिए ज़रूरी शर्तें
Android हैंडहेल्ड डिवाइस का मतलब, Android डिवाइस के ऐसे वर्शन से है जिसे आम तौर पर हाथ में पकड़कर इस्तेमाल किया जाता है. जैसे, mp3 प्लेयर, फ़ोन या टैबलेट.
अगर कोई Android डिवाइस इन सभी शर्तों को पूरा करता है, तो उसे हैंडहेल्ड डिवाइस के तौर पर क्लासिफ़ाई किया जाता है:
- उसमें बैटरी जैसा पावर सोर्स हो, ताकि उसे आसानी से एक जगह से दूसरी जगह ले जाया जा सके.
- स्क्रीन का फ़िज़िकल डाइगोनल साइज़ 2.5 से 8 इंच के बीच हो.
इस सेक्शन में दी गई अन्य ज़रूरी शर्तें, Android हैंडहेल्ड डिवाइसों में सेट किए जाने वाले सिस्टम के लिए हैं.
2.2.1. हार्डवेयर
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [7.1.1.1/H-0-1] डिवाइस में कम से कम 2.5 इंच की स्क्रीन होनी चाहिए. यह स्क्रीन, डिवाइस के डायगोनल साइज़ के हिसाब से मापी जाती है.
- [7.1.1.3/H-SR] उपयोगकर्ताओं को डिसप्ले का साइज़ बदलने की सुविधा देने का सुझाव दिया जाता है.(स्क्रीन की डेंसिटी)
- [7.1.5/H-0-1] इसमें लेगसी ऐप्लिकेशन के साथ काम करने वाले मोड के लिए सहायता शामिल होनी चाहिए. यह मोड, अपस्ट्रीम Android ओपन सोर्स कोड के ज़रिए लागू किया जाता है. इसका मतलब है कि डिवाइसों में लागू किए गए बदलावों से, कंपैटिबिलिटी मोड को चालू करने वाले ट्रिगर या थ्रेशोल्ड में बदलाव नहीं होना चाहिए. साथ ही, कंपैटिबिलिटी मोड के व्यवहार में भी बदलाव नहीं होना चाहिए.
- [7.2.1/H-0-1] इसमें तीसरे पक्ष के इनपुट पद्धति संपादक (IME) ऐप्लिकेशन के साथ काम करने की सुविधा शामिल होनी चाहिए.
- [7.2.3/H-0-1] इसमें होम, हाल ही के ऐप्लिकेशन, और वापस जाने की सुविधा होनी चाहिए.
- [7.2.3/H-0-2] बैक फ़ंक्शन (
KEYCODE_BACK) के सामान्य और लंबे समय तक दबाकर रखने वाले, दोनों इवेंट को फ़ोरग्राउंड ऐप्लिकेशन पर भेजना ज़रूरी है. - [7.2.4/H-0-1] इसमें टचस्क्रीन इनपुट की सुविधा होनी चाहिए.
- [7.3.1/H-SR] 3-ऐक्सिस एक्सलरोमीटर शामिल करने का सुझाव दिया जाता है.
अगर हैंडहेल्ड डिवाइस में 3-ऐक्सिस एक्सलरोमीटर शामिल है, तो:
- [7.3.1/H-1-1] कम से कम 100 हर्ट्ज़ की फ़्रीक्वेंसी तक इवेंट रिपोर्ट करने की सुविधा होनी चाहिए.
अगर हैंडहेल्ड डिवाइस में जाइरोस्कोप शामिल है, तो:
- [7.3.4/H-1-1] कम से कम 100 हर्ट्ज़ की फ़्रीक्वेंसी पर इवेंट रिपोर्ट करने की सुविधा होनी चाहिए.
हैंडहेल्ड डिवाइस में सेट किए गए जिन सिस्टम से वॉइस कॉल किया जा सकता है और getPhoneType में PHONE_TYPE_NONE के अलावा कोई अन्य वैल्यू दिखाई जा सकती है उनके लिए:
- [7.3.8/H] में प्रॉक्सिमिटी सेंसर शामिल होना चाहिए.
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [7.3.12/H-SR] यह सुझाव दिया जाता है कि ये सेंसर, छह डिग्री ऑफ़ फ़्रीडम वाले पोज़ सेंसर के साथ काम करें.
- [7.4.3/H]इनमें ब्लूटूथ और ब्लूटूथ स्मार्ट काम करना चाहिए.
अगर हैंडहेल्ड डिवाइस में मीटर वाला कनेक्शन शामिल है, तो:
- [7.4.7/H-1-1] में डेटा बचाने वाला मोड उपलब्ध होना चाहिए.
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [7.6.1/H-0-1] ऐप्लिकेशन के निजी डेटा (इसे "/data" पार्टिशन भी कहा जाता है) के लिए, कम से कम 4 जीबी नॉन-वॉलटाइल स्टोरेज उपलब्ध होना चाहिए.
- [7.6.1/H-0-2] कर्नेल और यूज़रस्पेस के लिए 1 जीबी से कम मेमोरी उपलब्ध होने पर,
ActivityManager.isLowRamDevice()के लिए “true” वैल्यू दिखाना ज़रूरी है.
अगर हैंडहेल्ड डिवाइस में 32-बिट सिस्टम लागू किया गया है, तो:
-
[7.6.1/H-1-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 512 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 280 डीपीआई या इससे कम*
- बहुत बड़ी स्क्रीन पर ldpi या इससे कम
- बड़ी स्क्रीन पर mdpi या इससे कम
-
[7.6.1/H-2-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 608 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर xhdpi या इससे ज़्यादा*
- बड़ी स्क्रीन पर hdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर mdpi या इससे ज़्यादा
-
[7.6.1/H-3-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 896 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 400 डीपीआई या इससे ज़्यादा*
- बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर tvdpi या इससे ज़्यादा
-
[7.6.1/H-4-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 1344 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 560 डीपीआई या इससे ज़्यादा*
- बड़ी स्क्रीन पर 400dpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
अगर हैंडहेल्ड डिवाइसों में 64-बिट सिस्टम लागू किए गए हैं, तो:
-
[7.6.1/H-5-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 816 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 280 डीपीआई या इससे कम*
- बहुत बड़ी स्क्रीन पर ldpi या इससे कम
- बड़ी स्क्रीन पर mdpi या इससे कम
-
[7.6.1/H-6-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 944 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर xhdpi या इससे ज़्यादा*
- बड़ी स्क्रीन पर hdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर mdpi या इससे ज़्यादा
-
[7.6.1/H-7-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 1280 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 400 डीपीआई या इससे ज़्यादा*
- बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर tvdpi या इससे ज़्यादा
-
[7.6.1/H-8-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 1824 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 560 डीपीआई या इससे ज़्यादा*
- बड़ी स्क्रीन पर 400dpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
ध्यान दें कि ऊपर दी गई "कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी" का मतलब, हार्डवेयर कॉम्पोनेंट (जैसे कि रेडियो, वीडियो वगैरह) के लिए पहले से तय की गई मेमोरी के अलावा उपलब्ध मेमोरी स्पेस से है. ये कॉम्पोनेंट, डिवाइस पर कर्नेल के कंट्रोल में नहीं होते हैं.
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [7.6.2/H-0-1] किसी ऐप्लिकेशन को 1 जीबी से कम का शेयर किया गया स्टोरेज नहीं देना चाहिए.
- [7.7.1/H] में, पेरिफ़ेरल मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल होना चाहिए.
अगर हाथ में पकड़े जाने वाले डिवाइस में, पेरिफ़ेरल मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [7.7.1/H-1-1] Android Open Accessory (AOA) API को लागू करना ज़रूरी है.
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [7.8.1/H-0-1] इसमें माइक्रोफ़ोन शामिल होना ज़रूरी है.
- [7.8.2/H-0-1] इसमें ऑडियो आउटपुट होना चाहिए और
android.hardware.audio.outputका एलान करना ज़रूरी है.
अगर हैंडहेल्ड डिवाइस में वीआर मोड की सुविधा शामिल है, तो:
- [7.9.1/H-1-1]
android.software.vr.modeसुविधा का एलान करना ज़रूरी है.
अगर डिवाइसों में android.software.vr.mode सुविधा का एलान किया जाता है, तो:
- [7.9.1/H-2-1] इसमें
android.service.vr.VrListenerServiceको लागू करने वाला ऐप्लिकेशन शामिल होना चाहिए. इसे वीआर ऐप्लिकेशन,android.app.Activity#setVrModeEnabledके ज़रिए चालू कर सकते हैं.
अगर हैंडहेल्ड डिवाइस पर लागू किए गए तरीके, android.hardware.vr.high_performance फ़ीचर फ़्लैग को चालू करने की सभी ज़रूरी शर्तों को पूरा करते हैं, तो:
- [7.9.2/-1-1]
android.hardware.vr.high_performanceफ़ीचर फ़्लैग के बारे में एलान करना ज़रूरी है.
2.2.2. मल्टीमीडिया
हैंडहेल्ड डिवाइस में सेट किए गए सिस्टम के लिए, इन ऑडियो एन्कोडिंग का इस्तेमाल करना ज़रूरी है:
- [5.1.1/H-0-1] AMR-NB
- [5.1.1/H-0-2] AMR-WB
- [5.1.1/H-0-3] MPEG-4 AAC प्रोफ़ाइल (AAC LC)
- [5.1.1/H-0-4] MPEG-4 HE AAC प्रोफ़ाइल (AAC+)
- [5.1.1/H-0-5] AAC ELD (बेहतर लो डिले एएसी)
हैंडहेल्ड डिवाइस में सेट किए गए सिस्टम के लिए, ऑडियो डिकोडिंग की इन सुविधाओं का इस्तेमाल करना ज़रूरी है:
हाथ में रखकर इस्तेमाल किए जाने वाले डिवाइसों में, वीडियो एन्कोडिंग की इन सुविधाओं का इस्तेमाल किया जाना चाहिए. साथ ही, इन्हें तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराया जाना चाहिए:
हैंडहेल्ड डिवाइसों में, वीडियो डिकोड करने की ये सुविधाएं होनी चाहिए:
- [5.3/H-0-1] H.264 एवीसी
- [5.3/H-0-2] H.265 HEVC
- [5.3/H-0-3] MPEG-4 SP
- [5.3/H-0-4] VP8
- [5.3/H-0-5] VP9
2.2.3. सॉफ़्टवेयर
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [3.4.1/H-0-1]
android.webkit.Webviewएपीआई को पूरी तरह से लागू करना ज़रूरी है. - [3.4.2/H-0-1] इसमें सामान्य उपयोगकर्ता के लिए, वेब ब्राउज़िंग के लिए अलग से ब्राउज़र ऐप्लिकेशन शामिल होना चाहिए.
- [3.8.1/H-SR] यह सुझाव दिया जाता है कि डिफ़ॉल्ट लॉन्चर में, ऐप्लिकेशन में शॉर्टकट और विजेट पिन करने की सुविधा लागू की जाए.
- [3.8.1/H-SR] यह सुझाव दिया जाता है कि डिफ़ॉल्ट लॉन्चर को लागू किया जाए. इससे तीसरे पक्ष के ऐप्लिकेशन से मिले अतिरिक्त शॉर्टकट को ShortcutManager API के ज़रिए तुरंत ऐक्सेस किया जा सकता है.
- [3.8.1/H-SR] यह सुझाव दिया जाता है कि डिवाइस में डिफ़ॉल्ट लॉन्चर ऐप्लिकेशन शामिल हो. यह ऐप्लिकेशन, ऐप्लिकेशन आइकॉन के लिए बैज दिखाता हो.
- [3.8.2/H-SR] तीसरे पक्ष के ऐप्लिकेशन के विजेट इस्तेमाल करने की सुविधा देने का सुझाव दिया जाता है.
- [3.8.3/H-0-1] तीसरे पक्ष के ऐप्लिकेशन को,
NotificationऔरNotificationManagerएपीआई क्लास के ज़रिए, उपयोगकर्ताओं को अहम इवेंट के बारे में सूचनाएं भेजने की अनुमति देनी होगी. - [3.8.3/H-0-2] रिच नोटिफ़िकेशन की सुविधा होनी चाहिए.
- [3.8.3/H-0-3] इसमें स्क्रीन पर सबसे ऊपर सूचना देने वाले कार्ड की सुविधा होनी चाहिए.
- [3.8.3/H-0-4] डिवाइस में सूचना पैनल होना चाहिए. इससे उपयोगकर्ता, सूचनाओं को सीधे तौर पर कंट्रोल कर सकता है. जैसे, जवाब देना, स्नूज़ करना, खारिज करना, और ब्लॉक करना. इसके लिए, उपयोगकर्ता को कार्रवाई करने वाले बटन या कंट्रोल पैनल जैसे विकल्प मिलने चाहिए. ये विकल्प, AOSP में लागू किए गए हैं.
- [3.8.4/H-SR] डिवाइस पर असिस्टेंट को लागू करने का सुझाव दिया जाता है, ताकि सहायता पाने से जुड़ी कार्रवाई को हैंडल किया जा सके.
अगर Android हैंडहेल्ड डिवाइस में लॉक स्क्रीन की सुविधा काम करती है, तो:
- [3.8.10/H-1-1] लॉक स्क्रीन पर सूचनाएं दिखनी चाहिए. इनमें मीडिया सूचना का टेंप्लेट भी शामिल है.
अगर हैंडहेल्ड डिवाइस में सुरक्षित लॉक स्क्रीन की सुविधा काम करती है, तो:
- [3.9/H-1-1] Android SDK के दस्तावेज़ में बताई गई, डिवाइस एडमिनिस्ट्रेशन से जुड़ी सभी नीतियों को लागू करना ज़रूरी है.
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [3.10/H-0-1] तीसरे पक्ष की सुलभता सेवाओं के साथ काम करना ज़रूरी है.
- [3.10/H-SR] डिवाइस पर सुलभता सेवाएं पहले से लोड करने का सुझाव दिया जाता है. ये सेवाएं, बटन से ऐक्सेस करें और TalkBack की सेवाओं के बराबर या उनसे बेहतर होनी चाहिए. साथ ही, ये उन भाषाओं में काम करनी चाहिए जिनके लिए टेक्स्ट को बोली में बदलने वाला इंजन पहले से लोड किया गया है. ये सुलभता सेवाएं, TalkBack के ओपन सोर्स प्रोजेक्ट में दी गई हैं.
- [3.11/H-0-1] तीसरे पक्ष के टीटीएस इंजन इंस्टॉल करने की सुविधा होनी चाहिए.
- [3.11/H-SR] यह सुझाव दिया जाता है कि डिवाइस पर उपलब्ध भाषाओं के साथ काम करने वाला टीटीएस इंजन शामिल किया जाए.
- [3.13/H-SR] क्विक सेटिंग यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट को शामिल करने का सुझाव दिया जाता है.
अगर Android हैंडहेल्ड डिवाइस में सेट किए गए सिस्टम में FEATURE_BLUETOOTH या FEATURE_WIFI के साथ काम करने की सुविधा उपलब्ध है, तो:
- [3.15/H-1-1] इसमें कंपैनियन डिवाइस को डिवाइस से जोड़ने की सुविधा काम करनी चाहिए.
2.2.4. परफ़ॉर्मेंस और पावर
- [8.1/H-0-1] फ़्रेम के इंतज़ार का समय एक जैसा होना चाहिए. फ़्रेम रेंडर होने में लगने वाले समय में अंतर या फ़्रेम रेंडर होने में देरी, एक सेकंड में पांच फ़्रेम से ज़्यादा बार नहीं होनी चाहिए. साथ ही, यह एक सेकंड में एक फ़्रेम से कम होनी चाहिए.
- [8.1/H-0-2] यूज़र इंटरफ़ेस की लेटेन्सी. डिवाइस में सेट किए गए सिस्टम के लिए, यह पक्का करना ज़रूरी है कि उपयोगकर्ता को कम समय में बेहतर अनुभव मिले. इसके लिए, Android Compatibility Test Suite (CTS) में तय की गई 10,000 लिस्ट एंट्री की सूची को 36 सेकंड से कम समय में स्क्रोल करना ज़रूरी है.
- [8.1/H-0-3] टास्क स्विच करना. अगर एक से ज़्यादा ऐप्लिकेशन लॉन्च किए गए हैं, तो पहले से चल रहे ऐप्लिकेशन को लॉन्च करने के बाद, उसे फिर से लॉन्च करने में एक सेकंड से कम समय लगना चाहिए.
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [8.2/H-0-1] ज़रूरी है कि क्रम से लिखने की परफ़ॉर्मेंस कम से कम 5 एमबी/सेकंड हो.
- [8.2/H-0-2] यह पक्का करना ज़रूरी है कि रैंडम राइट परफ़ॉर्मेंस कम से कम 0.5 एमबी/सेकंड हो.
- [8.2/H-0-3] यह पक्का करना ज़रूरी है कि सीक्वेंशियल रीड परफ़ॉर्मेंस कम से कम 15 एमबी/सेकंड हो.
- [8.2/H-0-4] यह पक्का करना ज़रूरी है कि रैंडम रीड की परफ़ॉर्मेंस कम से कम 3.5 एमबी/सेकंड हो.
- [8.3/H-0-1] जिन ऐप्लिकेशन को ऐप स्टैंडबाय और डोज़ मोड में बैटरी बचाने की सुविधा से छूट मिली है उन्हें असली उपयोगकर्ता को दिखाना ज़रूरी है.
- [8.3/H-0-2] ऐप्लिकेशन स्टैंडबाय और बैटरी बचाने वाले डोज़ मोड को ट्रिगर करने, चालू रखने, और वेकअप करने वाले एल्गोरिदम के साथ-साथ, ग्लोबल सिस्टम सेटिंग का इस्तेमाल, Android Open Source Project के मुताबिक होना चाहिए.
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [8.4/H-0-1] हर कॉम्पोनेंट के लिए, पावर प्रोफ़ाइल उपलब्ध कराना ज़रूरी है. इसमें हर हार्डवेयर कॉम्पोनेंट के लिए, ऊर्जा की खपत की मौजूदा वैल्यू और समय के साथ कॉम्पोनेंट की वजह से तेज़ी से बैटरी खर्च होने की अनुमानित जानकारी शामिल होनी चाहिए. यह जानकारी, Android ओपन सोर्स प्रोजेक्ट की साइट पर मौजूद दस्तावेज़ में दी गई है.
- [8.4/H-0-2] यह ज़रूरी है कि बिजली की खपत से जुड़ी सभी वैल्यू को मिलीऐंपियर घंटे (mAh) में दिखाया जाए.
- [8.4/H-0-3] हर प्रोसेस के यूआईडी के हिसाब से, सीपीयू की पावर खपत की जानकारी देना ज़रूरी है. Android Open Source Project,
uid_cputimeकर्नेल मॉड्यूल को लागू करके इस ज़रूरी शर्त को पूरा करता है. - [8.4/H-0-4] ऐप्लिकेशन डेवलपर के लिए,
adb shell dumpsys batterystatsशेल कमांड के ज़रिए, बैटरी के इस्तेमाल की जानकारी उपलब्ध कराना ज़रूरी है. - [8.4/H] अगर किसी ऐप्लिकेशन को हार्डवेयर कॉम्पोनेंट की पावर इस्तेमाल करने का श्रेय नहीं दिया जा सकता, तो हार्डवेयर कॉम्पोनेंट को ही इसका श्रेय दिया जाना चाहिए.
अगर हैंडहेल्ड डिवाइसों में स्क्रीन या वीडियो आउटपुट शामिल है, तो:
- [8.4/H-1-1]
android.intent.action.POWER_USAGE_SUMMARYके मकसद का पालन करना ज़रूरी है. साथ ही, एक सेटिंग मेन्यू दिखाना ज़रूरी है, जिसमें बैटरी के इस्तेमाल की जानकारी दिखती हो.
2.2.5. सुरक्षा मॉडल
हैंडहेल्ड डिवाइसों में सेट किए गए सिस्टम के लिए:
- [9.1/H-0-1] तीसरे पक्ष के ऐप्लिकेशन को
android.permission.PACKAGE_USAGE_STATSअनुमति के ज़रिए, इस्तेमाल से जुड़े आंकड़े ऐक्सेस करने की अनुमति देनी होगी. साथ ही,android.settings.ACTION_USAGE_ACCESS_SETTINGSइंटेंट के जवाब में, उपयोगकर्ताओं को ऐसे ऐप्लिकेशन को ऐक्सेस करने की अनुमति देने या रद्द करने का तरीका उपलब्ध कराना होगा.
2.3. टेलीविज़न से जुड़ी ज़रूरी शर्तें
Android TV डिवाइस का मतलब, Android डिवाइस के ऐसे इंटरफ़ेस से है जो डिजिटल मीडिया, फ़िल्मों, गेम, ऐप्लिकेशन, और/या लाइव टीवी का इस्तेमाल करने के लिए बनाया गया है. इसका इस्तेमाल, करीब दस फ़ीट की दूरी पर बैठे उपयोगकर्ता करते हैं. इसे “लीन बैक” या “10 फ़ीट वाला यूज़र इंटरफ़ेस” भी कहा जाता है.
अगर Android डिवाइस, यहां दी गई सभी शर्तों को पूरा करते हैं, तो उन्हें टेलीविज़न के तौर पर क्लासिफ़ाई किया जाता है:
- डिस्प्ले पर रेंडर किए गए यूज़र इंटरफ़ेस को रिमोट से कंट्रोल करने का तरीका उपलब्ध कराया हो. यह डिस्प्ले, उपयोगकर्ता से 10 फ़ीट की दूरी पर हो सकता है.
- उसमें 24 इंच से ज़्यादा लंबाई वाला डिसप्ले हो या उसमें वीडियो आउटपुट पोर्ट (जैसे, वीजीए, एचडीएमआई, डिसप्ले पोर्ट) या डिसप्ले के लिए वायरलेस पोर्ट हो.
इस सेक्शन में दी गई अन्य ज़रूरी शर्तें, Android Television डिवाइसों में सेट किए जाने वाले सिस्टम के लिए खास तौर पर लागू होती हैं.
2.3.1. हार्डवेयर
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.2.2/T-0-1] डी-पैड की सुविधा होनी चाहिए.
- [7.2.3/T-0-1] होम और बैक फ़ंक्शन उपलब्ध कराने ज़रूरी हैं.
- [7.2.3/T-0-2] बैक फ़ंक्शन (
KEYCODE_BACK) के सामान्य और दबाकर रखने वाले, दोनों इवेंट को फ़ोरग्राउंड ऐप्लिकेशन पर भेजना ज़रूरी है. - [7.2.6.1/T-0-1] इसमें गेम कंट्रोलर के साथ काम करने की सुविधा शामिल होनी चाहिए. साथ ही,
android.hardware.gamepadफ़ीचर फ़्लैग का एलान करना ज़रूरी है. - [7.2.7/T] रिमोट कंट्रोल उपलब्ध कराना चाहिए, ताकि उपयोगकर्ता बिना छुए नेविगेट करने और नेविगेशन के मुख्य बटन के इनपुट को ऐक्सेस कर सकें.
अगर टेलीविज़न डिवाइस में जाइरोस्कोप शामिल है, तो:
- [7.3.4/T-1-1] कम से कम 100 हर्ट्ज़ की फ़्रीक्वेंसी पर इवेंट रिपोर्ट करने की सुविधा होनी चाहिए.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.4.3/T-0-1] इनमें ब्लूटूथ और ब्लूटूथ स्मार्ट काम करना चाहिए.
- [7.6.1/T-0-1] ऐप्लिकेशन के निजी डेटा (इसे "/data" पार्टिशन भी कहा जाता है) के लिए, कम से कम 4 जीबी नॉन-वॉलटाइल स्टोरेज उपलब्ध होना चाहिए.
अगर टीवी डिवाइस में सेट किए गए सिस्टम 32-बिट वाले हैं, तो:
-
[7.6.1/T-1-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 896 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 400 डीपीआई या इससे ज़्यादा
- बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर tvdpi या इससे ज़्यादा
अगर टीवी डिवाइस में सेट किए गए सिस्टम 64-बिट के हैं, तो:
-
[7.6.1/T-2-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 1280 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 400 डीपीआई या इससे ज़्यादा
- बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर tvdpi या इससे ज़्यादा
ध्यान दें कि ऊपर दी गई "कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी" का मतलब, हार्डवेयर कॉम्पोनेंट (जैसे कि रेडियो, वीडियो वगैरह) के लिए पहले से तय की गई मेमोरी के अलावा उपलब्ध मेमोरी स्पेस से है. ये कॉम्पोनेंट, डिवाइस पर कर्नेल के कंट्रोल में नहीं होते हैं.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.8.1/T] में माइक्रोफ़ोन शामिल होना चाहिए.
- [7.8.2/T-0-1] इसमें ऑडियो आउटपुट होना चाहिए और
android.hardware.audio.outputका एलान करना चाहिए.
2.3.2. मल्टीमीडिया
टेलीविज़न डिवाइस में सेट किए गए सिस्टम में, इस ऑडियो एन्कोडिंग का इस्तेमाल किया जाना ज़रूरी है:
- [5.1/T-0-1] MPEG-4 AAC प्रोफ़ाइल (AAC LC)
- [5.1/T-0-2] MPEG-4 HE AAC Profile (AAC+)
- [5.1/T-0-3] AAC ELD (बेहतर लो डिले एएसी)
टेलीविज़न डिवाइस में सेट किए गए सिस्टम में, वीडियो एन्कोडिंग के इन फ़ॉर्मैट का इस्तेमाल किया जाना चाहिए:
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [5.2.2/T-SR] 720 पिक्सल और 1080 पिक्सल रिज़ॉल्यूशन वाले वीडियो की H.264 एन्कोडिंग के लिए, सहायता उपलब्ध कराने का सुझाव दिया जाता है.
- [5.22/T-SR] 30 फ़्रेम प्रति सेकंड (एफ़पीएस) पर 1080 पिक्सल रिज़ॉल्यूशन वाले वीडियो की H.264 एन्कोडिंग के लिए, इन शर्तों को पूरा करना ज़रूरी है.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम में, वीडियो डिकोडिंग के लिए इन फ़ॉर्मैट का इस्तेमाल किया जाना ज़रूरी है:
- [5.3/T-0-1] H.264 एवीसी
- [5.3/T-0-2] H.265 HEVC
- [5.3/T-0-3] MPEG-4 SP
- [5.3/T-0-4] VP8
- [5.3/T-0-5] VP9
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए, वीडियो डिकोडिंग की इन सुविधाओं का इस्तेमाल करने का सुझाव दिया जाता है:
- [5.3/T-SR] MPEG-2
अगर टेलीविज़न डिवाइस में H.264 डिकोडर काम करते हैं, तो:
- [5.3.4/T-1-1] इसमें हाई प्रोफ़ाइल लेवल 4.2 और एचडी 1080 पिक्सल (60 एफ़पीएस पर) डिकोडिंग प्रोफ़ाइल के साथ काम करना ज़रूरी है.
- [5.3.4/T-1-2] इसमें, नीचे दी गई टेबल में बताई गई दोनों एचडी प्रोफ़ाइल वाले वीडियो डिकोड करने की सुविधा होनी चाहिए. साथ ही, यह बेसलाइन प्रोफ़ाइल, मुख्य प्रोफ़ाइल या हाई प्रोफ़ाइल लेवल 4.2 के साथ एन्कोड किया गया हो
अगर टीवी डिवाइस में सेट किए गए सिस्टम, H.265 कोडेक और एचडी 1080 पिक्सल डिकोडिंग प्रोफ़ाइल के साथ काम करते हैं, तो:
- [5.3.5/T-1-1] यह ज़रूरी है कि डिवाइस, Main Profile Level 4.1 Main tier के साथ काम करता हो.
- [5.3.5/T-SR] में, एचडी 1080 पिक्सल के लिए 60 फ़्रेम प्रति सेकंड की वीडियो फ़्रेम दर का सुझाव दिया गया है.
अगर Television डिवाइसों में H.265 कोडेक और यूएचडी डिकोडिंग प्रोफ़ाइल का इस्तेमाल किया जा सकता है, तो:
- [5.3.5/T-2-1] कोडेक में Main10 Level 5 Main Tier प्रोफ़ाइल के साथ काम करने की सुविधा होनी चाहिए.
अगर टेलीविज़न डिवाइस में VP8 कोडेक काम करता है, तो:
- [5.3.6/T-1-1] इसमें एचडी 1080 पिक्सल 60 डेकोडिंग प्रोफ़ाइल काम करनी चाहिए.
अगर टीवी डिवाइस में VP8 कोडेक और 720 पिक्सल का रिज़ॉल्यूशन काम करता है, तो:
- [5.3.6/T-2-1] इसमें एचडी 720 पिक्सल 60 फ़्रेम प्रति सेकंड की डिकोडिंग प्रोफ़ाइल काम करनी चाहिए.
अगर टीवी डिवाइस में VP9 कोडेक और यूएचडी वीडियो डिकोडिंग की सुविधा काम करती है, तो:
- [5.3.7/T-1-1] यह ज़रूरी है कि डिवाइस 8-बिट कलर डेप्थ के साथ काम करता हो. साथ ही, यह भी ज़रूरी है कि डिवाइस VP9 Profile 2 (10-बिट) के साथ काम करता हो.
अगर टेलीविज़न डिवाइसों पर VP9 कोडेक, 1080 पिक्सल प्रोफ़ाइल, और VP9 हार्डवेयर डिकोडिंग की सुविधा काम करती है, तो:
- [5.3.7/T-2-1] 1080 पिक्सल के लिए, 60 एफ़पीएस (फ़्रेम प्रति सेकंड) की सुविधा काम करनी चाहिए.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [5.8/T-SR] सुरक्षित स्ट्रीम को एक साथ डिकोड करने की सुविधा देने का सुझाव दिया जाता है. कम से कम दो स्ट्रीम को एक साथ डिकोड करने की सुविधा होना बेहद ज़रूरी है.
अगर डिवाइसों में Android Television डिवाइसों का इस्तेमाल किया जाता है और उनमें 4K रिज़ॉल्यूशन की सुविधा उपलब्ध है, तो:
- [5.8/T-1-1] सभी वायर्ड एक्सटर्नल डिसप्ले के लिए, HDCP 2.2 के साथ काम करना ज़रूरी है.
अगर टीवी डिवाइस में सेट किए गए सिस्टम में 4K रिज़ॉल्यूशन की सुविधा काम नहीं करती है, तो:
- [5.8/T-2-1] सभी वायर्ड बाहरी डिसप्ले के लिए, HDCP 1.4 के साथ काम करना ज़रूरी है.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [5.5.3/T-0-1] इसमें, सिस्टम के मास्टर वॉल्यूम और डिजिटल ऑडियो आउटपुट वॉल्यूम को कम करने की सुविधा होनी चाहिए. यह सुविधा, कंप्रेस किए गए ऑडियो पासथ्रू आउटपुट को छोड़कर, उन सभी आउटपुट पर काम करनी चाहिए जिन पर यह सुविधा काम करती है. कंप्रेस किए गए ऑडियो पासथ्रू आउटपुट में, डिवाइस पर ऑडियो डिकोड नहीं किया जाता है.
2.3.3. सॉफ़्टवेयर
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [3/T-0-1] यह ज़रूरी है कि
android.software.leanbackऔरandroid.hardware.type.televisionसुविधाओं का एलान किया गया हो. - [3.4.1/T-0-1] में
android.webkit.Webviewएपीआई को पूरी तरह से लागू करना ज़रूरी है.
अगर Android Television डिवाइस में लॉक स्क्रीन की सुविधा काम करती है,तो:
- [3.8.10/T-1-1] लॉक स्क्रीन पर सूचनाएं दिखनी चाहिए. इनमें मीडिया सूचना का टेंप्लेट भी शामिल है.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [3.8.14/T-SR] पिक्चर में पिक्चर (पीआईपी) मोड वाली मल्टी-विंडो सुविधा के साथ काम करने का सुझाव दिया जाता है.
- [3.10/T-0-1] तीसरे पक्ष की सुलभता सेवाओं के साथ काम करना ज़रूरी है.
- [3.10/T-SR] डिवाइस पर सुलभता सेवाएं पहले से लोड करने का सुझाव दिया जाता है. ये सेवाएं, बटन से ऐक्सेस करें और TalkBack की सेवाओं के बराबर या उनसे बेहतर होनी चाहिए. साथ ही, ये उन भाषाओं के लिए उपलब्ध होनी चाहिए जिनके लिए पहले से लोड किए गए टेक्स्ट को स्पीच में बदलने वाले इंजन की सुविधा उपलब्ध है. ये सेवाएं, TalkBack ओपन सोर्स प्रोजेक्ट में दी गई सुलभता सेवाओं के मुताबिक होनी चाहिए.
अगर टेलीविज़न डिवाइसों पर android.hardware.audio.output सुविधा के बारे में जानकारी दी जाती है, तो:
- [3.11/T-SR] यह सुझाव दिया जाता है कि डिवाइस पर उपलब्ध भाषाओं के साथ काम करने वाला टीटीएस इंजन शामिल किया जाए.
- [3.11/T-1-1] इसमें तीसरे पक्ष के टीटीएस इंजन इंस्टॉल करने की सुविधा होनी चाहिए.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [3.12/T-0-1] TV Input Framework के साथ काम करना ज़रूरी है.
2.2.4. परफ़ॉर्मेंस और पावर
- [8.1/T-0-1] फ़्रेम के इंतज़ार का समय एक जैसा होना चाहिए. फ़्रेम रेंडर होने में लगने वाले समय में अंतर या फ़्रेम रेंडर होने में देरी, एक सेकंड में पांच फ़्रेम से ज़्यादा बार नहीं होनी चाहिए. साथ ही, यह एक सेकंड में एक फ़्रेम से कम होनी चाहिए.
- [8.2/T-0-1] ज़रूरी है कि क्रम से लिखने की परफ़ॉर्मेंस कम से कम 5 एमबी/सेकंड हो.
- [8.2/T-0-2] ज़रूरी है कि रैंडम राइट परफ़ॉर्मेंस कम से कम 0.5 एमबी/सेकंड हो.
- [8.2/T-0-3] यह पक्का करना ज़रूरी है कि सीक्वेंशियल रीड की परफ़ॉर्मेंस कम से कम 15 एमबी/सेकंड हो.
-
[8.2/T-0-4] यह पक्का करना ज़रूरी है कि रैंडम रीड की परफ़ॉर्मेंस कम से कम 3.5 एमबी/सेकंड हो.
-
[8.3/T-0-1] जिन ऐप्लिकेशन को App Standby और Doze पावर-सेविंग मोड से छूट मिली है उन्हें असली उपयोगकर्ता को दिखना चाहिए.
- [8.3/T-0-2] ऐप्लिकेशन स्टैंडबाय और बैटरी बचाने के लिए उपलब्ध डोज़ मोड को ट्रिगर करने, चालू रखने, और वेकअप करने वाले एल्गोरिदम, Android Open Source Project के मुताबिक होने चाहिए. साथ ही, इनमें ग्लोबल सिस्टम सेटिंग का इस्तेमाल भी Android Open Source Project के मुताबिक होना चाहिए.
टेलीविज़न डिवाइस में सेट किए गए सिस्टम के लिए:
- [8.4/T-0-1] हर कॉम्पोनेंट के लिए, पावर प्रोफ़ाइल उपलब्ध कराना ज़रूरी है. इसमें हर हार्डवेयर कॉम्पोनेंट के लिए, मौजूदा खपत की वैल्यू और समय के साथ कॉम्पोनेंट की वजह से बैटरी खत्म होने की अनुमानित दर के बारे में बताया गया हो. यह जानकारी, Android Open Source Project की साइट पर मौजूद दस्तावेज़ में दी गई हो.
- [8.4/T-0-2] यह ज़रूरी है कि बिजली की खपत से जुड़ी सभी वैल्यू को मिलीऐंपियर घंटे (mAh) में रिपोर्ट किया जाए.
- [8.4/T-0-3] हर प्रोसेस के यूआईडी के हिसाब से, सीपीयू की पावर खपत की जानकारी देना ज़रूरी है. Android Open Source Project,
uid_cputimeकर्नेल मॉड्यूल को लागू करके इस ज़रूरी शर्त को पूरा करता है. - [8.4/T] अगर किसी ऐप्लिकेशन को हार्डवेयर कॉम्पोनेंट की पावर इस्तेमाल करने का श्रेय नहीं दिया जा सकता, तो हार्डवेयर कॉम्पोनेंट को ही इसका श्रेय दिया जाना चाहिए.
- [8.4/T-0-4] ऐप्लिकेशन डेवलपर के लिए,
adb shell dumpsys batterystatsशेल कमांड के ज़रिए, बैटरी के इस्तेमाल से जुड़ी यह जानकारी उपलब्ध कराना ज़रूरी है.
2.4. स्मार्टवॉच से जुड़ी ज़रूरी शर्तें
Android Watch डिवाइस का मतलब, Android डिवाइस के ऐसे वर्शन से है जिसे शरीर पर पहना जा सकता है. जैसे, कलाई पर.
अगर Android डिवाइस में ये सभी शर्तें पूरी होती हैं, तो उसे स्मार्टवॉच के तौर पर क्लासिफ़ाई किया जाता है:
- स्क्रीन की फ़िज़िकल डायगोनल लंबाई 1.1 से 2.5 इंच के बीच होनी चाहिए.
- उसे शरीर पर पहनने के लिए बनाया गया हो.
इस सेक्शन में दी गई अन्य ज़रूरी शर्तें, Android Watch डिवाइसों में सेट किए जाने वाले सिस्टम के लिए हैं.
2.4.1. हार्डवेयर
स्मार्टवॉच में सेट किए गए सिस्टम के लिए:
-
[7.1.1.1/W-0-1] डिवाइस में ऐसी स्क्रीन होनी चाहिए जिसकी फ़िज़िकल डाइगोनल साइज़ 1.1 से 2.5 इंच के बीच हो.
-
[7.2.3/W-0-1] उपयोगकर्ता के लिए, होम फ़ंक्शन उपलब्ध होना चाहिए. साथ ही, बैक फ़ंक्शन भी उपलब्ध होना चाहिए. हालांकि,
UI_MODE_TYPE_WATCHमें होने पर बैक फ़ंक्शन उपलब्ध नहीं होना चाहिए. -
[7.2.4/W-0-1] इसमें टचस्क्रीन इनपुट की सुविधा होनी चाहिए.
-
[7.3.1/W-SR] 3-ऐक्सिस एक्सलरोमीटर शामिल करने का सुझाव दिया जाता है.
-
[7.4.3/W-0-1] इसमें ब्लूटूथ की सुविधा होनी चाहिए.
-
[7.6.1/W-0-1] ऐप्लिकेशन के निजी डेटा (इसे "/data" पार्टिशन भी कहा जाता है) के लिए, कम से कम 1 जीबी नॉन-वॉलटाइल स्टोरेज उपलब्ध होना चाहिए
-
[7.6.1/W-0-2] कर्नेल और यूज़रस्पेस के लिए, कम से कम 416 एमबी मेमोरी उपलब्ध होनी चाहिए.
-
[7.8.1/W-0-1] इसमें माइक्रोफ़ोन शामिल होना ज़रूरी है.
-
[7.8.2/W] MAY but SHOULD NOT have audio output.
2.4.2. मल्टीमीडिया
कोई अन्य ज़रूरी शर्तें नहीं हैं.
2.4.3. सॉफ़्टवेयर
स्मार्टवॉच में सेट किए गए सिस्टम के लिए:
- [3/W-0-1]
android.hardware.type.watchसुविधा का एलान करना ज़रूरी है. - [3/W-0-2] MUST support uiMode = UI_MODE_TYPE_WATCH.
स्मार्टवॉच में सेट किए गए सिस्टम के लिए:
- [3.8.4/W-SR] सहायता वाली कार्रवाई को हैंडल करने के लिए, डिवाइस पर कोई असिस्टेंट लागू करने का सुझाव दिया जाता है.
android.hardware.audio.output फ़ीचर फ़्लैग का एलान करने वाले स्मार्टवॉच डिवाइसों के लिए:
- [3.10/W-1-1] तीसरे पक्ष की सुलभता सेवाओं के साथ काम करना ज़रूरी है.
- [3.10/W-SR] डिवाइस पर सुलभता सेवाएं पहले से लोड करने का सुझाव दिया जाता है. ये सेवाएं, बटन से ऐक्सेस करें और TalkBack की सेवाओं के बराबर या उनसे बेहतर होनी चाहिए. साथ ही, ये सेवाएं उन भाषाओं के लिए उपलब्ध होनी चाहिए जिनके लिए पहले से लोड किए गए टेक्स्ट को बोली में बदलने वाले इंजन की सुविधा उपलब्ध है. ये सेवाएं, TalkBack ओपन सोर्स प्रोजेक्ट में दी गई सुलभता सेवाओं के मुताबिक होनी चाहिए.
अगर वॉच डिवाइसों पर android.hardware.audio.output सुविधा काम करती है, तो:
-
[3.11/W-SR] डिवाइस पर उपलब्ध भाषाओं के साथ काम करने वाला टीटीएस इंजन शामिल करने का सुझाव दिया जाता है.
-
[3.11/W-0-1] तीसरे पक्ष के टीटीएस इंजन इंस्टॉल करने की सुविधा होनी चाहिए.
2.5. वाहन से जुड़ी ज़रूरी शर्तें
Android Automotive को लागू करने का मतलब है कि वाहन की हेड यूनिट, Android को ऑपरेटिंग सिस्टम के तौर पर इस्तेमाल करती है. ऐसा सिस्टम के कुछ या सभी हिस्सों के लिए और/या इंफ़ोटेनमेंट की सुविधा के लिए किया जाता है.
Android डिवाइसों को Automotive के तौर पर तब क्लासिफ़ाई किया जाता है, जब वे android.hardware.type.automotive सुविधा का एलान करते हैं या यहां दी गई सभी शर्तें पूरी करते हैं.
- जिन्हें किसी वाहन में एम्बेड किया गया हो या प्लग किया जा सकता हो.
- ड्राइवर की सीट वाली लाइन में मौजूद स्क्रीन को मुख्य डिसप्ले के तौर पर इस्तेमाल कर रहे हों.
इस सेक्शन में दी गई अन्य ज़रूरी शर्तें, Android Automotive डिवाइसों में सेट किए जाने वाले सिस्टम के लिए हैं.
2.5.1. हार्डवेयर
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.1.1.1/A-0-1] स्क्रीन का साइज़, कम से कम 6 इंच होना चाहिए.
-
[7.1.1.1/A-0-2] स्क्रीन का साइज़ कम से कम 750 डीपी x 480 डीपी होना चाहिए.
-
[7.2.3/A-0-1] इसमें होम फ़ंक्शन होना ज़रूरी है. साथ ही, इसमें बैक और हाल ही के फ़ंक्शन हो सकते हैं.
-
[7.2.3/A-0-2] बैक फ़ंक्शन (
KEYCODE_BACK) के सामान्य और लंबे समय तक दबाए रखने वाले इवेंट, दोनों को फ़ोरग्राउंड ऐप्लिकेशन पर भेजना ज़रूरी है. -
[7.3.1/A-SR] 3-ऐक्सिस एक्सलरोमीटर शामिल करने का सुझाव दिया जाता है.
अगर Automotive डिवाइस में सेट किए गए सिस्टम में 3-ऐक्सिस एक्सलरोमीटर शामिल है, तो:
- [7.3.1/A-1-1] को कम से कम 100 हर्ट्ज़ की फ़्रीक्वेंसी तक इवेंट रिपोर्ट करने में सक्षम होना चाहिए.
- [7.3.1/A-1-2] को Android कार सेंसर कोऑर्डिनेट सिस्टम का पालन करना होगा.
अगर Automotive डिवाइस में सेट किए हुए सिस्टम में जीपीएस/जीएनएसएस रिसीवर शामिल है और android.hardware.location.gps फ़ीचर फ़्लैग के ज़रिए, ऐप्लिकेशन को इस सुविधा के बारे में जानकारी दी जाती है, तो:
- [7.3.3/A-1-1] GNSS टेक्नोलॉजी जनरेशन "2017" या उसके बाद का होना चाहिए.
अगर Automotive डिवाइस में सेट किए गए सिस्टम में जाइरोस्कोप शामिल है, तो:
- [7.3.4/A-1-1] कम से कम 100 हर्ट्ज़ की फ़्रीक्वेंसी तक इवेंट रिपोर्ट करने की सुविधा होनी चाहिए.
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.3.11/A] को मौजूदा गियर की जानकारी
SENSOR_TYPE_GEARके तौर पर देनी चाहिए.
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.3.11.2/A-0-1] इसमें
SENSOR_TYPE_NIGHTके तौर पर तय किया गया डे/नाइट मोड काम करना चाहिए. - [7.3.11.2/A-0-2]
SENSOR_TYPE_NIGHTफ़्लैग की वैल्यू, डैशबोर्ड के डे/नाइट मोड के मुताबिक ही होनी चाहिए. साथ ही, यह स्क्रीन की रोशनी को अपने-आप घटाने-बढ़ाने वाले सेंसर के इनपुट पर आधारित होनी चाहिए. -
स्क्रीन की रोशनी को अपने-आप घटाने-बढ़ाने वाला सेंसर, फ़ोटोमीटर के जैसा हो सकता है.
-
[7.3.11.3/A-0-1] इसमें ड्राइविंग स्टेटस के तौर पर
SENSOR_TYPE_DRIVING_STATUSको सपोर्ट करना ज़रूरी है. साथ ही, जब वाहन पूरी तरह से रुक जाए और पार्क हो जाए, तब इसकी डिफ़ॉल्ट वैल्यूDRIVE_STATUS_UNRESTRICTEDहोनी चाहिए. डिवाइस बनाने वाली कंपनियों की यह ज़िम्मेदारी है कि वेSENSOR_TYPE_DRIVING_STATUSको उन सभी कानूनों और नियमों के मुताबिक कॉन्फ़िगर करें जो उन देशों पर लागू होते हैं जहां प्रॉडक्ट को शिप किया जा रहा है. -
[7.3.11.4/A-0-1] वाहन की स्पीड की जानकारी देना ज़रूरी है. इसे
SENSOR_TYPE_CAR_SPEEDके तौर पर तय किया गया है. -
[7.4.3/A-0-1] इनमें ब्लूटूथ काम करना चाहिए. साथ ही, इनमें ब्लूटूथ स्मार्ट काम करना चाहिए.
- [7.4.3/A-0-2] Android Automotive को लागू करने वाले डिवाइसों में, इन ब्लूटूथ प्रोफ़ाइलों के साथ काम करने की सुविधा होनी चाहिए:
- हैंड्स-फ़्री प्रोफ़ाइल (एचएफ़पी) के ज़रिए फ़ोन कॉल करने की सुविधा.
- ऑडियो डिस्ट्रिब्यूशन प्रोफ़ाइल (A2DP) के ज़रिए मीडिया प्लेबैक.
- रिमोट कंट्रोल प्रोफ़ाइल (एवीआरसीपी) के ज़रिए मीडिया प्लेबैक को कंट्रोल करना.
- फ़ोन बुक ऐक्सेस प्रोफ़ाइल (पीबीएपी) का इस्तेमाल करके संपर्क शेयर करने की सुविधा.
-
[7.4.3/A] में मैसेज ऐक्सेस प्रोफ़ाइल (एमएपी) की सुविधा होनी चाहिए.
-
[7.4.5/A] में, मोबाइल नेटवर्क के ज़रिए डेटा कनेक्टिविटी की सुविधा होनी चाहिए.
-
[7.6.1/A-0-1] ऐप्लिकेशन के निजी डेटा (इसे "/data" पार्टिशन भी कहा जाता है) के लिए, कम से कम 4 जीबी नॉन-वॉलटाइल स्टोरेज उपलब्ध होना चाहिए.
अगर Automotive डिवाइस में सेट किए गए सिस्टम 32-बिट वाले हैं, तो:
-
[7.6.1/A-1-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए कम से कम 512 एमबी मेमोरी उपलब्ध होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 280 डीपीआई या इससे कम
- बहुत बड़ी स्क्रीन पर ldpi या इससे कम
- बड़ी स्क्रीन पर mdpi या इससे कम
-
[7.6.1/A-1-2] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए कम से कम 608 एमबी मेमोरी उपलब्ध होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर xhdpi या इससे ज़्यादा
- बड़ी स्क्रीन पर hdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर mdpi या इससे ज़्यादा
-
[7.6.1/A-1-3] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए कम से कम 896 एमबी मेमोरी उपलब्ध होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 400 डीपीआई या इससे ज़्यादा
- बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर tvdpi या इससे ज़्यादा
-
[7.6.1/A-1-4] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए कम से कम 1344 एमबी मेमोरी उपलब्ध होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 560dpi या इससे ज़्यादा
- बड़ी स्क्रीन पर 400dpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
अगर Automotive डिवाइस में सेट किए गए सिस्टम 64-बिट वाले हैं, तो:
-
[7.6.1/A-2-1] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए कम से कम 816 एमबी मेमोरी उपलब्ध होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 280 डीपीआई या इससे कम
- बहुत बड़ी स्क्रीन पर ldpi या इससे कम
- बड़ी स्क्रीन पर mdpi या इससे कम
-
[7.6.1/A-2-2] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए कम से कम 944 एमबी मेमोरी उपलब्ध होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर xhdpi या इससे ज़्यादा
- बड़ी स्क्रीन पर hdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर mdpi या इससे ज़्यादा
-
[7.6.1/A-2-3] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 1280 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 400 डीपीआई या इससे ज़्यादा
- बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर tvdpi या इससे ज़्यादा
-
[7.6.1/A-2-4] अगर इनमें से किसी भी डेंसिटी का इस्तेमाल किया जाता है, तो कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी कम से कम 1824 एमबी होनी चाहिए:
- छोटी/सामान्य स्क्रीन पर 560dpi या इससे ज़्यादा
- बड़ी स्क्रीन पर 400dpi या इससे ज़्यादा
- ज़्यादा बड़ी स्क्रीन पर xhdpi या इससे ज़्यादा
ध्यान दें कि ऊपर दी गई "कर्नेल और यूज़रस्पेस के लिए उपलब्ध मेमोरी" का मतलब, हार्डवेयर कॉम्पोनेंट (जैसे कि रेडियो, वीडियो वगैरह) के लिए पहले से तय की गई मेमोरी के अलावा उपलब्ध मेमोरी स्पेस से है. ये कॉम्पोनेंट, डिवाइस पर कर्नेल के कंट्रोल में नहीं होते हैं.
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.7.1/A] में, पेरिफ़ेरल मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल होना चाहिए.
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.8.1/A-0-1] इसमें माइक्रोफ़ोन शामिल होना ज़रूरी है.
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [7.8.2/A-0-1] इसमें ऑडियो आउटपुट होना चाहिए और
android.hardware.audio.outputका एलान करना चाहिए.
2.5.2. मल्टीमीडिया
Automotive डिवाइस में सेट किए गए सिस्टम में, ऑडियो को इस तरह से एन्कोड किया जाना ज़रूरी है:
- [5.1/A-0-1] MPEG-4 AAC प्रोफ़ाइल (AAC LC)
- [5.1/A-0-2] MPEG-4 HE AAC प्रोफ़ाइल (AAC+)
- [5.1/A-0-3] AAC ELD (बेहतर लो डिले एएसी)
Automotive डिवाइस में सेट किए गए सिस्टम में, यहां दी गई वीडियो एन्कोडिंग का इस्तेमाल किया जाना चाहिए:
Automotive डिवाइस में सेट किए गए सिस्टम में, वीडियो डिकोडिंग की ये सुविधाएं काम करनी चाहिए:
Automotive डिवाइस में सेट किए गए सिस्टम के लिए, वीडियो डिकोडिंग की इन सुविधाओं का इस्तेमाल करना बेहद ज़रूरी है:
- [5.3/A-SR] H.265 HEVC
2.5.3. सॉफ़्टवेयर
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [3/A-0-1]
android.hardware.type.automotiveसुविधा का एलान करना ज़रूरी है. - [3/A-0-2] इसमें uiMode = UI_MODE_TYPE_CAR के साथ काम करने की सुविधा होनी चाहिए.
-
[3/A-0-3] Android Automotive के सभी वर्शन में,
android.car.*नेमस्पेस में मौजूद सभी सार्वजनिक एपीआई काम करने चाहिए. -
[3.4.1/A-0-1]
android.webkit.Webviewएपीआई को पूरी तरह से लागू करना ज़रूरी है. -
[3.8.3/A-0-1] तीसरे पक्ष के ऐप्लिकेशन के अनुरोध करने पर,
Notification.CarExtenderएपीआई का इस्तेमाल करके सूचनाएं दिखाना ज़रूरी है. -
[3.8.4/A-0-1] डिवाइस पर, Assistant ऐक्शन को हैंडल करने के लिए, Assistant की सुविधा लागू करना ज़रूरी है.
-
[3.14/A-0-1] इसमें यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क शामिल होना चाहिए, ताकि तीसरे पक्ष के ऐप्लिकेशन, सेक्शन 3.14 में बताए गए मीडिया एपीआई का इस्तेमाल कर सकें.
2.2.4. परफ़ॉर्मेंस और पावर
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [8.3/A-0-1] जिन ऐप्लिकेशन को ऐप स्टैंडबाय और बैटरी बचाएं के बैटरी सेव करने वाले मोड से छूट मिली है उन्हें असली उपयोगकर्ता को दिखना चाहिए.
-
[8.3/A-0-2] ऐप्लिकेशन स्टैंडबाय और बैटरी बचाने वाले डोज़ मोड को ट्रिगर करने, चालू रखने, और वेकअप करने वाले एल्गोरिदम, Android Open Source Project से अलग नहीं होने चाहिए. साथ ही, इनमें ग्लोबल सिस्टम सेटिंग का इस्तेमाल भी Android Open Source Project के मुताबिक होना चाहिए.
-
[8.4/A-0-1] हर कॉम्पोनेंट के लिए, पावर प्रोफ़ाइल उपलब्ध कराना ज़रूरी है. इसमें हर हार्डवेयर कॉम्पोनेंट के लिए, ऊर्जा की खपत की मौजूदा वैल्यू और समय के साथ कॉम्पोनेंट की वजह से बैटरी खत्म होने की अनुमानित जानकारी शामिल होनी चाहिए. यह जानकारी, Android Open Source Project की साइट पर मौजूद दस्तावेज़ में दी गई है.
- [8.4/A-0-2] यह ज़रूरी है कि बिजली की खपत से जुड़ी सभी वैल्यू को मिलीऐंपियर घंटे (mAh) में दिखाया जाए.
- [8.4/A-0-3] हर प्रोसेस के यूआईडी के हिसाब से, सीपीयू की पावर खपत की जानकारी देना ज़रूरी है. Android Open Source Project,
uid_cputimeकर्नेल मॉड्यूल को लागू करके इस ज़रूरी शर्त को पूरा करता है. - [8.4/A] अगर किसी ऐप्लिकेशन को हार्डवेयर कॉम्पोनेंट की बैटरी इस्तेमाल करने का क्रेडिट नहीं दिया जा सकता, तो हार्डवेयर कॉम्पोनेंट को ही क्रेडिट दिया जाना चाहिए.
- [8.4/A-0-4] ऐप्लिकेशन डेवलपर के लिए,
adb shell dumpsys batterystatsशेल कमांड के ज़रिए, बैटरी के इस्तेमाल की जानकारी उपलब्ध कराना ज़रूरी है.
2.2.5. सुरक्षा मॉडल
अगर Automotive डिवाइस में सेट किए गए सिस्टम में एक से ज़्यादा उपयोगकर्ता शामिल हैं, तो:
- [9.5/A-1-1] इसमें एक गेस्ट खाता शामिल होना चाहिए. इससे उपयोगकर्ता को लॉग इन किए बिना, वाहन के सिस्टम की ओर से उपलब्ध कराए गए सभी फ़ंक्शन इस्तेमाल करने की अनुमति मिलती है.
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- [9.14/A-0-1] Android फ़्रेमवर्क के वाहन सबसिस्टम से मिले मैसेज को गेटकीप करना ज़रूरी है. जैसे, अनुमति वाले मैसेज टाइप और मैसेज सोर्स को अनुमति देना.
- [9.14/A-0-2] Android फ़्रेमवर्क या तीसरे पक्ष के ऐप्लिकेशन से सेवा से इनकार करने वाले हमलों के ख़िलाफ़, वॉचडॉग को काम करना चाहिए. इससे, नुकसान पहुंचाने वाले सॉफ़्टवेयर को वाहन के नेटवर्क में ट्रैफ़िक बढ़ाने से रोका जा सकता है. इससे वाहन के सबसिस्टम में खराबी आ सकती है.
2.6. टैबलेट से जुड़ी ज़रूरी शर्तें
Android टैबलेट डिवाइस का मतलब, Android डिवाइस के ऐसे वर्शन से है जिसे आम तौर पर दोनों हाथों से पकड़ा जाता है. यह क्लैमशेल फ़ॉर्म-फ़ैक्टर में नहीं होता है.
Android डिवाइसों को टैबलेट के तौर पर तब क्लासिफ़ाई किया जाता है, जब वे ये सभी शर्तें पूरी करते हों:
- उसमें बैटरी जैसा पावर सोर्स हो, ताकि उसे आसानी से एक जगह से दूसरी जगह ले जाया जा सके.
- स्क्रीन का फ़िज़िकल डाइगनल साइज़ 7 से 18 इंच के बीच हो.
टैबलेट डिवाइस में सेट किए हुए सिस्टम के लिए, कंप्लायंस टेस्ट की ज़रूरी शर्तें, हैंडहेल्ड डिवाइस में सेट किए हुए सिस्टम के लिए ज़रूरी शर्तों जैसी ही होती हैं. अपवादों को उस सेक्शन में और * से दिखाया गया है. साथ ही, इस सेक्शन में रेफ़रंस के लिए नोट किया गया है.
2.4.1. हार्डवेयर
स्क्रीन का साइज़
- [7.1.1.1/Tab-0-1] स्क्रीन का साइज़ 7 से 18 इंच के बीच होना चाहिए.
कम से कम मेमोरी और स्टोरेज (सेक्शन 7.6.1)
हाथ में पकड़कर इस्तेमाल किए जाने वाले डिवाइसों के लिए ज़रूरी शर्तों में, छोटी/सामान्य स्क्रीन के लिए बताई गई स्क्रीन डेंसिटी, टैबलेट पर लागू नहीं होती.
यूएसबी पेरिफ़ेरल मोड (सेक्शन 7.7.1)
अगर टैबलेट डिवाइस में, सहायक डिवाइस मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [7.7.1/Tab]Android Open Accessory (AOA) API को लागू किया जा सकता है.
वर्चुअल रिएलिटी मोड (सेक्शन 7.9.1)
वर्चुअल रिएलिटी हाई परफ़ॉर्मेंस (सेक्शन 7.9.2)
वर्चुअल रियलिटी की ज़रूरी शर्तें, टैबलेट पर लागू नहीं होती हैं.
3. सॉफ़्टवेयर
3.1. Managed API के साथ काम करने की सुविधा
मैनेज किया गया Dalvik बाइटकोड एक्ज़ीक्यूशन एनवायरमेंट, Android ऐप्लिकेशन के लिए मुख्य प्लैटफ़ॉर्म है. Android ऐप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई), Android प्लैटफ़ॉर्म इंटरफ़ेस का सेट होता है. यह मैनेज किए जा रहे रनटाइम एनवायरमेंट में चल रहे ऐप्लिकेशन के लिए उपलब्ध होता है.
-
[C-0-1] डिवाइसों में, Android SDK या अपस्ट्रीम Android सोर्स कोड में “@SystemApi” मार्कर से सजाए गए किसी भी एपीआई के सभी दस्तावेज़ों में बताए गए व्यवहारों के साथ-साथ, सभी दस्तावेज़ों में बताए गए एपीआई को पूरी तरह से लागू करना ज़रूरी है.
-
[C-0-2] डिवाइस में सेट किए गए सिस्टम को, TestApi एनोटेशन (@TestApi) से मार्क की गई सभी क्लास, तरीकों, और उनसे जुड़े एलिमेंट को सपोर्ट करना/सुरक्षित रखना ज़रूरी है.
-
[C-0-3] डिवाइसों में लागू किए गए एपीआई को मैनेज किए गए किसी भी एपीआई को नहीं छोड़ना चाहिए. साथ ही, एपीआई इंटरफ़ेस या सिग्नेचर में बदलाव नहीं करना चाहिए. इसके अलावा, उन्हें दस्तावेज़ में बताए गए तरीके से काम करना चाहिए. साथ ही, उनमें नो-ऑप्स शामिल नहीं होने चाहिए. हालांकि, इस Compatibility Definition में खास तौर पर अनुमति दी गई हो, तो ऐसा किया जा सकता है.
-
[C-0-4] डिवाइसों पर, एपीआई मौजूद होने चाहिए और वे सही तरीके से काम करने चाहिए. भले ही, Android में शामिल कुछ हार्डवेयर सुविधाओं के लिए एपीआई हटा दिए गए हों. इस स्थिति के लिए ज़रूरी शर्तें जानने के लिए, सेक्शन 7 देखें.
3.1.1. Android एक्सटेंशन
Android में, एपीआई लेवल के वर्शन को बदले बिना मैनेज किए गए एपीआई को बढ़ाने की सुविधा शामिल है.
- [C-0-1] Android डिवाइसों में, शेयर की गई लाइब्रेरी
ExtSharedऔर सेवाओंExtServicesके AOSP वर्शन को पहले से लोड करना ज़रूरी है. इनका वर्शन, हर एपीआई लेवल के लिए अनुमति वाले कम से कम वर्शन के बराबर या उससे ज़्यादा होना चाहिए. उदाहरण के लिए, Android 7.0 डिवाइसों पर एपीआई लेवल 24 का इस्तेमाल करने के लिए, कम से कम वर्शन 1 शामिल होना चाहिए.
3.2. सॉफ़्ट एपीआई कंपैटिबिलिटी
Android में, सेक्शन 3.1 में बताए गए मैनेज किए गए एपीआई के अलावा, सिर्फ़ रनटाइम में काम करने वाला एक अहम “सॉफ़्ट” एपीआई भी शामिल होता है. यह एपीआई, इंटेंट, अनुमतियों, और Android ऐप्लिकेशन के ऐसे ही पहलुओं के तौर पर काम करता है जिन्हें ऐप्लिकेशन कंपाइल करने के समय लागू नहीं किया जा सकता.
3.2.1. अनुमतियां
- [C-0-1] डिवाइस बनाने वाली कंपनियों को, अनुमति के रेफ़रंस पेज पर दिए गए सभी अनुमति के कॉन्स्टेंट को लागू करना होगा और उनका पालन करना होगा. ध्यान दें कि सेक्शन 9 में, Android के सुरक्षा मॉडल से जुड़ी अन्य ज़रूरी शर्तों के बारे में बताया गया है.
3.2.2. पैरामीटर बनाना
Android API में, android.os.Build क्लास पर कई कॉन्स्टेंट शामिल होते हैं. इनका मकसद, मौजूदा डिवाइस के बारे में जानकारी देना होता है.
- [C-0-1] डिवाइसों पर एक जैसी और काम की वैल्यू देने के लिए, यहां दी गई टेबल में इन वैल्यू के फ़ॉर्मैट पर कुछ और पाबंदियां दी गई हैं. डिवाइसों को इन पाबंदियों का पालन करना होगा.
| पैरामीटर | जानकारी |
|---|---|
| VERSION.RELEASE | मौजूदा समय में चल रहे Android सिस्टम का वर्शन, जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. इस फ़ील्ड में, 8.0 में दी गई स्ट्रिंग वैल्यू में से कोई एक वैल्यू होनी चाहिए. |
| VERSION.SDK | यह Android सिस्टम का वह वर्शन है जो फ़िलहाल चल रहा है. इसे तीसरे पक्ष के ऐप्लिकेशन कोड के लिए उपलब्ध कराया जाता है. Android 8.0 के लिए, इस फ़ील्ड में पूर्णांक वैल्यू 8.0_INT होनी चाहिए. |
| VERSION.SDK_INT | यह Android सिस्टम का वह वर्शन है जो फ़िलहाल चल रहा है. इसे तीसरे पक्ष के ऐप्लिकेशन कोड के लिए उपलब्ध कराया जाता है. Android 8.0 के लिए, इस फ़ील्ड में पूर्णांक वैल्यू 8.0_INT होनी चाहिए. |
| VERSION.INCREMENTAL | यह वैल्यू, डिवाइस बनाने वाली कंपनी चुनती है. इससे, फ़िलहाल चल रहे Android सिस्टम के खास बिल्ड के बारे में पता चलता है. यह वैल्यू, इंसानों के पढ़ने लायक फ़ॉर्मैट में होती है. इस वैल्यू का दोबारा इस्तेमाल नहीं किया जाना चाहिए. ऐसा तब होता है, जब असली उपयोगकर्ताओं के लिए अलग-अलग बिल्ड उपलब्ध कराए जाते हैं. इस फ़ील्ड का इस्तेमाल आम तौर पर यह बताने के लिए किया जाता है कि बिल्ड जनरेट करने के लिए, किस बिल्ड नंबर या सोर्स-कंट्रोल चेंज आइडेंटिफ़ायर का इस्तेमाल किया गया था. इस फ़ील्ड के लिए, किसी खास फ़ॉर्मैट की ज़रूरत नहीं होती. हालांकि, यह ज़रूरी है कि यह फ़ील्ड शून्य या खाली स्ट्रिंग ("") न हो. |
| बोर्ड | यह वैल्यू, डिवाइस बनाने वाली कंपनी चुनती है. इससे डिवाइस में इस्तेमाल किए गए इंटरनल हार्डवेयर की पहचान होती है. यह वैल्यू, इंसानों के पढ़ने लायक फ़ॉर्मैट में होती है. इस फ़ील्ड का इस्तेमाल, डिवाइस को पावर देने वाले बोर्ड के किसी खास वर्शन के बारे में बताने के लिए किया जा सकता है. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9_-]+$” से मेल खानी चाहिए. |
| ब्रैंड | यह वैल्यू, डिवाइस से जुड़े ब्रैंड के नाम को दिखाती है. यह नाम, असली उपयोगकर्ताओं को दिखता है. यह ऐसा होना चाहिए जिसे आसानी से पढ़ा जा सके. साथ ही, इससे डिवाइस के मैन्युफ़ैक्चरर या उस कंपनी के ब्रैंड का पता चलना चाहिए जिसके नाम पर डिवाइस की मार्केटिंग की जाती है. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9_-]+$” से मेल खानी चाहिए. |
| SUPPORTED_ABIS | नेटिव कोड के निर्देश सेट (सीपीयू टाइप + एबीआई कन्वेंशन) का नाम. सेक्शन 3.3 देखें. Native API Compatibility. |
| SUPPORTED_32_BIT_ABIS | नेटिव कोड के निर्देश सेट (सीपीयू टाइप + एबीआई कन्वेंशन) का नाम. सेक्शन 3.3 देखें. Native API Compatibility. |
| SUPPORTED_64_BIT_ABIS | नेटिव कोड के दूसरे इंस्ट्रक्शन सेट (सीपीयू टाइप + एबीआई कन्वेंशन) का नाम. सेक्शन 3.3 देखें. Native API Compatibility. |
| CPU_ABI | नेटिव कोड के निर्देश सेट (सीपीयू टाइप + एबीआई कन्वेंशन) का नाम. सेक्शन 3.3 देखें. Native API Compatibility. |
| CPU_ABI2 | नेटिव कोड के दूसरे इंस्ट्रक्शन सेट (सीपीयू टाइप + एबीआई कन्वेंशन) का नाम. सेक्शन 3.3 देखें. Native API Compatibility. |
| डिवाइस | यह वैल्यू, डिवाइस को लागू करने वाले व्यक्ति या कंपनी ने चुनी है. इसमें डेवलपमेंट का नाम या कोड नेम होता है. इससे डिवाइस के हार्डवेयर की सुविधाओं और इंडस्ट्रियल डिज़ाइन के कॉन्फ़िगरेशन की पहचान होती है. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9_-]+$” से मेल खानी चाहिए. प्रॉडक्ट के जीवनकाल के दौरान, डिवाइस का यह नाम नहीं बदलना चाहिए. |
| फ़िंगरप्रिंट |
यह एक स्ट्रिंग होती है, जो इस बिल्ड की खास तौर पर पहचान करती है. यह आसानी से पढ़ा जा सकने वाला होना चाहिए. यह इस टेंप्लेट के मुताबिक होना चाहिए:
$(BRAND)/$(PRODUCT)/ उदाहरण के लिए:
acme/myproduct/ फ़िंगरप्रिंट में खाली सफ़ेद जगह वाले वर्ण शामिल नहीं होने चाहिए. अगर ऊपर दिए गए टेंप्लेट में शामिल अन्य फ़ील्ड में खाली सफ़ेद जगह वाले वर्ण हैं, तो उन्हें बिल्ड फ़िंगरप्रिंट में किसी दूसरे वर्ण से बदलना होगा. जैसे, अंडरस्कोर ("_") वर्ण. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. |
| हार्डवेयर | हार्डवेयर का नाम (कर्नेल कमांड लाइन या /proc से). यह आसानी से पढ़ा जा सकने वाला होना चाहिए. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9_-]+$” से मेल खानी चाहिए. |
| HOST | यह एक ऐसी स्ट्रिंग होती है जो उस होस्ट की खास तौर पर पहचान करती है जिस पर बिल्ड बनाया गया था. यह स्ट्रिंग, ऐसे फ़ॉर्मैट में होती है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. इस फ़ील्ड के लिए, किसी खास फ़ॉर्मैट की ज़रूरत नहीं होती. हालांकि, यह ज़रूरी है कि यह फ़ील्ड शून्य या खाली स्ट्रिंग ("") न हो. |
| आईडी | यह एक आइडेंटिफ़ायर है. इसे डिवाइस बनाने वाली कंपनी चुनती है. इसका इस्तेमाल किसी खास रिलीज़ को रेफ़र करने के लिए किया जाता है. यह आइडेंटिफ़ायर, लोगों के पढ़ने लायक फ़ॉर्मैट में होता है. यह फ़ील्ड, android.os.Build.VERSION.INCREMENTAL के जैसा हो सकता है. हालांकि, यह ऐसा मान होना चाहिए जिससे असली उपयोगकर्ता, सॉफ़्टवेयर बिल्ड के बीच अंतर कर सकें. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9._-]+$” से मेल खानी चाहिए. |
| MANUFACTURER | प्रॉडक्ट के ओरिजनल इक्विपमेंट मैन्युफ़ैक्चरर (ओईएम) का कारोबार का नाम. इस फ़ील्ड के लिए, किसी खास फ़ॉर्मैट की ज़रूरत नहीं होती. हालांकि, यह ज़रूरी है कि यह फ़ील्ड शून्य या खाली स्ट्रिंग ("") न हो. प्रॉडक्ट के जीवनकाल के दौरान, इस फ़ील्ड में बदलाव नहीं किया जाना चाहिए. |
| MODEL | यह वैल्यू, डिवाइस को लागू करने वाले व्यक्ति या कंपनी ने चुनी है. इसमें डिवाइस का वह नाम शामिल होता है जो असली उपयोगकर्ता को दिखता है. यह वही नाम होना चाहिए जिससे डिवाइस को मार्केट में लाया जाता है और असली उपयोगकर्ताओं को बेचा जाता है. इस फ़ील्ड के लिए, किसी खास फ़ॉर्मैट की ज़रूरत नहीं होती. हालांकि, यह ज़रूरी है कि यह फ़ील्ड शून्य या खाली स्ट्रिंग ("") न हो. प्रॉडक्ट के जीवनकाल के दौरान, इस फ़ील्ड में बदलाव नहीं किया जाना चाहिए. |
| प्रॉडक्ट | डिवाइस बनाने वाली कंपनी की चुनी गई वैल्यू. इसमें किसी खास प्रॉडक्ट (एसकेयू) का डेवलपमेंट नेम या कोड नेम होता है. यह वैल्यू, एक ही ब्रैंड के सभी प्रॉडक्ट के लिए यूनीक होनी चाहिए. यह ऐसा होना चाहिए जिसे आसानी से पढ़ा जा सके. हालांकि, यह ज़रूरी नहीं है कि इसे असली उपयोगकर्ता देखें. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जाना चाहिए. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9_-]+$” से मेल खानी चाहिए. प्रॉडक्ट के जीवनकाल के दौरान, प्रॉडक्ट का नाम नहीं बदलना चाहिए. |
| SERIAL | हार्डवेयर का सीरियल नंबर. यह एक ही मॉडल और निर्माता के सभी डिवाइसों के लिए उपलब्ध होना चाहिए और यूनीक होना चाहिए. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^([a-zA-Z0-9]{6,20})$” से मेल खानी चाहिए. |
| टैग | डिवाइस बनाने वाली कंपनी की ओर से चुने गए टैग की कॉमा लगाकर अलग की गई सूची. इससे बिल्ड को और बेहतर तरीके से पहचाना जा सकता है. इस फ़ील्ड में, Android प्लैटफ़ॉर्म के तीन सामान्य साइनिंग कॉन्फ़िगरेशन में से किसी एक के हिसाब से वैल्यू होनी चाहिए: release-keys, dev-keys, test-keys. |
| समय | यह वैल्यू, बिल्ड होने के समय के टाइमस्टैंप को दिखाती है. |
| वाई-फ़ाई के टाइप के बारे में जानकारी | डिवाइस को लागू करने वाले व्यक्ति या कंपनी की चुनी गई वैल्यू, जो बिल्ड के रनटाइम कॉन्फ़िगरेशन के बारे में बताती है. इस फ़ील्ड में, Android के तीन सामान्य रनटाइम कॉन्फ़िगरेशन में से किसी एक की वैल्यू होनी चाहिए: उपयोगकर्ता, उपयोगकर्ता डीबग या इंजीनियरिंग. |
| उपयोगकर्ता | उस उपयोगकर्ता (या अपने-आप काम करने वाले उपयोगकर्ता) का नाम या यूज़र आईडी जिसने बिल्ड जनरेट किया है. इस फ़ील्ड के लिए, किसी खास फ़ॉर्मैट की ज़रूरत नहीं होती. हालांकि, यह ज़रूरी है कि यह फ़ील्ड शून्य या खाली स्ट्रिंग ("") न हो. |
| SECURITY_PATCH | यह वैल्यू, किसी बिल्ड के सुरक्षा पैच के लेवल के बारे में बताती है. इससे यह पता चलना चाहिए कि बिल्ड में, Android के सार्वजनिक सुरक्षा बुलेटिन में बताई गई किसी भी समस्या से जोखिम नहीं है. यह [YYYY-MM-DD] फ़ॉर्मैट में होना चाहिए. साथ ही, यह Android के सार्वजनिक सुरक्षा बुलेटिन या Android की सुरक्षा से जुड़ी सलाह में दिए गए स्ट्रिंग से मेल खाना चाहिए. उदाहरण के लिए, "2015-11-01". |
| BASE_OS | यह वैल्यू, बिल्ड के फ़िंगरप्रिंट पैरामीटर को दिखाती है. यह बिल्ड, Android Public Security Bulletin में दिए गए पैच को छोड़कर, इस बिल्ड के जैसा ही होता है. इसे सही वैल्यू रिपोर्ट करनी चाहिए. अगर ऐसा कोई बिल्ड मौजूद नहीं है, तो खाली स्ट्रिंग ("") रिपोर्ट करें. |
| बूटलोडर | यह वैल्यू, डिवाइस बनाने वाली कंपनी चुनती है. इससे डिवाइस में इस्तेमाल किए गए इंटरनल बूटलोडर के वर्शन की पहचान होती है. यह वैल्यू, इंसानों के पढ़ने लायक फ़ॉर्मैट में होती है. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9._-]+$” से मेल खानी चाहिए. |
| getRadioVersion() | यह डिवाइस बनाने वाली कंपनी की चुनी गई वैल्यू होनी चाहिए. इससे डिवाइस में इस्तेमाल किए गए इंटरनल रेडियो/मॉडम के वर्शन की पहचान होती है. यह वैल्यू, इंसानों के पढ़ने लायक फ़ॉर्मैट में होनी चाहिए. अगर किसी डिवाइस में कोई इंटरनल रेडियो/मॉडेम नहीं है, तो उसे NULL वैल्यू दिखानी होगी. इस फ़ील्ड की वैल्यू को 7-बिट ASCII के तौर पर कोड में बदला जा सकता है. साथ ही, यह रेगुलर एक्सप्रेशन “^[a-zA-Z0-9._-,]+$” से मेल खानी चाहिए. |
3.2.3. इंटेंट कंपैटबिलिटी
3.2.3.1. ऐप्लिकेशन के मुख्य इंटेंट
Android इंटेंट की मदद से, ऐप्लिकेशन कॉम्पोनेंट, Android के अन्य कॉम्पोनेंट से फ़ंक्शन के लिए अनुरोध कर सकते हैं. Android अपस्ट्रीम प्रोजेक्ट में, Android के मुख्य ऐप्लिकेशन की सूची शामिल होती है. यह सूची, सामान्य कार्रवाइयां करने के लिए कई इंटेंट पैटर्न लागू करती है.
-
[C-0-1] डिवाइसों पर इन ऐप्लिकेशन और सेवा कॉम्पोनेंट या कम से कम एक हैंडलर को शामिल करना ज़रूरी है. ऐसा, एओएसपी में मौजूद इन मुख्य Android ऐप्लिकेशन के लिए, सार्वजनिक इंटेंट फ़िल्टर पैटर्न के लिए किया जाना चाहिए:
- डेस्क क्लॉक
- ब्राउज़र
- Calendar
- संपर्क
- गैलरी
- GlobalSearch
- लॉन्चर
- संगीत
- सेटिंग
3.2.3.2. इंटेंट रिज़ॉल्यूशन
- [C-0-1] Android एक एक्सटेंसिबल प्लैटफ़ॉर्म है. इसलिए, डिवाइसों पर Android को लागू करने के दौरान, यह ज़रूरी है कि तीसरे पक्ष के ऐप्लिकेशन, सेक्शन 3.2.3.1 में दिए गए हर इंटेंट पैटर्न को बदल सकें. Android के ओपन सोर्स वर्शन में, यह सुविधा डिफ़ॉल्ट रूप से चालू होती है.
-
[C-0-2] डिवाइस बनाने वाली कंपनियों को, सिस्टम ऐप्लिकेशन के लिए इन इंटेंट पैटर्न के इस्तेमाल पर खास अनुमतियां नहीं देनी चाहिए. साथ ही, उन्हें तीसरे पक्ष के ऐप्लिकेशन को इन पैटर्न से बाइंड होने और इनका कंट्रोल लेने से नहीं रोकना चाहिए. इस पाबंदी में खास तौर पर, “चूज़र” यूज़र इंटरफ़ेस को बंद करना शामिल है. हालांकि, इसमें और भी चीज़ें शामिल हो सकती हैं. इस यूज़र इंटरफ़ेस की मदद से, उपयोगकर्ता ऐसे कई ऐप्लिकेशन में से किसी एक को चुन सकता है जो एक ही इंटेंट पैटर्न को हैंडल करते हैं.
-
[C-0-3] डिवाइसों में, उपयोगकर्ताओं को ऐसा यूज़र इंटरफ़ेस देना ज़रूरी है जिसकी मदद से वे इंटेंट के लिए डिफ़ॉल्ट गतिविधि में बदलाव कर सकें.
-
हालांकि, डिवाइस लागू करने वाले लोग या कंपनियां, खास यूआरआई पैटर्न (जैसे, http://play.google.com) के लिए डिफ़ॉल्ट गतिविधियां उपलब्ध करा सकती हैं. ऐसा तब किया जा सकता है, जब डिफ़ॉल्ट गतिविधि, डेटा यूआरआई के लिए ज़्यादा खास एट्रिब्यूट उपलब्ध कराती हो. उदाहरण के लिए, “http://www.android.com” डेटा यूआरआई के बारे में बताने वाला इंटेंट फ़िल्टर पैटर्न, ब्राउज़र के “http://” के लिए कोर इंटेंट पैटर्न से ज़्यादा सटीक होता है.
Android में, तीसरे पक्ष के ऐप्लिकेशन के लिए एक ऐसा तरीका भी शामिल है जिससे वे कुछ खास तरह के वेब यूआरआई इंटेंट के लिए, ऐप्लिकेशन लिंक करने के डिफ़ॉल्ट तरीके का एलान कर सकते हैं. जब किसी ऐप्लिकेशन के इंटेंट फ़िल्टर पैटर्न में इस तरह के आधिकारिक एलान तय किए जाते हैं, तो डिवाइस में सेट किए गए सिस्टम:
- [C-0-4] डिजिटल ऐसेट लिंक स्पेसिफ़िकेशन में बताए गए पुष्टि करने के चरणों को पूरा करके, सभी इंटेंट फ़िल्टर की पुष्टि करने की कोशिश करनी चाहिए. इन चरणों को, अपस्ट्रीम Android Open Source Project में Package Manager लागू करता है.
- [C-0-5] ऐप्लिकेशन इंस्टॉल करते समय, इंटेंट फ़िल्टर की पुष्टि करने की कोशिश करनी चाहिए. साथ ही, पुष्टि किए गए सभी यूआरआई इंटेंट फ़िल्टर को उनके यूआरआई के लिए, डिफ़ॉल्ट ऐप्लिकेशन हैंडलर के तौर पर सेट करना चाहिए.
- अगर किसी ऐप्लिकेशन की पुष्टि हो गई है, लेकिन यूआरआई फ़िल्टर के अन्य उम्मीदवार की पुष्टि नहीं हो पाई है, तो वह अपने यूआरआई के लिए, यूआरआई इंटेंट फ़िल्टर को डिफ़ॉल्ट ऐप्लिकेशन हैंडलर के तौर पर सेट कर सकता है. अगर कोई डिवाइस ऐसा करता है, तो उसे सेटिंग मेन्यू में उपयोगकर्ता को हर यूआरआई पैटर्न के हिसाब से सही ओवरराइड उपलब्ध कराने होंगे.
- उपयोगकर्ता को सेटिंग में जाकर, हर ऐप्लिकेशन के लिए ऐप्लिकेशन लिंक कंट्रोल करने की सुविधा देना ज़रूरी है. इसके लिए, यह तरीका अपनाएं:
- [C-0-6] उपयोगकर्ता के पास, ऐप्लिकेशन लिंक के डिफ़ॉल्ट व्यवहार को पूरी तरह से बदलने का विकल्प होना चाहिए. जैसे, हमेशा खोलें, हमेशा पूछें या कभी न खोलें. यह विकल्प, यूआरआई इंटेंट फ़िल्टर के सभी कैंडिडेट पर एक जैसा लागू होना चाहिए.
- [C-0-7] उपयोगकर्ता को, यूआरआई इंटेंट फ़िल्टर की सूची दिखनी चाहिए.
- डिवाइस बनाने वाली कंपनी, उपयोगकर्ता को हर इंटेंट फ़िल्टर के आधार पर, पुष्टि किए गए कुछ कैंडिडेट यूआरआई इंटेंट फ़िल्टर को बदलने की सुविधा दे सकती है.
- [C-0-8] अगर डिवाइस में, कुछ कैंडिडेट यूआरआई इंटेंट फ़िल्टर की पुष्टि हो जाती है, लेकिन कुछ की नहीं होती है, तो डिवाइस बनाने वाली कंपनी को उपयोगकर्ताओं को यह सुविधा देनी होगी कि वे कुछ कैंडिडेट यूआरआई इंटेंट फ़िल्टर देख सकें और उन्हें बदल सकें.
3.2.3.3. इंटेंट नेमस्पेस
- [C-0-1] डिवाइसों में, Android का ऐसा कोई कॉम्पोनेंट शामिल नहीं होना चाहिए जो android. या com.android. नेमस्पेस में ACTION, CATEGORY या अन्य मुख्य स्ट्रिंग का इस्तेमाल करके, किसी नए इंटेंट या ब्रॉडकास्ट इंटेंट पैटर्न का पालन करता हो.
- [C-0-2] डिवाइस बनाने वाली कंपनियों को, ऐसे किसी भी Android कॉम्पोनेंट को शामिल नहीं करना चाहिए जो किसी अन्य संगठन के पैकेज स्पेस में ACTION, CATEGORY या अन्य मुख्य स्ट्रिंग का इस्तेमाल करके, किसी नए इंटेंट या ब्रॉडकास्ट इंटेंट पैटर्न का पालन करते हों.
- [C-0-3] डिवाइस बनाने वाली कंपनियों को, सेक्शन 3.2.3.1 में दिए गए मुख्य ऐप्लिकेशन के इस्तेमाल किए गए किसी भी इंटेंट पैटर्न में बदलाव नहीं करना चाहिए या उसे बढ़ाना नहीं चाहिए.
- डिवाइस के लिए बनाए गए ऐप्लिकेशन में, इंटेंट पैटर्न शामिल हो सकते हैं. इनमें ऐसे नेमस्पेस का इस्तेमाल किया जाता है जो साफ़ तौर पर और आसानी से उनके संगठन से जुड़े होते हैं. यह पाबंदी, अनुच्छेद 3.6 में Java भाषा की क्लास के लिए बताई गई पाबंदी के जैसी है.
3.2.3.4. ब्रॉडकास्ट इंटेंट
तीसरे पक्ष के ऐप्लिकेशन, हार्डवेयर या सॉफ़्टवेयर एनवायरमेंट में होने वाले बदलावों के बारे में सूचना देने के लिए, प्लैटफ़ॉर्म पर भरोसा करते हैं.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] एसडीके के दस्तावेज़ में बताए गए तरीके के मुताबिक, सिस्टम के सही इवेंट के जवाब में सार्वजनिक ब्रॉडकास्ट इंटेंट ब्रॉडकास्ट करना ज़रूरी है. ध्यान दें कि यह ज़रूरी शर्त, सेक्शन 3.5 का उल्लंघन नहीं करती है. ऐसा इसलिए, क्योंकि एसडीके के दस्तावेज़ में बैकग्राउंड ऐप्लिकेशन की सीमा के बारे में भी बताया गया है.
3.2.3.5. डिफ़ॉल्ट ऐप्लिकेशन की सेटिंग
Android में ऐसी सेटिंग शामिल हैं जिनकी मदद से लोग आसानी से अपने डिफ़ॉल्ट ऐप्लिकेशन चुन सकते हैं. उदाहरण के लिए, होम स्क्रीन या एसएमएस के लिए.
जहां ज़रूरी हो वहां डिवाइसों पर, मिलती-जुलती सेटिंग मेन्यू उपलब्ध होना चाहिए. साथ ही, एसडीके के दस्तावेज़ में बताए गए इंटेंट फ़िल्टर पैटर्न और एपीआई के तरीकों के साथ काम करना चाहिए.
अगर डिवाइसों के लिए लागू की गई सुविधाओं की रिपोर्ट android.software.home_screen है, तो:
- [C-1-1] होम स्क्रीन के लिए डिफ़ॉल्ट ऐप्लिकेशन की सेटिंग का मेन्यू दिखाने के लिए, android.settings.HOME_SETTINGS इंटेंट का इस्तेमाल करना ज़रूरी है.
अगर डिवाइसों के लिए लागू की गई सुविधाओं की रिपोर्ट android.hardware.telephony है, तो:
- [C-2-1] ऐप्लिकेशन में एक सेटिंग मेन्यू होना चाहिए. इससे android.provider.Telephony.ACTION_CHANGE_DEFAULT इंटेंट कॉल होगा. इससे, डिफ़ॉल्ट एसएमएस ऐप्लिकेशन बदलने के लिए एक डायलॉग दिखेगा.
अगर डिवाइसों के लिए लागू की गई सुविधाओं की रिपोर्ट android.hardware.nfc.hce है, तो:
- [C-3-1] टैप करके पेमेंट करने की सुविधा के लिए, डिफ़ॉल्ट ऐप्लिकेशन की सेटिंग मेन्यू दिखाने के लिए, android.settings.NFC_PAYMENT_SETTINGS इंटेंट का इस्तेमाल करना ज़रूरी है.
अगर डिवाइसों के लिए लागू की गई सुविधाओं की रिपोर्ट android.hardware.telephony है, तो:
- [C-4-1] android.telecom.action.CHANGE_DEFAULT_DIALER इंटेंट का पालन करना ज़रूरी है, ताकि उपयोगकर्ता को एक डायलॉग दिखाया जा सके. इससे उपयोगकर्ता, डिफ़ॉल्ट फ़ोन ऐप्लिकेशन को बदल पाएगा.
अगर डिवाइस में VoiceInteractionService काम करता है, तो:
- [C-5-1] MUST honor the android.settings.ACTION_VOICE_INPUT_SETTINGS intent to show a default app settings menu for voice input and assist.
3.2.4. सेकंडरी डिसप्ले पर की गई गतिविधियां
अगर डिवाइसों पर, सेकंडरी डिसप्ले पर सामान्य Android Activities लॉन्च करने की अनुमति है, तो:
- [C-1-1]
android.software.activities_on_secondary_displaysफ़ीचर फ़्लैग को सेट करना ज़रूरी है. - [C-1-2] MUST guarantee API compatibility similar to an activity running on the primary display.
- [C-1-3]
ActivityOptions.setLaunchDisplayId()एपीआई के ज़रिए टारगेट डिसप्ले तय किए बिना नई गतिविधि लॉन्च करने पर, उसे उसी डिसप्ले पर लॉन्च करना होगा जिस पर उसे लॉन्च करने वाली गतिविधि चल रही है. - [C-1-4]
Display.FLAG_PRIVATEफ़्लैग वाले डिसप्ले को हटाने पर, सभी गतिविधियों को मिटाना ज़रूरी है. - [C-1-5] अगर डिसप्ले का साइज़ बदला जाता है, तो
VirtualDisplayपर मौजूद सभी ऐप्लिकेशन का साइज़ भी उसी के हिसाब से बदलना चाहिए. - जब टेक्स्ट इनपुट फ़ील्ड, सेकंडरी डिसप्ले पर फ़ोकस करता है, तब प्राइमरी डिसप्ले पर IME (इनपुट मेथड एडिटर, यह एक ऐसा कंट्रोल होता है जिसकी मदद से उपयोगकर्ता टेक्स्ट डाल सकते हैं) दिख सकता है.
- अगर टच या बटन से इनपुट देने की सुविधा उपलब्ध है, तो सेकंडरी डिसप्ले पर इनपुट फ़ोकस को प्राइमरी डिसप्ले से अलग तौर पर लागू करना चाहिए.
- डिसप्ले के लिए
android.content.res.Configurationहोना चाहिए, ताकि उसे दिखाया जा सके, वह सही तरीके से काम कर सके, और अगर सेकंडरी डिसप्ले पर कोई गतिविधि शुरू की जाती है, तो वह उसके साथ काम कर सके.
अगर डिवाइस में, सेकंडरी डिसप्ले पर सामान्य Android Activities लॉन्च करने की अनुमति है और प्राइमरी और सेकंडरी डिसप्ले में अलग-अलग android.util.DisplayMetrics हैं, तो:
- [C-2-1] एपीआई लेवल 23 या इससे पहले के लेवल को टारगेट करने वाले ऐप्लिकेशन और ऐसी गतिविधियां (जिनमें
resizeableActivity=falseमेंAndroidManifest.xmlहै) सेकंडरी डिसप्ले पर नहीं चलनी चाहिए.
अगर डिवाइस में, सेकंडरी डिसप्ले पर सामान्य Android Activities लॉन्च करने की अनुमति है और सेकंडरी डिसप्ले में android.view.Display.FLAG_PRIVATE फ़्लैग है, तो:
- [C-3-1] सिर्फ़ डिसप्ले, सिस्टम, और उस डिसप्ले पर पहले से मौजूद गतिविधियों के मालिक के पास, उन्हें लॉन्च करने का अधिकार होना चाहिए. हर कोई, android.view.Display.FLAG_PUBLIC फ़्लैग वाले डिसप्ले पर लॉन्च कर सकता है.
3.3. नेटिव एपीआई के साथ काम करने की सुविधा
नेटिव कोड के साथ काम करने की सुविधा को लागू करना मुश्किल होता है. इस वजह से, डिवाइस बनाने वाली कंपनियों को:
- [SR] हमारा सुझाव है कि नीचे दी गई लाइब्रेरी के लिए, Android ओपन सोर्स प्रोजेक्ट के अपस्ट्रीम से मिले इंप्लीमेंटेशन का इस्तेमाल करें.
3.3.1. ऐप्लिकेशन बाइनरी इंटरफ़ेस
मैनेज किया गया Dalvik बाइटकोड, ऐप्लिकेशन की .apk फ़ाइल में मौजूद नेटिव कोड को कॉल कर सकता है. यह कोड, डिवाइस के हार्डवेयर आर्किटेक्चर के हिसाब से कंपाइल की गई ELF .so फ़ाइल के तौर पर उपलब्ध होता है. नेटिव कोड, प्रोसेसर टेक्नोलॉजी पर काफ़ी हद तक निर्भर करता है. इसलिए, Android NDK में Android, कई ऐप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) तय करता है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] को एक या उससे ज़्यादा तय किए गए ABI के साथ काम करना चाहिए. साथ ही, Android NDK के साथ काम करने की सुविधा लागू करनी चाहिए.
- [C-0-2] इसमें मैनेज किए गए एनवायरमेंट में चलने वाले कोड के लिए, नेटिव कोड को कॉल करने की सुविधा शामिल होनी चाहिए. इसके लिए, स्टैंडर्ड Java Native Interface (JNI) सिमैंटिक्स का इस्तेमाल किया जाना चाहिए.
- [C-0-3] यह ज़रूरी है कि नीचे दी गई सूची में मौजूद हर ज़रूरी लाइब्रेरी के साथ, सोर्स-कंपैटिबल (यानी कि हेडर-कंपैटिबल) और बाइनरी-कंपैटिबल (एबीआई के लिए) हो.
- [C-0-4] अगर 64-बिट ABI काम करता है, तो उसके बराबर का 32-बिट ABI भी काम करना चाहिए.
- [C-0-5]
android.os.Build.SUPPORTED_ABIS,android.os.Build.SUPPORTED_32_BIT_ABIS, औरandroid.os.Build.SUPPORTED_64_BIT_ABISपैरामीटर के ज़रिए, डिवाइस के साथ काम करने वाले नेटिव ऐप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) की सटीक जानकारी देना ज़रूरी है. हर पैरामीटर में, कॉमा लगाकर अलग किए गए एबीआई की सूची होनी चाहिए. इस सूची में, सबसे ज़्यादा से लेकर सबसे कम इस्तेमाल किए जाने वाले एबीआई तक की जानकारी होनी चाहिए. - [C-0-6] ऊपर दिए गए पैरामीटर के ज़रिए, सिर्फ़ उन एबीआइ की जानकारी देनी होगी जिनके बारे में Android NDK ABI Management के दस्तावेज़ के नए वर्शन में बताया गया है. साथ ही, Advanced SIMD (इसे NEON भी कहा जाता है) एक्सटेंशन के साथ काम करना ज़रूरी है.
-
[C-0-7] नेटिव एपीआई उपलब्ध कराने वाली इन सभी लाइब्रेरी को, नेटिव कोड वाले ऐप्लिकेशन के लिए उपलब्ध कराना ज़रूरी है:
- libaaudio.so (AAudio नेटिव ऑडियो सपोर्ट)
- libandroid.so (नेटिव Android गतिविधि के लिए सहायता)
- libc (C लाइब्रेरी)
- libcamera2ndk.so
- libdl (डाइनैमिक लिंकर)
- libEGL.so (नेटिव OpenGL सरफेस मैनेजमेंट)
- libGLESv1_CM.so (OpenGL ES 1.x)
- libGLESv2.so (OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.x)
- libicui18n.so
- libicuuc.so
- libjnigraphics.so
- liblog (Android लॉगिंग)
- libmediandk.so (नेटिव मीडिया एपीआई के साथ काम करता है)
- libm (मैथ लाइब्रेरी)
- libOpenMAXAL.so (OpenMAX AL 1.0.1 के साथ काम करता है)
- libOpenSLES.so (OpenSL ES 1.0.1 ऑडियो सपोर्ट)
- libRS.so
- libstdc++ (C++ के लिए कम से कम सहायता)
- libvulkan.so (Vulkan)
- libz (Zlib कंप्रेशन)
- JNI इंटरफ़ेस
-
[C-0-8] ऊपर दी गई नेटिव लाइब्रेरी के लिए, सार्वजनिक फ़ंक्शन जोड़े या हटाए नहीं जाने चाहिए.
- [C-0-9]
/vendor/etc/public.libraries.txtमें, सीधे तौर पर तीसरे पक्ष के ऐप्लिकेशन को उपलब्ध कराई गई, AOSP के अलावा अन्य लाइब्रेरी की सूची देना ज़रूरी है. - [C-0-10] सिस्टम लाइब्रेरी के तौर पर AOSP में लागू की गई और उपलब्ध कराई गई किसी भी अन्य नेटिव लाइब्रेरी को, एपीआई लेवल 24 या उसके बाद के वर्शन को टारगेट करने वाले तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध नहीं कराना चाहिए. ऐसा इसलिए, क्योंकि ये लाइब्रेरी रिज़र्व होती हैं.
- [C-0-11] NDK में बताए गए सभी OpenGL ES 3.1 और Android Extension Pack फ़ंक्शन सिंबल को
libGLESv3.soलाइब्रेरी के ज़रिए एक्सपोर्ट करना ज़रूरी है. ध्यान दें कि सभी सिंबल मौजूद होने चाहिए. हालांकि, सेक्शन 7.1.4.1 में इस बारे में ज़्यादा जानकारी दी गई है कि हर फ़ंक्शन को पूरी तरह से लागू करने के लिए, कौनसी ज़रूरी शर्तें पूरी करनी होंगी. - [C-0-12]
libvulkan.soलाइब्रेरी के ज़रिए, Vulkan 1.0 के मुख्य फ़ंक्शन सिंबल के साथ-साथVK_KHR_surface,VK_KHR_android_surface,VK_KHR_swapchain,VK_KHR_maintenance1, औरVK_KHR_get_physical_device_properties2एक्सटेंशन के लिए फ़ंक्शन सिंबल एक्सपोर्ट करना ज़रूरी है. ध्यान दें कि सभी सिंबल मौजूद होने चाहिए. हालांकि, सेक्शन 7.1.4.2 में इस बारे में ज़्यादा जानकारी दी गई है कि हर फ़ंक्शन को पूरी तरह से लागू करने की ज़रूरत कब होती है. - इसे Android ओपन सोर्स प्रोजेक्ट के अपस्ट्रीम में उपलब्ध सोर्स कोड और हेडर फ़ाइलों का इस्तेमाल करके बनाया जाना चाहिए
ध्यान दें कि Android NDK के आने वाले वर्शन में, अन्य एबीआइ के लिए भी सहायता उपलब्ध कराई जा सकती है.
3.3.2. 32-बिट ARM नेटिव कोड के साथ काम करने की सुविधा
अगर डिवाइस में 64-बिट ARM डिवाइसों का इस्तेमाल किया जाता है, तो:
-
[C-1-1] ARMv8 आर्किटेक्चर, सीपीयू की कई कार्रवाइयों को बंद कर देता है. इनमें मौजूदा नेटिव कोड में इस्तेमाल की गई कुछ कार्रवाइयां भी शामिल हैं. हालांकि, बंद की गई ये कार्रवाइयां, 32-बिट नेटिव एआरएम कोड के लिए उपलब्ध होनी चाहिए. ऐसा नेटिव सीपीयू सपोर्ट या सॉफ़्टवेयर इम्यूलेशन के ज़रिए किया जा सकता है:
- SWP और SWPB के निर्देश
- SETEND निर्देश
- CP15ISB, CP15DSB, और CP15DMB बैरियर ऑपरेशंस
अगर डिवाइस में 32-बिट ARM ABI शामिल है, तो:
-
[C-2-1] 32-बिट ARM ऐप्लिकेशन से पढ़े जाने पर,
/proc/cpuinfoमें ये लाइनें शामिल होनी चाहिए. इससे यह पक्का किया जा सकेगा कि यह Android NDK के लेगसी वर्शन का इस्तेमाल करके बनाए गए ऐप्लिकेशन के साथ काम करता है.-
Features:, इसके बाद डिवाइस के साथ काम करने वाली ARMv7 सीपीयू की किसी भी वैकल्पिक सुविधा की सूची. -
CPU architecture:के बाद, एक पूर्णांक होता है.यह पूर्णांक, डिवाइस के लिए उपलब्ध सबसे नए एआरएम आर्किटेक्चर के बारे में बताता है. उदाहरण के लिए, ARMv8 डिवाइसों के लिए "8".
-
-
64-बिट ARM या नॉन-ARM ऐप्लिकेशन से पढ़ने पर,
/proc/cpuinfoमें बदलाव नहीं होना चाहिए.
3.4. वेबसाइट के साथ काम करना
3.4.1. WebView के साथ काम करना
अगर डिवाइस में सेट किए गए सिस्टम, android.webkit.Webview एपीआई को पूरी तरह से लागू करते हैं, तो:
- [C-1-1]
android.software.webviewकी जानकारी देना ज़रूरी है. - [C-1-2]
android.webkit.WebViewएपीआई को लागू करने के लिए, Android 8.0 ब्रांच पर Android Open Source Project से बनाए गए Chromium प्रोजेक्ट का इस्तेमाल करना ज़रूरी है. -
[C-1-3] WebView से रिपोर्ट की गई उपयोगकर्ता एजेंट स्ट्रिंग इस फ़ॉर्मैट में होनी चाहिए:
Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- $(VERSION) स्ट्रिंग की वैल्यू, android.os.Build.VERSION.RELEASE की वैल्यू के बराबर होनी चाहिए.
- $(MODEL) स्ट्रिंग की वैल्यू, android.os.Build.MODEL की वैल्यू के बराबर होनी चाहिए.
- $(BUILD) स्ट्रिंग की वैल्यू, android.os.Build.ID की वैल्यू के बराबर होनी चाहिए.
- $(CHROMIUM_VER) स्ट्रिंग की वैल्यू, Android ओपन सोर्स प्रोजेक्ट के अपस्ट्रीम में मौजूद Chromium का वर्शन होना चाहिए.
- डिवाइस लागू करने वाले लोग, उपयोगकर्ता एजेंट स्ट्रिंग में मोबाइल को शामिल न करें.
-
WebView कॉम्पोनेंट में, ज़्यादा से ज़्यादा HTML5 सुविधाओं के लिए सहायता शामिल होनी चाहिए. अगर यह सुविधा के साथ काम करता है, तो इसे HTML5 स्पेसिफ़िकेशन के मुताबिक होना चाहिए.
3.4.2. ब्राउज़र किस-किस के साथ काम करता है
अगर डिवाइस में, सामान्य वेब ब्राउज़िंग के लिए स्टैंडअलोन ब्राउज़र ऐप्लिकेशन शामिल है, तो:
- [C-1-1] यह ज़रूरी है कि डिवाइस, HTML5 से जुड़े इन सभी एपीआई के साथ काम करता हो:
- [C-1-2] इसमें HTML5/W3C webstorage API काम करना चाहिए. साथ ही, इसमें HTML5/W3C IndexedDB API काम करना चाहिए. ध्यान दें कि वेब डेवलपमेंट के स्टैंडर्ड तय करने वाली संस्थाएं, वेबस्टोरेज के बजाय IndexedDB को प्राथमिकता दे रही हैं. इसलिए, उम्मीद है कि Android के आने वाले वर्शन में IndexedDB को शामिल करना ज़रूरी हो जाएगा.
- स्टैंडअलोन ब्राउज़र ऐप्लिकेशन में, कस्टम उपयोगकर्ता एजेंट स्ट्रिंग शिप कर सकता है.
- स्टैंडअलोन ब्राउज़र ऐप्लिकेशन पर, ज़्यादा से ज़्यादा HTML5 के साथ काम करने की सुविधा लागू करनी चाहिए. भले ही, यह अपस्ट्रीम WebKit ब्राउज़र ऐप्लिकेशन पर आधारित हो या किसी तीसरे पक्ष के ब्राउज़र ऐप्लिकेशन पर.
हालांकि, अगर डिवाइस में स्टैंडअलोन ब्राउज़र ऐप्लिकेशन शामिल नहीं है, तो:
- [C-2-1] को अब भी section 3.2.3.1 में बताए गए सार्वजनिक इंटेंट पैटर्न के साथ काम करना होगा.
3.5. एपीआई के व्यवहार से जुड़ी संगतता
एपीआई के हर टाइप (मैनेज किया गया, सॉफ़्ट, नेटिव, और वेब) का व्यवहार, Android Open Source Project के पसंदीदा तरीके से लागू करने के मुताबिक होना चाहिए. साथ काम करने से जुड़ी कुछ खास बातें यहां दी गई हैं:
- [C-0-1] डिवाइसों को स्टैंडर्ड इंटेंट के व्यवहार या सिमैंटिक में बदलाव नहीं करना चाहिए.
- [C-0-2] डिवाइसों को किसी खास तरह के सिस्टम कॉम्पोनेंट (जैसे कि सेवा, ऐक्टिविटी, ContentProvider वगैरह) के लाइफ़साइकल या लाइफ़साइकल सिमैंटिक में बदलाव नहीं करना चाहिए.
- [C-0-3] डिवाइसों को स्टैंडर्ड अनुमति के सिमैंटिक में बदलाव नहीं करना चाहिए.
- डिवाइसों को बैकग्राउंड में चल रहे ऐप्लिकेशन पर लागू की गई पाबंदियों में बदलाव नहीं करना चाहिए. खास तौर पर, बैकग्राउंड में चल रहे ऐप्लिकेशन के लिए:
- [C-0-4] उन्हें उन कॉलबैक को बंद करना होगा जिन्हें ऐप्लिकेशन ने
GnssMeasurementऔरGnssNavigationMessageसे आउटपुट पाने के लिए रजिस्टर किया है. - [C-0-5] उन्हें
LocationManagerएपीआई क्लास याWifiManager.startScan()तरीके से, ऐप्लिकेशन को दिए जाने वाले अपडेट की फ़्रीक्वेंसी को सीमित करना होगा. - [C-0-6] अगर ऐप्लिकेशन, एपीआई लेवल 25 या उसके बाद के वर्शन को टारगेट कर रहा है, तो उसे ऐप्लिकेशन के मेनिफ़ेस्ट में, स्टैंडर्ड Android इंटेंट के इंप्लिसिट ब्रॉडकास्ट के लिए ब्रॉडकास्ट रिसीवर रजिस्टर करने की अनुमति नहीं देनी चाहिए. ऐसा तब तक नहीं किया जाना चाहिए, जब तक ब्रॉडकास्ट इंटेंट के लिए
"signature"या"signatureOrSystem"protectionLevelअनुमति की ज़रूरत न हो या वे छूट वाली सूची में शामिल न हों. - [C-0-7] अगर ऐप्लिकेशन, एपीआई लेवल 25 या इससे बाद के लेवल को टारगेट कर रहा है, तो उसे ऐप्लिकेशन की बैकग्राउंड सेवाओं को बंद करना होगा. ऐसा तब होगा, जब ऐप्लिकेशन ने सेवाओं के
stopSelf()तरीके को कॉल किया हो. हालांकि, अगर ऐप्लिकेशन को उपयोगकर्ता को दिखने वाले टास्क को मैनेज करने के लिए, कुछ समय के लिए अनुमति वाली सूची में रखा गया है, तो ऐसा नहीं होगा. - [C-0-8] अगर ऐप्लिकेशन, एपीआई लेवल 25 या उसके बाद के वर्शन को टारगेट कर रहा है, तो उसे ऐप्लिकेशन के पास मौजूद वेकलॉक रिलीज़ करने होंगे.
- [C-0-4] उन्हें उन कॉलबैक को बंद करना होगा जिन्हें ऐप्लिकेशन ने
ऊपर दी गई सूची पूरी नहीं है. Compatibility Test Suite (CTS), प्लैटफ़ॉर्म के अहम हिस्सों की जांच करता है, ताकि यह पता लगाया जा सके कि वे एक-दूसरे के साथ काम करते हैं या नहीं. हालांकि, यह जांच सभी हिस्सों के लिए नहीं की जाती. यह पक्का करने की ज़िम्मेदारी, लागू करने वाले की होती है कि Android Open Source Project के साथ व्यवहार से जुड़ी ज़रूरी शर्तों का पालन किया गया हो. इस वजह से, डिवाइस बनाने वाली कंपनियों को जहां तक हो सके, Android ओपन सोर्स प्रोजेक्ट के ज़रिए उपलब्ध सोर्स कोड का इस्तेमाल करना चाहिए. इसके बजाय, उन्हें सिस्टम के अहम हिस्सों को फिर से लागू नहीं करना चाहिए.
3.6. एपीआई नेमस्पेस
Android, Java प्रोग्रामिंग लैंग्वेज के तय किए गए पैकेज और क्लास नेमस्पेस के नियमों का पालन करता है. यह पक्का करने के लिए कि डिवाइस, तीसरे पक्ष के ऐप्लिकेशन के साथ काम करता है, डिवाइस बनाने वाली कंपनियों को इन पैकेज नेमस्पेस में कोई भी ऐसा बदलाव नहीं करना चाहिए जिस पर पाबंदी लगी हो. इसके बारे में यहां बताया गया है:
-
java.* -
javax.* -
sun.* -
android.* -
com.android.*
इसका मतलब है कि वे:
- [C-0-1] Android प्लैटफ़ॉर्म पर सार्वजनिक तौर पर उपलब्ध कराए गए एपीआई में बदलाव नहीं किया जाना चाहिए. इसके लिए, किसी भी तरीके या क्लास के सिग्नेचर में बदलाव न करें. साथ ही, क्लास या क्लास फ़ील्ड न हटाएं.
- [C-0-2] ऊपर दिए गए नेमस्पेस में मौजूद एपीआई में, सार्वजनिक तौर पर उपलब्ध कराए गए कोई भी एलिमेंट (जैसे कि क्लास या इंटरफ़ेस या मौजूदा क्लास या इंटरफ़ेस में फ़ील्ड या तरीके) या टेस्ट या सिस्टम एपीआई नहीं जोड़े जाने चाहिए. “सार्वजनिक तौर पर उपलब्ध एलिमेंट” ऐसा कोई भी कंस्ट्रक्ट होता है जिसे “@hide” मार्कर से नहीं सजाया गया है. इस मार्कर का इस्तेमाल, अपस्ट्रीम Android के सोर्स कोड में किया जाता है.
डिवाइस बनाने वाली कंपनियां, एपीआई के बुनियादी तौर पर लागू करने के तरीके में बदलाव कर सकती हैं. हालांकि, ऐसे बदलाव:
- [C-0-3] इससे, सार्वजनिक तौर पर उपलब्ध किसी भी एपीआई के बताए गए व्यवहार और Java-भाषा के सिग्नेचर पर कोई असर नहीं पड़ना चाहिए.
- [C-0-4] इसका विज्ञापन नहीं किया जाना चाहिए या इसे डेवलपर को नहीं दिखाया जाना चाहिए.
हालांकि, डिवाइस बनाने वाली कंपनियां, स्टैंडर्ड Android नेमस्पेस के बाहर कस्टम एपीआई जोड़ सकती हैं. हालांकि, कस्टम एपीआई के लिए ये ज़रूरी शर्तें पूरी करना ज़रूरी है:
- [C-0-5] किसी ऐसे नेमस्पेस में नहीं होना चाहिए जिसका मालिकाना हक किसी दूसरे संगठन के पास हो या जो किसी दूसरे संगठन से जुड़ा हो. उदाहरण के लिए, डिवाइस बनाने वाली कंपनियों को
com.google.*या इसी तरह के नेमस्पेस में एपीआई नहीं जोड़ने चाहिए. ऐसा सिर्फ़ Google कर सकता है. इसी तरह, Google को अन्य कंपनियों के नेमस्पेस में एपीआई नहीं जोड़ने चाहिए. - [C-0-6] को Android की शेयर की गई लाइब्रेरी में पैकेज किया जाना चाहिए, ताकि सिर्फ़ वे ऐप्लिकेशन इन एपीआई के ज़्यादा मेमोरी इस्तेमाल करने से प्रभावित हों जो साफ़ तौर पर इनका इस्तेमाल करते हैं. इसके लिए, <uses-library> मेकेनिज़्म का इस्तेमाल किया जाता है.
अगर डिवाइस बनाने वाली कंपनी, ऊपर दिए गए किसी पैकेज नेमस्पेस को बेहतर बनाने का सुझाव देती है (जैसे कि किसी मौजूदा एपीआई में काम की नई सुविधा जोड़ना या नया एपीआई जोड़ना), तो उसे source.android.com पर जाना चाहिए. साथ ही, उस साइट पर दी गई जानकारी के मुताबिक, बदलाव और कोड सबमिट करने की प्रोसेस शुरू करनी चाहिए.
ध्यान दें कि ऊपर दी गई पाबंदियां, Java प्रोग्रामिंग लैंग्वेज में एपीआई के नाम रखने के स्टैंडर्ड नियमों के मुताबिक हैं. इस सेक्शन का मकसद सिर्फ़ उन नियमों को मज़बूत करना है. साथ ही, उन्हें इस कंपैटिबिलिटी डेफ़िनिशन में शामिल करके, लागू करना है.
3.7. रनटाइम के साथ काम करता है या नहीं
डिवाइस में सेट किए गए सिस्टम के लिए:
-
[C-0-1] इसमें पूरा Dalvik Executable (DEX) फ़ॉर्मैट और Dalvik bytecode specification and semantics काम करना चाहिए.
-
[C-0-2] Dalvik रनटाइम को कॉन्फ़िगर करना ज़रूरी है, ताकि अपस्ट्रीम Android प्लैटफ़ॉर्म के मुताबिक मेमोरी को असाइन किया जा सके. साथ ही, यहां दी गई टेबल में बताए गए तरीके से मेमोरी को असाइन किया जा सके. (स्क्रीन के साइज़ और स्क्रीन डेंसिटी की परिभाषाओं के लिए, सेक्शन 7.1.1 देखें.)
-
Android RunTime (ART) का इस्तेमाल करना चाहिए. यह Dalvik Executable Format का अपस्ट्रीम रेफ़रंस है. साथ ही, रेफ़रंस के तौर पर लागू किए गए पैकेज मैनेजमेंट सिस्टम का इस्तेमाल करना चाहिए.
-
रनटाइम की स्थिरता की पुष्टि करने के लिए, इसे अलग-अलग मोड में एक्ज़ीक्यूट करके और टारगेट आर्किटेक्चर के तहत फ़ज़ टेस्ट करने चाहिए. Android Open Source Project की वेबसाइट पर, JFuzz और DexFuzz के बारे में जानकारी देखें.
ध्यान दें कि यहां दी गई मेमोरी की वैल्यू को कम से कम वैल्यू माना जाता है. डिवाइस बनाने वाली कंपनियां, हर ऐप्लिकेशन के लिए इससे ज़्यादा मेमोरी भी असाइन कर सकती हैं.
| स्क्रीन लेआउट | स्क्रीन की सघनता | ऐप्लिकेशन के लिए कम से कम मेमोरी |
|---|---|---|
| Android Watch | 120 डीपीआई (ldpi) | 32 एमबी |
| 160 डीपीआई (एमडीपीआई) | ||
| 213 डीपीआई (टीवीडीपीआई) | ||
| 240 डीपीआई (hdpi) | 36 एमबी | |
| 280 डीपीआई (280dpi) | ||
| 320 dpi (xhdpi) | 48 एमबी | |
| 360 डीपीआई (360dpi) | ||
| 400 डीपीआई (400dpi) | 56 एमबी | |
| 420 डीपीआई (420dpi) | 64 एमबी | |
| 480 dpi (xxhdpi) | 88 एमबी | |
| 560 डीपीआई (560dpi) | 112 एमबी | |
| 640 dpi (xxxhdpi) | 154 एमबी | |
| छोटा/सामान्य | 120 डीपीआई (ldpi) | 32 एमबी |
| 160 डीपीआई (एमडीपीआई) | ||
| 213 डीपीआई (टीवीडीपीआई) | 48 एमबी | |
| 240 डीपीआई (hdpi) | ||
| 280 डीपीआई (280dpi) | ||
| 320 dpi (xhdpi) | 80MB | |
| 360 डीपीआई (360dpi) | ||
| 400 डीपीआई (400dpi) | 96 एमबी | |
| 420 डीपीआई (420dpi) | 112 एमबी | |
| 480 dpi (xxhdpi) | 128 एमबी | |
| 560 डीपीआई (560dpi) | 192 एमबी | |
| 640 dpi (xxxhdpi) | 256 एमबी | |
| बड़ा | 120 डीपीआई (ldpi) | 32 एमबी |
| 160 डीपीआई (एमडीपीआई) | 48 एमबी | |
| 213 डीपीआई (टीवीडीपीआई) | 80MB | |
| 240 डीपीआई (hdpi) | ||
| 280 डीपीआई (280dpi) | 96 एमबी | |
| 320 dpi (xhdpi) | 128 एमबी | |
| 360 डीपीआई (360dpi) | 160 एमबी | |
| 400 डीपीआई (400dpi) | 192 एमबी | |
| 420 डीपीआई (420dpi) | 228MB | |
| 480 dpi (xxhdpi) | 256 एमबी | |
| 560 डीपीआई (560dpi) | 384MB | |
| 640 dpi (xxxhdpi) | 512 एमबी | |
| xlarge | 120 डीपीआई (ldpi) | 48 एमबी |
| 160 डीपीआई (एमडीपीआई) | 80MB | |
| 213 डीपीआई (टीवीडीपीआई) | 96 एमबी | |
| 240 डीपीआई (hdpi) | ||
| 280 डीपीआई (280dpi) | 144MB | |
| 320 dpi (xhdpi) | 192 एमबी | |
| 360 डीपीआई (360dpi) | 240 एमबी | |
| 400 डीपीआई (400dpi) | 288MB | |
| 420 डीपीआई (420dpi) | 336 एमबी | |
| 480 dpi (xxhdpi) | 384MB | |
| 560 डीपीआई (560dpi) | 576 एमबी | |
| 640 dpi (xxxhdpi) | 768 एमबी |
3.8. यूज़र इंटरफ़ेस के साथ काम करने की सुविधा
3.8.1. लॉन्चर (होम स्क्रीन)
Android में लॉन्चर ऐप्लिकेशन (होम स्क्रीन) शामिल होता है. साथ ही, इसमें डिवाइस लॉन्चर (होम स्क्रीन) को बदलने के लिए, तीसरे पक्ष के ऐप्लिकेशन इस्तेमाल करने की सुविधा भी होती है.
अगर डिवाइसों पर तीसरे पक्ष के ऐप्लिकेशन को डिवाइस की होम स्क्रीन बदलने की अनुमति मिलती है, तो:
- [C-1-1] प्लैटफ़ॉर्म की सुविधा
android.software.home_screenके बारे में एलान करना ज़रूरी है. - [C-1-2] तीसरे पक्ष के ऐप्लिकेशन के
<adaptive-icon>टैग का इस्तेमाल करके आइकॉन उपलब्ध कराने पर,AdaptiveIconDrawableऑब्जेक्ट को वापस भेजना ज़रूरी है. साथ ही, आइकॉन वापस पाने के लिएPackageManagerतरीकों को कॉल किया जाता है.
अगर डिवाइस में डिफ़ॉल्ट लॉन्चर शामिल है, जो ऐप्लिकेशन में शॉर्टकट पिन करने की सुविधा देता है, तो:
- [C-2-1]
ShortcutManager.isRequestPinShortcutSupported()के लिएtrueकी जानकारी देना ज़रूरी है. - [C-2-2]
ShortcutManager.requestPinShortcut()एपीआई के ज़रिए ऐप्लिकेशन से मिले शॉर्टकट जोड़ने के अनुरोध से पहले, उपयोगकर्ता से अनुमति लेना ज़रूरी है.
इसके उलट, अगर डिवाइस में ऐप्लिकेशन पिन करने की सुविधा काम नहीं करती है, तो:
- [C-3-1]
ShortcutManager.isRequestPinShortcutSupported()औरAppWidgetManager.html#isRequestPinAppWidgetSupported()के लिए,falseकी जानकारी देना ज़रूरी है.
अगर डिवाइसों में ऐसा डिफ़ॉल्ट लॉन्चर लागू किया जाता है जो तीसरे पक्ष के ऐप्लिकेशन से मिले अतिरिक्त शॉर्टकट को तुरंत ऐक्सेस करने की सुविधा देता है, तो ShortcutManager API के ज़रिए:
- [C-4-1] यह ज़रूरी है कि ऐप्लिकेशन में, दस्तावेज़ में बताई गई सभी शॉर्टकट सुविधाएं काम करती हों.जैसे, स्टैटिक और डाइनैमिक शॉर्टकट, पिन किए गए शॉर्टकट. साथ ही,
ShortcutManagerएपीआई क्लास के एपीआई पूरी तरह से लागू किए गए हों.
अगर डिवाइस में, डिफ़ॉल्ट लॉन्चर ऐप्लिकेशन शामिल है, जो ऐप्लिकेशन आइकॉन के लिए बैज दिखाता है, तो:
- [C-5-1]
NotificationChannel.setShowBadge()एपीआई के तरीके का पालन करना ज़रूरी है. दूसरे शब्दों में कहें, तो अगर वैल्यू कोtrueके तौर पर सेट किया गया है, तो ऐप्लिकेशन के आइकॉन से जुड़ा विज़ुअल अफ़ॉर्डेंस दिखाएं. साथ ही, जब ऐप्लिकेशन के सभी सूचना चैनलों के लिए वैल्यू कोfalseके तौर पर सेट किया गया हो, तब ऐप्लिकेशन के आइकॉन बैजिंग की कोई भी स्कीम न दिखाएं. - तीसरे पक्ष के ऐप्लिकेशन, मालिकाना हक वाली बैजिंग स्कीम के साथ काम करने की सुविधा देते हैं. ऐसे में, मालिकाना हक वाली बैजिंग स्कीम के लिए, ऐप्लिकेशन के आइकॉन बैज को मालिकाना हक वाले एपीआई का इस्तेमाल करके बदला जा सकता है. हालांकि, SDK में बताए गए सूचना बैज वाले एपीआई के ज़रिए उपलब्ध कराए गए संसाधनों और वैल्यू का इस्तेमाल करना चाहिए. जैसे,
Notification.Builder.setNumber()औरNotification.Builder.setBadgeIconType()एपीआई.
3.8.2. विजेट
Android, तीसरे पक्ष के ऐप्लिकेशन के विजेट के साथ काम करता है. इसके लिए, वह कॉम्पोनेंट टाइप, उससे जुड़ा एपीआई, और लाइफ़साइकल तय करता है. इससे ऐप्लिकेशन, असली उपयोगकर्ता को “AppWidget” दिखा पाते हैं.
अगर डिवाइस में तीसरे पक्ष के ऐप्लिकेशन के विजेट इस्तेमाल किए जा सकते हैं, तो:
- [C-1-1] यह ज़रूरी है कि ऐप्लिकेशन, android.software.app_widgets प्लैटफ़ॉर्म फ़ीचर के साथ काम करने का एलान करे.
- [C-1-2] लॉन्चर में, AppWidget के लिए पहले से मौजूद सहायता शामिल होनी चाहिए. साथ ही, लॉन्चर में सीधे तौर पर AppWidget जोड़ने, कॉन्फ़िगर करने, देखने, और हटाने के लिए, उपयोगकर्ता इंटरफ़ेस की सुविधाएं उपलब्ध होनी चाहिए.
- [C-1-3] में, स्टैंडर्ड ग्रिड साइज़ में 4 x 4 वाले विजेट रेंडर करने की सुविधा होनी चाहिए. ज़्यादा जानकारी के लिए, Android SDK के दस्तावेज़ में ऐप्लिकेशन विजेट डिज़ाइन करने के दिशा-निर्देश देखें.
- लॉक स्क्रीन पर ऐप्लिकेशन विजेट दिखाने की सुविधा दे सकता है.
अगर डिवाइस में तीसरे पक्ष के ऐप्लिकेशन के विजेट और ऐप्लिकेशन में शॉर्टकट पिन करने की सुविधा काम करती है, तो:
- [C-2-1]
AppWidgetManager.html.isRequestPinAppWidgetSupported()के लिएtrueकी जानकारी देना ज़रूरी है. - [C-2-2]
AppWidgetManager.requestPinAppWidget()एपीआई के ज़रिए ऐप्लिकेशन से मिले शॉर्टकट जोड़ने के अनुरोध से पहले, उपयोगकर्ता से अनुमति लेना ज़रूरी है.
3.8.3. सूचनाएं
Android में Notification और NotificationManager एपीआई शामिल हैं. इनकी मदद से, तीसरे पक्ष के ऐप्लिकेशन डेवलपर, उपयोगकर्ताओं को अहम इवेंट की सूचनाएं दे सकते हैं. साथ ही, डिवाइस के हार्डवेयर कॉम्पोनेंट (जैसे, आवाज़, वाइब्रेशन, और लाइट) और सॉफ़्टवेयर सुविधाओं (जैसे, नोटिफ़िकेशन शेड, सिस्टम बार) का इस्तेमाल करके, उपयोगकर्ताओं का ध्यान खींच सकते हैं.
3.8.3.1. सूचनाएं दिखाने का तरीका
अगर डिवाइसों पर तीसरे पक्ष के ऐप्लिकेशन को उपयोगकर्ताओं को खास इवेंट की सूचना देने की अनुमति है, तो:
- [C-1-1] SDK के दस्तावेज़ में बताए गए तरीके के मुताबिक, हार्डवेयर की सुविधाओं का इस्तेमाल करने वाली सूचनाओं के लिए सहायता उपलब्ध करानी होगी. साथ ही, डिवाइस में लागू किए गए हार्डवेयर के साथ जितना हो सके उतना काम करना होगा. उदाहरण के लिए, अगर किसी डिवाइस में वाइब्रेटर शामिल है, तो उसमें वाइब्रेशन एपीआई को सही तरीके से लागू करना ज़रूरी है. अगर किसी डिवाइस में हार्डवेयर मौजूद नहीं है, तो उससे जुड़े एपीआई को नो-ऑप के तौर पर लागू करना ज़रूरी है. इस बारे में ज़्यादा जानकारी, सेक्शन 7 में दी गई है.
- [C-1-2] APIs में दिए गए या स्टेटस/सिस्टम बार आइकॉन स्टाइल गाइड में दिए गए सभी संसाधनों (आइकॉन, ऐनिमेशन फ़ाइलें वगैरह) को सही तरीके से रेंडर करना ज़रूरी है. हालांकि, ये सूचनाओं के लिए, Android Open Source के रेफ़रंस के तौर पर लागू किए गए तरीके के बजाय, उपयोगकर्ता को कोई दूसरा अनुभव दे सकते हैं.
- [C-1-3] सूचनाओं को अपडेट करने, हटाने, और ग्रुप करने के लिए, एपीआई के बारे में बताए गए तरीकों का पालन करना और उन्हें सही तरीके से लागू करना ज़रूरी है.
- [C-1-4] एसडीके में, NotificationChannel एपीआई के पूरे व्यवहार की जानकारी देना ज़रूरी है.
- [C-1-5] हर चैनल और ऐप्लिकेशन पैकेज लेवल के हिसाब से, किसी तीसरे पक्ष के ऐप्लिकेशन की सूचना को ब्लॉक करने और उसमें बदलाव करने की सुविधा देना ज़रूरी है.
- [C-1-6] उपयोगकर्ता को, मिटाए गए सूचना चैनलों को दिखाने का विकल्प भी देना होगा.
- रिच सूचनाएं दिखाने की सुविधा होनी चाहिए.
- उसे ज़्यादा प्राथमिकता वाली कुछ सूचनाओं को, स्क्रीन पर सबसे ऊपर दिखने वाली सूचनाओं के तौर पर दिखाना चाहिए.
- उपयोगकर्ता के पास सूचनाएं स्नूज़ करने का विकल्प होना चाहिए.
- MAY सिर्फ़ यह मैनेज कर सकता है कि तीसरे पक्ष के ऐप्लिकेशन, उपयोगकर्ताओं को अहम इवेंट की सूचना कब दिखाएं. इससे ड्राइवर का ध्यान भटकने जैसी सुरक्षा से जुड़ी समस्याओं को कम किया जा सकता है.
अगर डिवाइस में रिच नोटिफ़िकेशन की सुविधा काम करती है, तो:
- [C-2-1] दिखाए गए संसाधन एलिमेंट के लिए,
Notification.Styleएपीआई क्लास और उसकी सबक्लास के ज़रिए उपलब्ध कराए गए संसाधनों का इस्तेमाल करना ज़रूरी है. - इसमें
Notification.Styleएपीआई क्लास और इसकी सबक्लास में तय किए गए हर संसाधन एलिमेंट (जैसे, आइकॉन, टाइटल, और खास जानकारी वाला टेक्स्ट) को दिखाना चाहिए.
अगर डिवाइस में, स्क्रीन पर सबसे ऊपर सूचना देने वाले कार्ड की सुविधा काम करती है, तो:
- [C-3-1] सूचनाएं दिखाते समय,
Notification.Builderएपीआई क्लास में बताए गए तरीके से, स्क्रीन पर सबसे ऊपर सूचना देने वाले कार्ड और संसाधनों का इस्तेमाल करना ज़रूरी है.
3.8.3.2. सूचना सुनने की सेवा
Android में NotificationListenerService एपीआई शामिल हैं. इनकी मदद से, ऐप्लिकेशन को सभी सूचनाओं की कॉपी मिल सकती है. हालांकि, इसके लिए उपयोगकर्ता को साफ़ तौर पर ऐप्लिकेशन को अनुमति देनी होगी. ये सूचनाएं तब मिलती हैं, जब उन्हें पोस्ट या अपडेट किया जाता है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] सूचनाओं को सही तरीके से और तुरंत अपडेट करना होगा. साथ ही, उन्हें उन सभी सेवाओं को भेजना होगा जो इंस्टॉल की गई हैं और जिन्हें उपयोगकर्ता ने सूचनाएं पाने की अनुमति दी है. इसमें सूचना ऑब्जेक्ट से जुड़ा पूरा मेटाडेटा भी शामिल है.
- [C-0-2]
snoozeNotification()एपीआई कॉल का पालन करना ज़रूरी है. साथ ही, सूचना को खारिज करना और एपीआई कॉल में सेट किए गए स्नूज़ के समय के बाद कॉलबैक करना ज़रूरी है.
अगर डिवाइसों में सूचनाएं स्नूज़ करने की सुविधा उपलब्ध है, तो:
- [C-1-1] उसे स्टैंडर्ड एपीआई, जैसे कि
NotificationListenerService.getSnoozedNotifications()के ज़रिए, स्नूज़ की गई सूचना की स्थिति को सही तरीके से दिखाना चाहिए. - [C-1-2] उपयोगकर्ता को यह सुविधा उपलब्ध करानी होगी, ताकि वह इंस्टॉल किए गए तीसरे पक्ष के हर ऐप्लिकेशन से मिलने वाली सूचनाओं को कुछ समय के लिए बंद कर सके. हालांकि, यह सुविधा लगातार चलने वाली/फ़ोरग्राउंड सेवाओं से मिलने वाली सूचनाओं के लिए उपलब्ध नहीं होगी.
3.8.3.3. डीएनडी (परेशान न करें)
अगर डिवाइस में, 'परेशान न करें' सुविधा काम करती है, तो:
- [C-1-1] ऐप्लिकेशन को ऐसी ऐक्टिविटी लागू करनी होगी जो ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS इंटेंट का जवाब दे सके. UI_MODE_TYPE_NORMAL के साथ लागू करने के लिए, यह ऐसी ऐक्टिविटी होनी चाहिए जहां उपयोगकर्ता, ऐप्लिकेशन को DND नीति के कॉन्फ़िगरेशन का ऐक्सेस दे सके या उसे अस्वीकार कर सके.
- [C-1-2] डिवाइस को यह सुविधा देनी होगी कि उपयोगकर्ता, तीसरे पक्ष के ऐप्लिकेशन को 'परेशान न करें' मोड की नीति के कॉन्फ़िगरेशन को ऐक्सेस करने की अनुमति दे या न दे. साथ ही, उसे ऐप्लिकेशन की बनाई गई 'परेशान न करें' मोड की अपने-आप लागू होने वाली सेटिंग को, उपयोगकर्ता की बनाई गई और पहले से तय की गई सेटिंग के साथ दिखाना होगा.
- [C-1-3]
NotificationManager.Policyके साथ पास की गईsuppressedVisualEffectsवैल्यू का पालन करना ज़रूरी है. अगर किसी ऐप्लिकेशन ने SUPPRESSED_EFFECT_SCREEN_OFF या SUPPRESSED_EFFECT_SCREEN_ON फ़्लैग में से कोई भी फ़्लैग सेट किया है, तो उसे उपयोगकर्ता को यह बताना चाहिए कि 'परेशान न करें' सेटिंग मेन्यू में विज़ुअल इफ़ेक्ट बंद कर दिए गए हैं.
3.8.4. खोजें
Android में ऐसे एपीआई शामिल हैं जिनकी मदद से डेवलपर, अपने ऐप्लिकेशन में खोज की सुविधा शामिल कर सकते हैं. साथ ही, अपने ऐप्लिकेशन के डेटा को ग्लोबल सिस्टम सर्च में दिखा सकते हैं. आम तौर पर, इस सुविधा में एक ही सिस्टम-वाइड यूज़र इंटरफ़ेस होता है. इससे उपयोगकर्ता क्वेरी डाल सकते हैं, टाइप करते समय सुझाव देख सकते हैं, और नतीजे देख सकते हैं. Android API की मदद से डेवलपर, इस इंटरफ़ेस का फिर से इस्तेमाल कर सकते हैं. इससे वे अपने ऐप्लिकेशन में खोज की सुविधा दे सकते हैं. साथ ही, डेवलपर को ग्लोबल सर्च के सामान्य यूज़र इंटरफ़ेस पर नतीजे दिखाने की अनुमति मिलती है.
- Android डिवाइसों में, ग्लोबल सर्च की सुविधा शामिल होनी चाहिए. साथ ही, एक ऐसा सर्च यूज़र इंटरफ़ेस (यूआई) होना चाहिए जो सिस्टम के साथ शेयर किया गया हो और उपयोगकर्ता के इनपुट के आधार पर रीयल-टाइम में सुझाव दे सके.
अगर डिवाइसों में ग्लोबल सर्च इंटरफ़ेस लागू किया जाता है, तो:
- [C-1-1] ऐसे एपीआई लागू करने होंगे जिनकी मदद से, तीसरे पक्ष के ऐप्लिकेशन, ग्लोबल सर्च मोड में खोज बॉक्स में सुझाव जोड़ सकें.
अगर ग्लोबल सर्च की सुविधा का इस्तेमाल करने वाले तीसरे पक्ष के कोई भी ऐप्लिकेशन इंस्टॉल नहीं किए गए हैं, तो:
- डिफ़ॉल्ट रूप से, वेब सर्च इंजन के नतीजे और सुझाव दिखने चाहिए.
Android में सहायता करने वाले एपीआई भी शामिल हैं. इनकी मदद से ऐप्लिकेशन यह तय कर सकते हैं कि डिवाइस पर मौजूद असिस्टेंट के साथ, मौजूदा कॉन्टेक्स्ट की कितनी जानकारी शेयर की जाए.
अगर डिवाइस में, 'ठीक है Google' सुविधा काम करती है, तो:
- [C-2-1] असली उपयोगकर्ता को यह साफ़ तौर पर बताना ज़रूरी है कि कॉन्टेक्स्ट कब शेयर किया जाता है. इसके लिए, इनमें से कोई एक तरीका अपनाएं:
- जब भी डिजिटल असिस्टेंट ऐप्लिकेशन कॉन्टेक्स्ट को ऐक्सेस करता है, तब स्क्रीन के किनारों पर सफ़ेद रंग की लाइट दिखती है. यह लाइट, Android Open Source Project के लागू करने की अवधि और चमक के बराबर या उससे ज़्यादा होती है.
- पहले से इंस्टॉल किए गए असिस्ट ऐप्लिकेशन के लिए, डिफ़ॉल्ट वॉइस इनपुट और असिस्टेंट ऐप्लिकेशन की सेटिंग के मेन्यू से दो से कम नेविगेशन में उपयोगकर्ता को सुविधा देना. साथ ही, असिस्ट ऐप्लिकेशन के लिए सिर्फ़ तब कॉन्टेक्स्ट शेयर करना, जब उपयोगकर्ता ने हॉटवर्ड या असिस्ट नेविगेशन कुंजी के इनपुट के ज़रिए साफ़ तौर पर इसे चालू किया हो.
- [C-2-2] सेक्शन 7.2.3 में बताए गए तरीके से, सहायता करने वाले ऐप्लिकेशन को लॉन्च करने के लिए तय की गई बातचीत से, उपयोगकर्ता के चुने गए सहायता करने वाले ऐप्लिकेशन को लॉन्च किया जाना चाहिए. दूसरे शब्दों में,
VoiceInteractionServiceको लागू करने वाले ऐप्लिकेशन याACTION_ASSISTइंटेंट को हैंडल करने वाली गतिविधि को लॉन्च किया जाना चाहिए. - [C-SR]
HOMEबटन को दबाकर रखने की सुविधा का इस्तेमाल करने का सुझाव दिया जाता है, क्योंकि यह सुविधा इंटरैक्शन के लिए तय की गई है.
3.8.5. सूचनाएं और सूचनाएं
ऐप्लिकेशन, Toast एपीआई का इस्तेमाल करके, असली उपयोगकर्ता को छोटी नॉन-मोडल स्ट्रिंग दिखा सकते हैं. ये स्ट्रिंग कुछ समय बाद गायब हो जाती हैं. साथ ही, TYPE_APPLICATION_OVERLAY विंडो टाइप एपीआई का इस्तेमाल करके, अन्य ऐप्लिकेशन के ऊपर ओवरले के तौर पर सूचना वाली विंडो दिखा सकते हैं.
अगर डिवाइसों में स्क्रीन या वीडियो आउटपुट शामिल है, तो:
-
[C-1-1] उपयोगकर्ता को यह विकल्प देना ज़रूरी है कि वह किसी ऐप्लिकेशन को
TYPE_APPLICATION_OVERLAYका इस्तेमाल करके सूचना वाली विंडो दिखाने से रोक सके . AOSP में इस सुविधा को लागू करने के लिए, सूचना पैनल में कंट्रोल दिए गए हैं. इससे यह ज़रूरी शर्त पूरी होती है. -
[C-1-2] Toast API का इस्तेमाल करना ज़रूरी है. साथ ही, ऐप्लिकेशन से मिले टॉस्ट को असली उपयोगकर्ताओं को इस तरह दिखाना ज़रूरी है कि वे आसानी से दिखें.
3.8.6. थीम
Android, ऐप्लिकेशन के लिए “थीम” उपलब्ध कराता है. इससे ऐप्लिकेशन, पूरी गतिविधि या ऐप्लिकेशन पर स्टाइल लागू कर सकते हैं.
Android में, “Holo” और "Material" थीम फ़ैमिली शामिल है. यह ऐप्लिकेशन डेवलपर के लिए, तय की गई स्टाइल का एक सेट है. अगर उन्हें Android SDK के हिसाब से, Holo थीम के लुक और फ़ील से मैच करना है, तो वे इसका इस्तेमाल कर सकते हैं.
अगर डिवाइसों में स्क्रीन या वीडियो आउटपुट शामिल है, तो:
- [C-1-1] ऐप्लिकेशन के लिए उपलब्ध कराए गए, Holo थीम के किसी भी एट्रिब्यूट में बदलाव नहीं किया जाना चाहिए.
- [C-1-2] में “Material” थीम फ़ैमिली के साथ काम करने की सुविधा होनी चाहिए. साथ ही, इसमें Material थीम एट्रिब्यूट या ऐप्लिकेशन के लिए उपलब्ध कराई गई उनकी ऐसेट में कोई बदलाव नहीं किया जाना चाहिए.
Android में “डिवाइस की डिफ़ॉल्ट थीम” भी शामिल होती है. यह ऐप्लिकेशन डेवलपर के लिए, तय की गई स्टाइल का एक सेट होता है. इसका इस्तेमाल डेवलपर तब करते हैं, जब उन्हें डिवाइस की थीम के लुक और फ़ील को मैच करना होता है. यह थीम, डिवाइस बनाने वाली कंपनी तय करती है.
- डिवाइस बनाने वाली कंपनियां, ऐप्लिकेशन के लिए उपलब्ध डिवाइस की डिफ़ॉल्ट थीम के एट्रिब्यूट में बदलाव कर सकती हैं.
Android, ट्रांसलूसेंट सिस्टम बार वाली थीम के वैरिएंट के साथ काम करता है. इससे ऐप्लिकेशन डेवलपर, स्टेटस और नेविगेशन बार के पीछे की जगह को अपने ऐप्लिकेशन के कॉन्टेंट से भर सकते हैं. इस कॉन्फ़िगरेशन में डेवलपर को एक जैसा अनुभव देने के लिए, यह ज़रूरी है कि स्टेटस बार के आइकॉन का स्टाइल अलग-अलग डिवाइसों पर एक जैसा हो.
अगर डिवाइस में सिस्टम स्टेटस बार शामिल है, तो:
- [C-2-1] सिस्टम की स्थिति बताने वाले आइकॉन (जैसे, सिग्नल की ताकत और बैटरी का लेवल) और सिस्टम से जारी की गई सूचनाओं के लिए, सफ़ेद रंग का इस्तेमाल करना ज़रूरी है. हालांकि, अगर आइकॉन से किसी समस्या की स्थिति का पता चलता है या ऐप्लिकेशन, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR फ़्लैग का इस्तेमाल करके लाइट स्टेटस बार का अनुरोध करता है, तो ऐसा करना ज़रूरी नहीं है.
- [C-2-2] जब कोई ऐप्लिकेशन, हल्के रंग वाला स्टेटस बार दिखाने का अनुरोध करता है, तब Android डिवाइसों को सिस्टम स्टेटस आइकॉन का रंग बदलकर काला करना होगा. ज़्यादा जानकारी के लिए, R.style देखें.
3.8.7. लाइव वॉलपेपर
Android, कॉम्पोनेंट टाइप, उससे जुड़ा एपीआई, और लाइफ़साइकल तय करता है. इससे ऐप्लिकेशन, असली उपयोगकर्ता को एक या उससे ज़्यादा “लाइव वॉलपेपर” दिखा पाते हैं. लाइव वॉलपेपर, ऐनिमेशन, पैटर्न या मिलती-जुलती इमेज होती हैं. इनमें इनपुट देने की सीमित सुविधाएं होती हैं. ये अन्य ऐप्लिकेशन के पीछे, वॉलपेपर के तौर पर दिखती हैं.
अगर कोई हार्डवेयर, सभी लाइव वॉलपेपर को बिना किसी रुकावट के, सही फ़्रेम रेट पर चला सकता है और इससे दूसरे ऐप्लिकेशन पर कोई बुरा असर नहीं पड़ता है, तो उसे लाइव वॉलपेपर चलाने के लिए सही माना जाता है. अगर हार्डवेयर की सीमाओं की वजह से वॉलपेपर और/या ऐप्लिकेशन क्रैश होते हैं, ठीक से काम नहीं करते हैं, ज़्यादा सीपीयू या बैटरी की खपत करते हैं या बहुत कम फ़्रेम रेट पर चलते हैं, तो यह माना जाता है कि हार्डवेयर लाइव वॉलपेपर चलाने में सक्षम नहीं है. उदाहरण के लिए, कुछ लाइव वॉलपेपर, कॉन्टेंट रेंडर करने के लिए OpenGL 2.0 या 3.x कॉन्टेक्स्ट का इस्तेमाल कर सकते हैं. लाइव वॉलपेपर, ऐसे हार्डवेयर पर ठीक से काम नहीं करेगा जो एक से ज़्यादा OpenGL कॉन्टेक्स्ट के साथ काम नहीं करता. ऐसा इसलिए, क्योंकि लाइव वॉलपेपर के लिए OpenGL कॉन्टेक्स्ट का इस्तेमाल, OpenGL कॉन्टेक्स्ट का इस्तेमाल करने वाले अन्य ऐप्लिकेशन के साथ टकराव कर सकता है.
- ऊपर बताए गए तरीके से, लाइव वॉलपेपर को भरोसेमंद तरीके से चलाने में सक्षम डिवाइसों को लाइव वॉलपेपर की सुविधा लागू करनी चाहिए.
अगर डिवाइस में लाइव वॉलपेपर की सुविधा लागू की जाती है, तो:
- [C-1-1] प्लैटफ़ॉर्म फ़ीचर फ़्लैग android.software.live_wallpaper की जानकारी देना ज़रूरी है.
3.8.8. गतिविधि स्विच करना
अपस्ट्रीम Android सोर्स कोड में खास जानकारी वाली स्क्रीन शामिल होती है. यह सिस्टम-लेवल का यूज़र इंटरफ़ेस है. इसका इस्तेमाल, टास्क स्विच करने और हाल ही में ऐक्सेस की गई गतिविधियों और टास्क को दिखाने के लिए किया जाता है. इसके लिए, ऐप्लिकेशन की ग्राफ़िकल स्थिति की थंबनेल इमेज का इस्तेमाल किया जाता है. यह इमेज तब की होती है, जब उपयोगकर्ता ने आखिरी बार ऐप्लिकेशन का इस्तेमाल किया था.
डिवाइस में लागू किए गए बदलावों की वजह से, इंटरफ़ेस में बदलाव हो सकता है. इनमें, हाल ही के ऐप्लिकेशन फ़ंक्शन को ऐक्सेस करने के लिए इस्तेमाल की जाने वाली नेविगेशन कुंजी भी शामिल है. इसके बारे में सेक्शन 7.2.3 में बताया गया है.
अगर सेक्शन 7.2.3 में बताई गई, हाल ही के ऐप्लिकेशन के फ़ंक्शन को नेविगेट करने की कुंजी के साथ-साथ डिवाइस के अन्य फ़ंक्शन को लागू करने से इंटरफ़ेस में बदलाव होता है, तो:
- [C-1-1] कम से कम 20 ऐक्टिविटी दिखाने की सुविधा होनी चाहिए.
- एक बार में कम से कम चार गतिविधियों के टाइटल दिखने चाहिए.
- [C-1-2] स्क्रीन पिन करने की सुविधा को लागू करना ज़रूरी है. साथ ही, उपयोगकर्ता को इस सुविधा को टॉगल करने के लिए, सेटिंग मेन्यू उपलब्ध कराना ज़रूरी है.
- हाल के ऐप्लिकेशन में, हाइलाइट करने के लिए इस्तेमाल किया गया रंग, आइकॉन, और स्क्रीन का टाइटल दिखना चाहिए.
- इसमें बंद करने का विकल्प ("x") दिखना चाहिए. हालांकि, उपयोगकर्ता के स्क्रीन से इंटरैक्ट करने तक इसे दिखाने में देरी की जा सकती है.
- पिछले टास्क पर आसानी से स्विच करने के लिए, शॉर्टकट लागू करना चाहिए
- जब हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की फ़ंक्शन बटन को दो बार टैप किया जाता है, तो इससे हाल ही में इस्तेमाल किए गए दो ऐप्लिकेशन के बीच तुरंत स्विच करने का ऐक्शन ट्रिगर होना चाहिए.
- अगर स्प्लिट-स्क्रीन मल्टीविंडो मोड की सुविधा उपलब्ध है, तो हाल ही के ऐप्लिकेशन की फ़ंक्शन कुंजी को दबाकर रखने पर, यह मोड चालू होना चाहिए.
-
ऐसा हो सकता है कि यह अफ़िलिएट किए गए हाल ही के आइटम को एक ऐसे ग्रुप के तौर पर दिखाए जो एक साथ मूव करता है.
-
[C-SR] डिवाइसों में Android के अपस्ट्रीम यूज़र इंटरफ़ेस (या थंबनेल पर आधारित मिलते-जुलते इंटरफ़ेस) का इस्तेमाल करने का सुझाव दिया जाता है.
3.8.9. इनपुट मैनेजमेंट
Android में, इनपुट मैनेजमेंट की सुविधा शामिल है. साथ ही, इसमें तीसरे पक्ष के इनपुट मेथड एडिटर का इस्तेमाल किया जा सकता है.
अगर डिवाइस पर तीसरे पक्ष के इनपुट मेथड इस्तेमाल करने की अनुमति है, तो:
- [C-1-1] ऐप्लिकेशन को android.software.input_methods प्लैटफ़ॉर्म फ़ीचर के बारे में बताना होगा. साथ ही, Android SDK के दस्तावेज़ में बताए गए IME API के साथ काम करना होगा.
- [C-1-2] android.settings.INPUT_METHOD_SETTINGS इंटेंट के जवाब में, तीसरे पक्ष के इनपुट मेथड जोड़ने और कॉन्फ़िगर करने के लिए, उपयोगकर्ता के लिए उपलब्ध एक तरीका देना होगा.
अगर डिवाइसों में android.software.autofill फ़ीचर फ़्लैग का एलान किया जाता है, तो:
- [C-2-1]
AutofillServiceऔरAutofillManagerएपीआई को पूरी तरह से लागू करना होगा. साथ ही,android.settings.REQUEST_SET_AUTOFILL_SERVICEइंटेंट का पालन करना होगा, ताकि उपयोगकर्ता को डिफ़ॉल्ट ऐप्लिकेशन की सेटिंग का मेन्यू दिखाया जा सके. इससे उपयोगकर्ता, अपने लिए डिफ़ॉल्ट तौर पर जानकारी अपने-आप भरने की सुविधा को चालू और बंद कर पाएगा. साथ ही, डिफ़ॉल्ट तौर पर जानकारी अपने-आप भरने की सेवा को बदल पाएगा.
3.8.10. लॉक स्क्रीन पर मीडिया कंट्रोल करने की सुविधा
Android 5.0 से, Remote Control Client API का इस्तेमाल बंद कर दिया गया है. इसके बजाय, Media Notification Template का इस्तेमाल किया जाता है. इससे मीडिया ऐप्लिकेशन, लॉक स्क्रीन पर दिखने वाले प्लेबैक कंट्रोल के साथ इंटिग्रेट हो पाते हैं.
3.8.11. स्क्रीन सेवर (पहले इन्हें ड्रीम कहा जाता था)
Android में interactivescreensavers की सुविधा काम करती है. इसे पहले Dreams कहा जाता था. स्क्रीन सेवर की मदद से, उपयोगकर्ता उन ऐप्लिकेशन से इंटरैक्ट कर सकते हैं जो पावर सोर्स से कनेक्ट किए गए डिवाइस पर तब दिखते हैं, जब डिवाइस का इस्तेमाल नहीं किया जा रहा हो या उसे डेस्क डॉक में डॉक किया गया हो. Android Watch डिवाइसों में स्क्रीन सेवर की सुविधा लागू की जा सकती है. हालांकि, अन्य डिवाइसों में स्क्रीन सेवर की सुविधा होनी चाहिए. साथ ही, उपयोगकर्ताओं को android.settings.DREAM_SETTINGS इंटेंट के जवाब में स्क्रीन सेवर कॉन्फ़िगर करने के लिए, सेटिंग का विकल्प देना चाहिए.
3.8.12. जगह
अगर डिवाइस में हार्डवेयर सेंसर (जैसे कि जीपीएस) शामिल है, जो जगह की जानकारी के कोऑर्डिनेट दे सकता है, तो:
- [C-1-1] location modes को सेटिंग में मौजूद लोकेशन मेन्यू में दिखाना ज़रूरी है.
3.8.13. यूनिकोड और फ़ॉन्ट
Android में, Unicode 10.0 में तय किए गए इमोजी वर्णों का इस्तेमाल किया जा सकता है.
अगर डिवाइसों में स्क्रीन या वीडियो आउटपुट शामिल है, तो:
- [C-1-1] में इन इमोजी वर्णों को रंगीन ग्लिफ़ में रेंडर करने की सुविधा होनी चाहिए.
- [C-1-2] इसमें इनके लिए सहायता शामिल होनी चाहिए:
- डिवाइस पर उपलब्ध भाषाओं के लिए, Roboto 2 फ़ॉन्ट के अलग-अलग वर्शन—sans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black, sans-serif-condensed, sans-serif-condensed-light.
- लैटिन, ग्रीक, और सिरिलिक के लिए, यूनिकोड 7.0 के सभी वर्ण शामिल हैं. इनमें लैटिन एक्सटेंडेड ए, बी, सी, और डी रेंज के साथ-साथ यूनिकोड 7.0 के मुद्रा के चिह्न वाले ब्लॉक में मौजूद सभी ग्लिफ़ शामिल हैं.
- इसमें यूनिकोड टेक्निकल रिपोर्ट #51 में बताए गए स्किन टोन और अलग-अलग तरह के परिवार वाले इमोजी इस्तेमाल किए जा सकते हैं.
अगर डिवाइस में IME शामिल है, तो:
- उपयोगकर्ता को इन इमोजी वर्णों के लिए, इनपुट का तरीका उपलब्ध कराना चाहिए.
3.8.14. मल्टी-विंडो
अगर डिवाइसों में एक ही समय पर कई ऐक्टिविटी दिखाने की केपबिलिटी है, तो:
- [C-1-1] Android SDK मल्टी-विंडो मोड के साथ काम करने से जुड़े दस्तावेज़ में बताए गए ऐप्लिकेशन के व्यवहार और एपीआई के मुताबिक, मल्टी-विंडो मोड लागू करना ज़रूरी है. साथ ही, इन ज़रूरी शर्तों को पूरा करना भी ज़रूरी है:
- [C-1-2] ऐप्लिकेशन,
AndroidManifest.xmlफ़ाइल में यह जानकारी दे सकते हैं कि वे मल्टी-विंडो मोड में काम कर सकते हैं या नहीं. इसके लिए, वेandroid:resizeableActivityएट्रिब्यूट कोtrueपर सेट कर सकते हैं. इसके अलावा, targetSdkVersion > 24 होने पर भी यह जानकारी दी जा सकती है. जिन ऐप्लिकेशन ने अपने मेनिफ़ेस्ट में इस एट्रिब्यूट कोfalseपर सेट किया है उन्हें मल्टी-विंडो मोड में लॉन्च नहीं किया जाना चाहिए. targetSdkVersion < 24 वाले पुराने ऐप्लिकेशन, जिन्होंने इसandroid:resizeableActivityएट्रिब्यूट को सेट नहीं किया है उन्हें मल्टी-विंडो मोड में लॉन्च किया जा सकता है. हालांकि, सिस्टम को यह चेतावनी देनी होगी कि ऐप्लिकेशन, मल्टी-विंडो मोड में उम्मीद के मुताबिक काम नहीं कर सकता. - [C-1-3] अगर स्क्रीन की ऊंचाई और चौड़ाई, दोनों 440 डीपी से कम हैं, तो स्प्लिट-स्क्रीन या फ़्रीफ़ॉर्म मोड की सुविधा नहीं दी जानी चाहिए.
- स्क्रीन साइज़
xlargeवाले डिवाइसों में, फ़्रीफ़ॉर्म मोड काम करना चाहिए.
अगर डिवाइस में मल्टी-विंडो मोड और स्प्लिट स्क्रीन मोड काम करते हैं, तो:
- [C-2-1] डिफ़ॉल्ट रूप से, रीसाइज़ किए जा सकने वाले लॉन्चर को प्रीलोड करना ज़रूरी है.
- [C-2-2] अगर लॉन्चर ऐप्लिकेशन फ़ोकस की गई विंडो है, तो स्प्लिट-स्क्रीन मल्टी-विंडो में डॉक की गई गतिविधि को काटना ज़रूरी है. हालांकि, इसका कुछ कॉन्टेंट दिखाना चाहिए.
- [C-2-3] तीसरे पक्ष के लॉन्चर ऐप्लिकेशन की बताई गई
AndroidManifestLayout_minWidthऔरAndroidManifestLayout_minHeightवैल्यू का पालन करना ज़रूरी है. साथ ही, डॉक की गई गतिविधि का कुछ कॉन्टेंट दिखाते समय, इन वैल्यू को बदलना नहीं चाहिए.
अगर डिवाइस में मल्टी-विंडो मोड और पिक्चर-इन-पिक्चर मल्टी-विंडो मोड काम करते हैं, तो:
- [C-3-1] ऐप्लिकेशन को मल्टी-विंडो मोड में पिक्चर-इन-पिक्चर मोड में गतिविधियां लॉन्च करनी होंगी. ऐसा तब करना होगा, जब ऐप्लिकेशन: * एपीआई लेवल 26 या उसके बाद के वर्शन को टारगेट कर रहा हो और
android:supportsPictureInPictureका एलान कर रहा हो * एपीआई लेवल 25 या उसके पहले के वर्शन को टारगेट कर रहा हो औरandroid:resizeableActivityऔरandroid:supportsPictureInPicture, दोनों का एलान कर रहा हो. - [C-3-2] सिस्टम यूआई में, मौजूदा पीआईपी ऐक्टिविटी के हिसाब से कार्रवाइयां दिखनी चाहिए. इसके लिए,
setActions()एपीआई का इस्तेमाल करना ज़रूरी है. - [C-3-3] में,
setAspectRatio()एपीआई के ज़रिए पीआईपी गतिविधि में बताए गए आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) का इस्तेमाल किया जाना चाहिए. यह अनुपात 1:2.39 से ज़्यादा या उसके बराबर और 2.39:1 से कम या उसके बराबर होना चाहिए. - [C-3-4] पीआईपी विंडो को कंट्रोल करने के लिए,
KeyEvent.KEYCODE_WINDOWका इस्तेमाल करना ज़रूरी है. अगर पीआईपी मोड लागू नहीं किया गया है, तो यह बटन फ़ोरग्राउंड गतिविधि के लिए उपलब्ध होना चाहिए. - [C-3-5] ऐप्लिकेशन को, उपयोगकर्ता को यह सुविधा देनी होगी कि वह ऐप्लिकेशन को पीआईपी मोड में दिखने से रोक सके. AOSP में इस सुविधा को लागू किया गया है. इसमें सूचना पैनल में कंट्रोल होते हैं.
- [C-3-6] पीआईपी विंडो के लिए, कम से कम 108 डीपी की चौड़ाई और ऊंचाई तय करनी होगी. साथ ही, जब
Configuration.uiModeकोUI_MODE_TYPE_TELEVISIONके तौर पर कॉन्फ़िगर किया गया हो, तब पीआईपी विंडो के लिए कम से कम 240 डीपी की चौड़ाई और 135 डीपी की ऊंचाई तय करनी होगी
3.9. डिवाइस प्रबंधन
Android में ऐसी सुविधाएं शामिल हैं जिनकी मदद से, सुरक्षा के बारे में जानकारी रखने वाले ऐप्लिकेशन, सिस्टम लेवल पर डिवाइस एडमिनिस्ट्रेशन से जुड़े फ़ंक्शन कर सकते हैं. जैसे, पासवर्ड से जुड़ी नीतियां लागू करना या Android Device Administration API के ज़रिए, दूर से डिवाइस का डेटा मिटाना.
अगर डिवाइसों में, Android SDK के दस्तावेज़ में बताई गई डिवाइस एडमिनिस्ट्रेशन की सभी नीतियां लागू की जाती हैं, तो:
- [C-1-1]
android.software.device_adminका एलान करना ज़रूरी है. - [C-1-2] में, डिवाइस के मालिक के लिए प्रोविज़निंग की सुविधा होनी चाहिए. इसके बारे में सेक्शन 3.9.1 और सेक्शन 3.9.1.1 में बताया गया है.
- [C-1-3]
android.software.managed_usersफ़ीचर फ़्लैग के ज़रिए, मैनेज की गई प्रोफ़ाइलों के साथ काम करने की सुविधा के बारे में बताना ज़रूरी है. हालांकि, ऐसा तब नहीं करना होगा, जब डिवाइस को इस तरह कॉन्फ़िगर किया गया हो कि वह खुद को कम रैम वाला डिवाइस बताए या इंटरनल (हटाया नहीं जा सकने वाला) स्टोरेज को शेयर किए गए स्टोरेज के तौर पर असाइन करे.
3.9.1 डिवाइस प्रॉविज़निंग
3.9.1.1 डिवाइस के मालिक के लिए प्रॉविज़निंग
अगर डिवाइसों में android.software.device_admin का एलान किया जाता है, तो:
- [C-1-1] डिवाइस में, डिवाइस नीति क्लाइंट (डीपीसी) को डिवाइस के मालिक वाले ऐप्लिकेशन के तौर पर रजिस्टर करने की सुविधा होनी चाहिए. इसके लिए, यहां दिया गया तरीका अपनाएं:
- जब डिवाइस पर उपयोगकर्ता का कोई डेटा कॉन्फ़िगर नहीं किया गया होता है, तो:
- [C-1-3]
DevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)के लिएtrueकी जानकारी देना ज़रूरी है. - [C-1-4] DPC ऐप्लिकेशन को डिवाइस के मालिक वाले ऐप्लिकेशन के तौर पर रजिस्टर करना ज़रूरी है. ऐसा इंटेंट ऐक्शन
android.app.action.PROVISION_MANAGED_DEVICEके जवाब में किया जाना चाहिए. - [C-1-5] अगर डिवाइस, फ़ीचर फ़्लैग
android.hardware.nfcके ज़रिए नियर-फ़ील्ड कम्यूनिकेशन (एनएफ़सी) की सुविधा के बारे में बताता है और उसेMIME_TYPE_PROVISIONING_NFCMIME टाइप वाला रिकॉर्ड शामिल करने वाला एनएफ़सी मैसेज मिलता है, तो DPC ऐप्लिकेशन को डिवाइस के मालिक के तौर पर रजिस्टर करना होगा.
- [C-1-3]
- अगर डिवाइस पर उपयोगकर्ता का डेटा मौजूद है, तो:
- [C-1-6]
DevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)के लिए,falseकी जानकारी देना ज़रूरी है. - [C-1-7] अब किसी भी DPC ऐप्लिकेशन को डिवाइस के मालिक के तौर पर रजिस्टर नहीं करना चाहिए.
- [C-1-6]
- जब डिवाइस पर उपयोगकर्ता का कोई डेटा कॉन्फ़िगर नहीं किया गया होता है, तो:
- [C-1-2] किसी ऐप्लिकेशन (इसमें पहले से इंस्टॉल किया गया ऐप्लिकेशन भी शामिल है) को डिवाइस के मालिक के तौर पर तब तक सेट नहीं किया जाना चाहिए, जब तक उपयोगकर्ता या डिवाइस के एडमिन की साफ़ तौर पर सहमति न मिल जाए या वह ऐसा न कर ले.
अगर डिवाइसों पर android.software.device_admin लागू किया गया है, लेकिन उनमें डिवाइस के मालिक के तौर पर काम करने वाले मैनेजमेंट सलूशन को भी शामिल किया गया है. साथ ही, उनके पास ऐसा तरीका है जिससे वे अपने सलूशन में कॉन्फ़िगर किए गए किसी ऐप्लिकेशन को, स्टैंडर्ड Android DevicePolicyManager एपीआई के ज़रिए पहचाने गए स्टैंडर्ड "डिवाइस के मालिक" के तौर पर "डिवाइस के मालिक के बराबर" प्रमोट कर सकते हैं, तो:
- [C-2-1] यह पुष्टि करने के लिए कि जिस ऐप्लिकेशन का प्रमोशन किया जा रहा है वह एंटरप्राइज़ डिवाइस मैनेजमेंट के भरोसेमंद समाधान से जुड़ा है, उसके पास एक प्रोसेस होनी चाहिए. साथ ही, यह पुष्टि करने के लिए कि उसे मालिकाना समाधान में पहले से कॉन्फ़िगर किया गया है, ताकि उसके पास "डिवाइस के मालिक" के बराबर अधिकार हों.
- [C-2-2] DPC ऐप्लिकेशन को "डिवाइस का मालिक" के तौर पर रजिस्टर करने से पहले,
android.app.action.PROVISION_MANAGED_DEVICEकी ओर से शुरू किए गए फ़्लो में, AOSP डिवाइस के मालिक की सहमति से जुड़ी जानकारी दिखनी चाहिए. - डीपीसी ऐप्लिकेशन को "डिवाइस का मालिक" के तौर पर रजिस्टर करने से पहले, डिवाइस पर उपयोगकर्ता का डेटा मौजूद हो सकता है.
3.9.1.2 मैनेज की जा रही प्रोफ़ाइल को चालू करना
अगर डिवाइसों में android.software.managed_users का एलान किया जाता है, तो:
-
[C-1-1] एपीआई लागू किए जाने चाहिए, ताकि डिवाइस पॉलिसी कंट्रोलर (डीपीसी) ऐप्लिकेशन, मैनेज की जा रही नई प्रोफ़ाइल का मालिक बन सके.
-
[C-1-2] मैनेज की जा रही प्रोफ़ाइल को चालू करने की प्रोसेस (android.app.action.PROVISION_MANAGED_PROFILE से शुरू होने वाला फ़्लो) का उपयोगकर्ता अनुभव, एओएसपी के साथ काम करने वाला होना चाहिए.
-
[C-1-3] डिवाइस नीति कंट्रोलर (डीपीसी) के ज़रिए किसी सिस्टम फ़ंक्शन को बंद किए जाने पर, उपयोगकर्ता को इसकी जानकारी देने के लिए, सेटिंग में ये सुविधाएं उपलब्ध कराना ज़रूरी है:
- एक जैसा आइकॉन या उपयोगकर्ता के लिए उपलब्ध अन्य सुविधा (उदाहरण के लिए, अपस्ट्रीम एओएसपी की जानकारी देने वाला आइकॉन), ताकि यह पता चल सके कि डिवाइस एडमिन ने किसी सेटिंग पर पाबंदी लगाई है.
- डिवाइस एडमिन ने
setShortSupportMessageके ज़रिए, कम शब्दों में जानकारी देने वाला मैसेज भेजा है. - डीपीसी ऐप्लिकेशन का आइकॉन.
3.9.2 मैनेज की जा रही प्रोफ़ाइल की सुविधा
अगर डिवाइसों में android.software.managed_users का एलान किया जाता है, तो:
- [C-1-1]
android.app.admin.DevicePolicyManagerएपीआई के ज़रिए मैनेज की गई प्रोफ़ाइलों के साथ काम करना ज़रूरी है. - [C-1-2] सिर्फ़ एक मैनेज की गई प्रोफ़ाइल बनाने की अनुमति होनी चाहिए.
- [C-1-3] मैनेज किए गए ऐप्लिकेशन, विजेट, और बैज वाले अन्य यूज़र इंटरफ़ेस एलिमेंट (जैसे, हाल ही के ऐप्लिकेशन और सूचनाएं) को दिखाने के लिए, आइकॉन बैज का इस्तेमाल करना ज़रूरी है. यह बैज, AOSP अपस्ट्रीम वर्क बैज जैसा होना चाहिए.
- [C-1-4] मैनेज की जा रही प्रोफ़ाइल के ऐप्लिकेशन में उपयोगकर्ता के होने पर, सूचना आइकॉन (AOSP अपस्ट्रीम वर्क बैज की तरह) दिखाना ज़रूरी है.
- [C-1-5] डिवाइस के चालू होने (ACTION_USER_PRESENT) पर, यह सूचना दिखनी चाहिए कि उपयोगकर्ता मैनेज की जा रही प्रोफ़ाइल में है. ऐसा तब होना चाहिए, जब फ़ोरग्राउंड ऐप्लिकेशन, मैनेज की जा रही प्रोफ़ाइल में हो.
- [C-1-6] अगर मैनेज की जा रही कोई प्रोफ़ाइल मौजूद है, तो डिवाइस नीति कंट्रोलर की ओर से चालू किए जाने पर, इंटेंट 'चूज़र' में विज़ुअल अफ़ॉर्डेंस दिखाना ज़रूरी है. इससे उपयोगकर्ता, मैनेज की जा रही प्रोफ़ाइल से मुख्य उपयोगकर्ता को या मुख्य उपयोगकर्ता से मैनेज की जा रही प्रोफ़ाइल को इंटेंट फ़ॉरवर्ड कर सकेगा.
- [C-1-7] अगर कोई मैनेज की गई प्रोफ़ाइल मौजूद है, तो प्राइमरी उपयोगकर्ता और मैनेज की गई प्रोफ़ाइल, दोनों के लिए उपयोगकर्ता को ये सुविधाएं उपलब्ध कराना ज़रूरी है:
- प्राइमरी उपयोगकर्ता और मैनेज की जा रही प्रोफ़ाइल के लिए, बैटरी, जगह की जानकारी, मोबाइल डेटा, और स्टोरेज के इस्तेमाल का अलग-अलग हिसाब रखा जाता है.
- मुख्य उपयोगकर्ता या मैनेज की जा रही प्रोफ़ाइल में इंस्टॉल किए गए वीपीएन ऐप्लिकेशन को अलग से मैनेज किया जा सकता है.
- मुख्य उपयोगकर्ता या मैनेज की जा रही प्रोफ़ाइल में इंस्टॉल किए गए ऐप्लिकेशन को अलग से मैनेज करने की सुविधा.
- प्राइमरी उपयोगकर्ता या मैनेज की जा रही प्रोफ़ाइल में मौजूद खातों को अलग-अलग मैनेज किया जा सकता है.
- [C-1-8] यह पक्का करना होगा कि पहले से इंस्टॉल किए गए डायलर, संपर्क, और मैसेजिंग ऐप्लिकेशन, मैनेज की जा रही प्रोफ़ाइल (अगर मौजूद है) के साथ-साथ प्राइमरी प्रोफ़ाइल से भी कॉल करने वाले की जानकारी खोज सकें और देख सकें. हालांकि, ऐसा सिर्फ़ तब किया जा सकेगा, जब डिवाइस नीति कंट्रोलर इसकी अनुमति दे.
- [C-1-9] यह पक्का करना ज़रूरी है कि यह उन सभी सुरक्षा शर्तों को पूरा करता हो जो एक से ज़्यादा उपयोगकर्ताओं के लिए चालू किए गए डिवाइस पर लागू होती हैं (सेक्शन 9.5 देखें). भले ही, मैनेज की गई प्रोफ़ाइल को प्राइमरी यूज़र के अलावा किसी अन्य उपयोगकर्ता के तौर पर न गिना जाए.
- [C-1-10] मैनेज की गई प्रोफ़ाइल में चल रहे ऐप्लिकेशन को ऐक्सेस करने की अनुमति देने के लिए, डिवाइस में ऐसी लॉक स्क्रीन होनी चाहिए जो यहां दी गई ज़रूरी शर्तों को पूरा करती हो.
- डिवाइसों पर,
DevicePolicyManager.ACTION_SET_NEW_PASSWORDके इंटेंट का पालन करना ज़रूरी है. साथ ही, मैनेज की जा रही प्रोफ़ाइल के लिए, लॉक स्क्रीन के क्रेडेंशियल को कॉन्फ़िगर करने के लिए एक इंटरफ़ेस दिखाना ज़रूरी है. - मैनेज की जा रही प्रोफ़ाइल के लॉक स्क्रीन क्रेडेंशियल में, क्रेडेंशियल स्टोरेज और मैनेज करने के लिए वही तरीके इस्तेमाल किए जाने चाहिए जो पैरंट प्रोफ़ाइल में इस्तेमाल किए जाते हैं. इसके बारे में Android ओपन सोर्स प्रोजेक्ट की साइट पर बताया गया है
- डीपीसी की पासवर्ड नीतियां सिर्फ़ मैनेज की जा रही प्रोफ़ाइल की लॉक स्क्रीन के क्रेडेंशियल पर लागू होनी चाहिए. हालांकि, getParentProfileInstance से मिले
DevicePolicyManagerइंस्टेंस पर इन्हें लागू किया जा सकता है.
- डिवाइसों पर,
- जब मैनेज की जा रही प्रोफ़ाइल के संपर्कों को पहले से इंस्टॉल किए गए कॉल लॉग, कॉल के दौरान दिखने वाले यूज़र इंटरफ़ेस (यूआई), कॉल जारी होने और मिस्ड कॉल की सूचनाओं, संपर्कों, और मैसेजिंग ऐप्लिकेशन में दिखाया जाता है, तो उन्हें उसी बैज के साथ बैज किया जाना चाहिए जिसका इस्तेमाल मैनेज की जा रही प्रोफ़ाइल के ऐप्लिकेशन को दिखाने के लिए किया जाता है.
3.10. सुलभता
Android में सुलभता की एक लेयर होती है. इससे दिव्यांग लोगों को अपने डिवाइसों को आसानी से इस्तेमाल करने में मदद मिलती है. इसके अलावा, Android ऐसे प्लैटफ़ॉर्म एपीआई उपलब्ध कराता है जिनकी मदद से, ऐक्सेसिबिलिटी सेवाएं लागू की जा सकती हैं. इससे, उपयोगकर्ता और सिस्टम इवेंट के लिए कॉलबैक मिल सकते हैं. साथ ही, फ़ीडबैक के अन्य तरीके जनरेट किए जा सकते हैं. जैसे, टेक्स्ट को आवाज़ में बदलना, हैप्टिक फ़ीडबैक, और ट्रैकबॉल/डी-पैड नेविगेशन.
अगर डिवाइस में तीसरे पक्ष की ऐक्सेसिबिलिटी सेवाओं का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] सुलभता एपीआई के एसडीके के दस्तावेज़ में बताए गए तरीके के मुताबिक, Android accessibility framework को लागू करना ज़रूरी है.
- [C-1-2] SDK में दिए गए दस्तावेज़ के मुताबिक, सुलभता इवेंट जनरेट करने होंगे. साथ ही, रजिस्टर किए गए सभी
AccessibilityServiceको सहीAccessibilityEventडिलीवर करना होगा. - [C-1-3]
android.settings.ACCESSIBILITY_SETTINGSके तहत, डिवाइस बनाने वाली कंपनी को यह पक्का करना होगा कि उपयोगकर्ता के पास, पहले से लोड की गई ऐक्सेसिबिलिटी सेवाओं के साथ-साथ तीसरे पक्ष की ऐक्सेसिबिलिटी सेवाओं को चालू और बंद करने का विकल्प हो. - [C-1-4] सिस्टम के नेविगेशन बार में एक बटन जोड़ना ज़रूरी है. इससे उपयोगकर्ता, सुलभता सेवा को कंट्रोल कर पाएगा. ऐसा तब होगा, जब चालू की गई सुलभता सेवाएं
AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTONका एलान करती हैं. ध्यान दें कि जिन डिवाइसों में सिस्टम नेविगेशन बार नहीं होता उन पर यह ज़रूरी शर्त लागू नहीं होती. हालांकि, डिवाइसों में सुलभता सेवाओं को कंट्रोल करने के लिए, उपयोगकर्ता को सुविधा मिलनी चाहिए.
अगर डिवाइसों में पहले से लोड की गई सुलभता सेवाएं शामिल हैं, तो:
- [C-2-1] जब डेटा स्टोरेज को फ़ाइल आधारित एन्क्रिप्शन (एफ़बीई) से एन्क्रिप्ट किया जाता है, तब इन प्रीलोड की गई ऐक्सेसिबिलिटी सेवाओं को डायरेक्ट बूट अवेयर ऐप्लिकेशन के तौर पर लागू करना ज़रूरी है.
- उपयोगकर्ताओं को सुलभता सेवाएं चालू करने के लिए, डिवाइस को पहली बार चालू करने के दौरान सेटअप करने की प्रोसेस में एक तरीका उपलब्ध कराना चाहिए. साथ ही, फ़ॉन्ट का साइज़, डिसप्ले का साइज़, और ज़ूम करने के लिए इस्तेमाल किए जाने वाले जेस्चर को अडजस्ट करने के विकल्प भी उपलब्ध कराने चाहिए.
3.11. लिखे गए शब्दों को सुनने की सुविधा
Android में ऐसे एपीआई शामिल हैं जिनकी मदद से ऐप्लिकेशन, लिखाई को बोली में बदलने की सुविधा (टीटीएस) का इस्तेमाल कर सकते हैं. साथ ही, सेवा देने वाली कंपनियां टीटीएस सेवाओं को लागू कर सकती हैं.
अगर डिवाइस में android.hardware.audio.output सुविधा काम करती है, तो:
- [C-1-1] ज़रूरी है कि इसमें Android TTS फ़्रेमवर्क के एपीआई काम करते हों.
अगर डिवाइस में तीसरे पक्ष के टीटीएस इंजन इंस्टॉल किए जा सकते हैं, तो:
- [C-2-1] उपयोगकर्ता को सिस्टम लेवल पर टीटीएस इंजन चुनने की सुविधा मिलनी चाहिए.
3.12. टीवी इनपुट फ़्रेमवर्क
Android Television Input Framework (TIF) की मदद से, Android Television डिवाइसों पर लाइव कॉन्टेंट आसानी से डिलीवर किया जा सकता है. टीआईएफ़, Android TV डिवाइसों को कंट्रोल करने वाले इनपुट मॉड्यूल बनाने के लिए, एक स्टैंडर्ड एपीआई उपलब्ध कराता है.
अगर डिवाइस में TIF फ़ाइलें इस्तेमाल की जा सकती हैं, तो:
- [C-1-1] प्लैटफ़ॉर्म की सुविधा
android.software.live_tvके बारे में एलान करना ज़रूरी है. - [C-1-2] डिवाइस में टीवी ऐप्लिकेशन (टीवी ऐप्लिकेशन) पहले से लोड होना चाहिए. साथ ही, सेक्शन 3.12.1 में बताई गई सभी ज़रूरी शर्तें पूरी होनी चाहिए.
3.12.1. टीवी ऐप्लिकेशन
अगर डिवाइस में TIF फ़ाइलें इस्तेमाल की जा सकती हैं, तो:
- [C-1-1] टीवी ऐप्लिकेशन में, टीवी चैनल इंस्टॉल करने और इस्तेमाल करने की सुविधाएं होनी चाहिए. साथ ही, उसे इन ज़रूरी शर्तों को पूरा करना होगा.
Android डिवाइसों पर android.software.live_tv फ़ीचर फ़्लैग का इस्तेमाल करने के लिए, टीवी ऐप्लिकेशन को ये ज़रूरी शर्तें पूरी करनी होंगी:
- डिवाइसों पर, तीसरे पक्ष के टीआईएफ़ पर आधारित इनपुट (तीसरे पक्ष के इनपुट) इंस्टॉल और मैनेज करने की अनुमति होनी चाहिए.
- डिवाइस बनाने वाली कंपनियां, पहले से इंस्टॉल किए गए TIF पर आधारित इनपुट (इंस्टॉल किए गए इनपुट) और तीसरे पक्ष के इनपुट के बीच विज़ुअल सेपरेशन दे सकती हैं.
- डिवाइसों पर, तीसरे पक्ष के इनपुट को टीवी ऐप्लिकेशन से एक से ज़्यादा नेविगेशन ऐक्शन दूर नहीं दिखाया जाना चाहिए. जैसे, टीवी ऐप्लिकेशन से तीसरे पक्ष के इनपुट की सूची को बड़ा करना.
Android ओपन सोर्स प्रोजेक्ट, टीवी ऐप्लिकेशन को लागू करने का तरीका बताता है. इससे ऊपर दी गई ज़रूरी शर्तें पूरी की जा सकती हैं.
3.12.1.1. इलेक्ट्रॉनिक प्रोग्राम गाइड
अगर डिवाइस में TIF फ़ाइलें इस्तेमाल की जा सकती हैं, तो:
- [C-1-1] जानकारी देने वाला और इंटरैक्टिव ओवरले दिखाना ज़रूरी है. इसमें TvContract.Programs फ़ील्ड में मौजूद वैल्यू से जनरेट की गई इलेक्ट्रॉनिक प्रोग्राम गाइड (ईपीजी) शामिल होनी चाहिए.
- [C-1-2] चैनल बदलने पर, डिवाइसों को फ़िलहाल चल रहे प्रोग्राम के लिए ईपीजी डेटा दिखाना ज़रूरी है.
- [SR] ईपीजी में, इंस्टॉल किए गए इनपुट और तीसरे पक्ष के इनपुट को एक जैसा दिखाने का सुझाव दिया जाता है. ईपीजी को तीसरे पक्ष के इनपुट, ईपीजी पर इंस्टॉल किए गए इनपुट से एक से ज़्यादा नेविगेशन ऐक्शन दूर नहीं दिखाने चाहिए.
- ईपीजी में, इंस्टॉल किए गए सभी इनपुट और तीसरे पक्ष के इनपुट की जानकारी दिखनी चाहिए.
- ईपीजी, इंस्टॉल किए गए इनपुट और तीसरे पक्ष के इनपुट के बीच अंतर दिखा सकता है.
3.12.1.2. नेविगेशन
अगर डिवाइस में TIF फ़ाइलें इस्तेमाल की जा सकती हैं, तो:
-
[C-1-1] Android TV डिवाइस के इनपुट डिवाइसों (जैसे कि रिमोट कंट्रोल, रिमोट कंट्रोल ऐप्लिकेशन या गेम कंट्रोलर) पर मौजूद डी-पैड, बैक, और होम बटन का इस्तेमाल करके, इन फ़ंक्शन को नेविगेट किया जा सकता हो:
- टीवी चैनल बदलना
- ईपीजी खोला जा रहा है
- तीसरे पक्ष के टीआईएफ़ पर आधारित इनपुट को कॉन्फ़िगर और ट्यून करना
- सेटिंग मेन्यू खोलना
-
इसे CEC के ज़रिए, HDMI इनपुट को मुख्य इवेंट पास करने चाहिए.
3.12.1.3. टीवी इनपुट ऐप्लिकेशन लिंकिंग
अगर डिवाइस में TIF फ़ाइलें इस्तेमाल की जा सकती हैं, तो:
- [C-1-1] Android Television डिवाइसों पर, टीवी इनपुट ऐप्लिकेशन लिंक करने की सुविधा काम करनी चाहिए.इससे सभी इनपुट, मौजूदा गतिविधि से दूसरी गतिविधि के लिंक उपलब्ध करा सकते हैं. जैसे, लाइव प्रोग्रामिंग से मिलते-जुलते कॉन्टेंट का लिंक.
- [C-1-2] अगर टीवी इनपुट ऐप्लिकेशन को लिंक करने की सुविधा उपलब्ध है, तो टीवी ऐप्लिकेशन में इसे दिखाना ज़रूरी है.
3.12.1.4. टाइम-शिफ़्टिंग
अगर डिवाइस में TIF फ़ाइलें इस्तेमाल की जा सकती हैं, तो:
- [SR] टाइम शिफ्टिंग की सुविधा देने का सुझाव दिया जाता है. इससे उपयोगकर्ता, लाइव कॉन्टेंट को रोकने और फिर से शुरू करने की सुविधा का इस्तेमाल कर सकता है.
- अगर किसी प्रोग्राम के लिए टाइम-शिफ़्टिंग की सुविधा उपलब्ध है, तो उपयोगकर्ता को उस प्रोग्राम को रोकने और फिर से शुरू करने का विकल्प मिलना चाहिए.
3.12.1.5. टीवी रिकॉर्डिंग
अगर डिवाइस में TIF फ़ाइलें इस्तेमाल की जा सकती हैं, तो:
- [SR] टीवी रिकॉर्डिंग की सुविधा देने का सुझाव दिया जाता है.
- रिकॉर्ड किए गए प्रोग्राम चलाने के लिए, यूज़र इंटरफ़ेस उपलब्ध कराना चाहिए.
- अगर टीवी इनपुट पर रिकॉर्डिंग की सुविधा काम करती है और किसी प्रोग्राम को रिकॉर्ड करने पर पाबंदी नहीं है, तो ईपीजी में प्रोग्राम रिकॉर्ड करने का विकल्प मिल सकता है.
3.13. क्विक सेटिंग
Android में क्विक सेटिंग का यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट होता है. इससे, अक्सर इस्तेमाल की जाने वाली या तुरंत ज़रूरी कार्रवाइयों को तुरंत ऐक्सेस किया जा सकता है.
अगर डिवाइस में क्विक सेटिंग यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट शामिल है, तो:
- [C-1-1] तीसरे पक्ष के ऐप्लिकेशन को,
quicksettingsएपीआई के ज़रिए उपलब्ध कराई गई टाइलें जोड़ने या हटाने की अनुमति देनी होगी. - [C-1-2] तीसरे पक्ष के ऐप्लिकेशन से, सीधे तौर पर क्विक सेटिंग में अपने-आप कोई टाइल नहीं जुड़नी चाहिए.
- [C-1-3] सिस्टम की ओर से उपलब्ध कराई गई क्विक सेटिंग टाइल के साथ-साथ, तीसरे पक्ष के ऐप्लिकेशन से जोड़ी गई सभी टाइलें दिखनी चाहिए.
3.14. मीडिया यूज़र इंटरफ़ेस (यूआई)
अगर डिवाइस में ऐसे यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क शामिल हैं जो MediaBrowser और MediaSession पर निर्भर रहने वाले तीसरे पक्ष के ऐप्लिकेशन के साथ काम करते हैं , तो:
- [C-1-1] MediaItem आइकॉन और सूचना के आइकॉन में कोई बदलाव नहीं होना चाहिए.
- [C-1-2] MediaSession में बताए गए आइटम दिखाने चाहिए. जैसे, मेटाडेटा, आइकॉन, इमेज.
- [C-1-3] ऐप्लिकेशन का टाइटल दिखना ज़रूरी है.
- [C-1-4] में MediaBrowser हैरारकी दिखाने के लिए, ड्रॉअर होना ज़रूरी है.
3.15. Instant Apps
डिवाइसों पर लागू किए गए सिस्टम को इन ज़रूरी शर्तों को पूरा करना होगा:
- [C-0-1] इंस्टेंट ऐप्लिकेशन को सिर्फ़ वे अनुमतियां दी जानी चाहिए जिनके लिए
android:protectionLevelको"ephemeral"पर सेट किया गया है. - [C-0-2] झटपट ऐप्लिकेशन, इंस्टॉल किए गए ऐप्लिकेशन के साथ इंप्लिसिट इंटेंट के ज़रिए इंटरैक्ट नहीं कर सकते. हालांकि, ऐसा तब किया जा सकता है, जब इनमें से कोई एक शर्त पूरी होती हो:
- कॉम्पोनेंट का इंटेंट पैटर्न फ़िल्टर चालू है और उसमें CATEGORY_BROWSABLE मौजूद है
- ऐक्शन, ACTION_SEND, ACTION_SENDTO या ACTION_SEND_MULTIPLE में से कोई एक हो
- टारगेट को android:visibleToInstantApps के साथ साफ़ तौर पर दिखाया गया हो
- [C-0-3] इंस्टैंट ऐप्लिकेशन को इंस्टॉल किए गए ऐप्लिकेशन के साथ साफ़ तौर पर इंटरैक्ट नहीं करना चाहिए. हालांकि, अगर कॉम्पोनेंट को android:visibleToInstantApps के ज़रिए दिखाया जाता है, तो ऐसा किया जा सकता है.
- [C-0-4] इंस्टॉल किए गए ऐप्लिकेशन को डिवाइस पर मौजूद इंस्टैंट ऐप्लिकेशन के बारे में जानकारी नहीं दिखनी चाहिए. ऐसा तब तक नहीं होना चाहिए, जब तक इंस्टैंट ऐप्लिकेशन, इंस्टॉल किए गए ऐप्लिकेशन से साफ़ तौर पर कनेक्ट न हो.
3.16. कंपैनियन डिवाइस को जोड़ना
Android में, कंपैनियन डिवाइस को पेयर करने की सुविधा शामिल है. इससे कंपैनियन डिवाइसों के साथ एसोसिएशन को ज़्यादा असरदार तरीके से मैनेज किया जा सकता है. साथ ही, यह सुविधा ऐक्सेस करने के लिए, ऐप्लिकेशन को CompanionDeviceManager एपीआई उपलब्ध कराता है.
अगर डिवाइसों में कंपैनियन डिवाइस को डिवाइस से जोड़ने की सुविधा काम करती है, तो:
- [C-1-1]
FEATURE_COMPANION_DEVICE_SETUPफ़ीचर फ़्लैग के बारे में एलान करना ज़रूरी है . - [C-1-2] यह पक्का करना ज़रूरी है कि
android.companionपैकेज में मौजूद एपीआई पूरी तरह से लागू किए गए हों. - [C-1-3] यह ज़रूरी है कि उपयोगकर्ता को यह चुनने/पुष्टि करने की सुविधा मिले कि कंपैनियन डिवाइस मौजूद है और काम कर रहा है.
4. ऐप्लिकेशन पैकेजिंग की सुविधा के साथ काम करने की क्षमता
डिवाइसों में सेट किए गए सिस्टम के लिए:
- [C-0-1] इसमें Android के आधिकारिक एसडीके में शामिल “aapt” टूल से जनरेट की गई Android “.apk” फ़ाइलों को इंस्टॉल और चलाने की सुविधा होनी चाहिए.
- ऊपर दी गई ज़रूरी शर्त को पूरा करना मुश्किल हो सकता है. इसलिए, डिवाइसों को AOSP के रेफ़रंस पैकेज मैनेजमेंट सिस्टम का इस्तेमाल करने का सुझाव दिया जाता है.
- [C-0-2] APK सिग्नेचर स्कीम v2 और JAR साइनिंग का इस्तेमाल करके, “.apk” फ़ाइलों की पुष्टि करने की सुविधा होनी चाहिए.
- [C-0-3] .apk, Android मेनिफ़ेस्ट, Dalvik बाइटकोड या RenderScript बाइटकोड फ़ॉर्मैट को इस तरह से नहीं बढ़ाया जाना चाहिए कि वे फ़ाइलें, ज़रूरी शर्तें पूरी करने वाले अन्य डिवाइसों पर सही तरीके से इंस्टॉल और रन न हो पाएं.
-
[C-0-4] पैकेज के लिए, "रिकॉर्ड का इंस्टॉलर" के तौर पर सेट किए गए ऐप्लिकेशन के अलावा, किसी दूसरे ऐप्लिकेशन को बिना किसी प्रॉम्प्ट के ऐप्लिकेशन को साइलेंट तरीके से अनइंस्टॉल करने की अनुमति नहीं देनी चाहिए. इस बारे में,
DELETE_PACKAGEअनुमति के लिए एसडीके में बताया गया है. सिर्फ़ दो मामलों में इस अनुमति की ज़रूरत नहीं होती. पहला, सिस्टम पैकेज वेरिफ़ायर ऐप्लिकेशन, PACKAGE_NEEDS_VERIFICATION इंटेंट को हैंडल करता है. दूसरा, स्टोरेज मैनेजर ऐप्लिकेशन, ACTION_MANAGE_STORAGE इंटेंट को हैंडल करता है. -
[C-0-5] में ऐसी गतिविधि होनी चाहिए जो
android.settings.MANAGE_UNKNOWN_APP_SOURCESइंटेंट को हैंडल करती हो. -
[C-0-6] उसे अज्ञात सोर्स से ऐप्लिकेशन पैकेज इंस्टॉल नहीं करने चाहिए. हालांकि, अगर ऐप्लिकेशन इंस्टॉल करने का अनुरोध करने वाला ऐप्लिकेशन, यहां दी गई सभी ज़रूरी शर्तों को पूरा करता है, तो उसे ऐसा करने की अनुमति है:
- इसके लिए,
REQUEST_INSTALL_PACKAGESअनुमति का एलान करना ज़रूरी है. इसके अलावा,android:targetSdkVersionको 24 या इससे कम पर सेट करना भी ज़रूरी है. - उपयोगकर्ता ने उसे नामालूम सोर्स से ऐप्लिकेशन इंस्टॉल करने की अनुमति दी हो.
- इसके लिए,
-
डिवाइस को, उपयोगकर्ता को हर ऐप्लिकेशन के लिए, अज्ञात सोर्स से ऐप्लिकेशन इंस्टॉल करने की अनुमति देने/रद्द करने की सुविधा देनी चाहिए. हालांकि, अगर डिवाइस को उपयोगकर्ताओं को यह विकल्प नहीं देना है, तो वह इसे नो-ऑप के तौर पर लागू कर सकता है और
startActivityForResult()के लिएRESULT_CANCELEDदिखा सकता है. हालांकि, ऐसे मामलों में भी उन्हें उपयोगकर्ता को यह बताना चाहिए कि ऐसा विकल्प क्यों नहीं दिया गया है.
5. मल्टीमीडिया फ़ाइलों के साथ काम करने की सुविधा
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] यह ज़रूरी है कि
MediaCodecListके ज़रिए बताए गए हर कोडेक के लिए, सेक्शन 5.1 में बताए गए मीडिया फ़ॉर्मैट, एन्कोडर, डिकोडर, फ़ाइल टाइप, और कंटेनर फ़ॉर्मैट काम करते हों. - [C-0-2] तीसरे पक्ष के ऐप्लिकेशन के लिए
MediaCodecListके ज़रिए उपलब्ध कराए गए एनकोडर और डिकोडर के बारे में बताना और उनकी जानकारी देना ज़रूरी है. - [C-0-3] इसे उन सभी फ़ॉर्मैट को डिकोड करना होगा जिन्हें यह एन्कोड कर सकता है. साथ ही, उन्हें तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराना होगा. इसमें, इसके एनकोडर से जनरेट होने वाले सभी बिटस्ट्रीम और इसके
CamcorderProfileमें रिपोर्ट की गई प्रोफ़ाइलें शामिल हैं.
डिवाइस में सेट किए गए सिस्टम के लिए:
- SHOULD aim for minimum codec latency, in others words, they
- इनपुट बफ़र का इस्तेमाल नहीं करना चाहिए और उन्हें सेव नहीं करना चाहिए. साथ ही, प्रोसेस होने के बाद सिर्फ़ एक बार इनपुट बफ़र वापस करना चाहिए.
- डिकोड किए गए बफ़र को स्टैंडर्ड (जैसे, एसपीएस) में तय की गई अवधि से ज़्यादा समय तक सेव नहीं करना चाहिए.
- GOP स्ट्रक्चर के लिए ज़रूरी समय से ज़्यादा समय तक, एन्कोड किए गए बफ़र को सेव नहीं करना चाहिए.
नीचे दिए गए सेक्शन में मौजूद सभी कोडेक, Android Open Source Project के Android वर्शन में सॉफ़्टवेयर के तौर पर लागू किए जाते हैं.
कृपया ध्यान दें कि न तो Google और न ही Open Handset Alliance, यह दावा करता है कि इन कोडेक पर तीसरे पक्ष के पेटेंट का कोई अधिकार नहीं है. हार्डवेयर या सॉफ़्टवेयर प्रॉडक्ट में इस सोर्स कोड का इस्तेमाल करने वाले लोगों को सलाह दी जाती है कि इस कोड को लागू करने के लिए, पेटेंट के मालिकों से पेटेंट लाइसेंस लेना पड़ सकता है. इसमें ओपन सोर्स सॉफ़्टवेयर या शेयरवेयर में इस कोड को लागू करना भी शामिल है.
5.1. मीडिया कोडेक
5.1.1. ऑडियो एन्कोडिंग
ज़्यादा जानकारी के लिए, 5.1.3. ऑडियो कोडेक की जानकारी पर जाएं.
अगर डिवाइस में android.hardware.microphone का इस्तेमाल किया जाता है, तो उसमें ऑडियो एन्कोडिंग की यह सुविधा काम करनी चाहिए:
- [C-1-1] पीसीएम/वेव
5.1.2. ऑडियो डिकोडिंग
ज़्यादा जानकारी के लिए, 5.1.3. ऑडियो कोडेक की जानकारी पर जाएं.
अगर डिवाइस में android.hardware.audio.output सुविधा के साथ काम करने की सुविधा उपलब्ध है, तो उसमें ये ऑडियो डिकोडर होने चाहिए:
- [C-1-1] MPEG-4 AAC प्रोफ़ाइल (AAC LC)
- [C-1-2] MPEG-4 HE AAC प्रोफ़ाइल (AAC+)
- [C-1-3] MPEG-4 HE AACv2 प्रोफ़ाइल (बेहतर AAC+)
- [C-1-4] AAC ELD (बेहतर लो डिले एएसी)
- [C-1-5] FLAC
- [C-1-6] MP3
- [C-1-7] एमआईडीआई
- [C-1-8] Vorbis
- [C-1-9] पीसीएम/वेव
- [C-1-10] Opus
अगर डिवाइस पर लागू किए गए सॉफ़्टवेयर, android.media.MediaCodec एपीआई में मौजूद डिफ़ॉल्ट एएसी ऑडियो डिकोडर की मदद से, मल्टीचैनल स्ट्रीम (यानी कि दो से ज़्यादा चैनल) के एएसी इनपुट बफ़र को पीसीएम में डिकोड करने की सुविधा देते हैं, तो इन सुविधाओं का काम करना ज़रूरी है:
- [C-2-1] डिकोडिंग, डाउनमिक्सिंग के बिना की जानी चाहिए. उदाहरण के लिए, 5.0 AAC स्ट्रीम को पांच चैनलों के पीसीएम में डिकोड किया जाना चाहिए और 5.1 AAC स्ट्रीम को छह चैनलों के पीसीएम में डिकोड किया जाना चाहिए.
- [C-2-2] डाइनैमिक रेंज का मेटाडेटा, ISO/IEC 14496-3 में "डाइनैमिक रेंज कंट्रोल (डीआरसी)" में बताए गए तरीके के मुताबिक होना चाहिए. साथ ही,
android.media.MediaFormatडीआरसी कुंजियां, ऑडियो डिकोडर के डाइनैमिक रेंज से जुड़े व्यवहारों को कॉन्फ़िगर करने के लिए होनी चाहिए. AAC DRC कुंजियों को API 21 में पेश किया गया था. ये कुंजियां हैं: KEY_AAC_DRC_ATTENUATION_FACTOR,KEY_AAC_DRC_BOOST_FACTOR, KEY_AAC_DRC_HEAVY_COMPRESSION, KEY_AAC_DRC_TARGET_REFERENCE_LEVEL, और KEY_AAC_ENCODED_TARGET_LEVEL
5.1.3. ऑडियो कोडेक की जानकारी
| फ़ॉर्मैट/कोडेक | जानकारी | इस्तेमाल किए जा सकने वाले फ़ाइल टाइप/कंटेनर फ़ॉर्मैट |
|---|---|---|
|
MPEG-4 AAC प्रोफ़ाइल (AAC LC) |
मोनो/स्टीरियो/5.0/5.1 कॉन्टेंट के लिए, 8 से 48 किलोहर्ट्ज़ तक के स्टैंडर्ड सैंपलिंग रेट का इस्तेमाल किया जा सकता है. |
|
| MPEG-4 HE AAC प्रोफ़ाइल (AAC+) | मोनो/स्टीरियो/5.0/5.1 कॉन्टेंट के साथ काम करता है. इसके लिए, सैंपलिंग रेट 16 से 48 किलोहर्ट्ज़ तक होना चाहिए. | |
|
MPEG-4 HE AACv2 प्रोफ़ाइल (बेहतर AAC+) |
मोनो/स्टीरियो/5.0/5.1 कॉन्टेंट के साथ काम करता है. इसके लिए, सैंपलिंग रेट 16 से 48 किलोहर्ट्ज़ तक होना चाहिए. | |
| AAC ELD (बेहतर लो डिले एएसी) | मोनो/स्टीरियो कॉन्टेंट के लिए, 16 से 48 किलोहर्ट्ज़ तक के स्टैंडर्ड सैंपलिंग रेट का इस्तेमाल किया जा सकता है. | |
| AMR-NB | 4.75 से 12.2 केबीपीएस, 8 किलोहर्ट्ज़ पर सैंपल किया गया | 3GPP (.3gp) |
| AMR-WB | 6.60 किलोबिट/सेकंड से 23.85 किलोबिट/सेकंड तक के नौ रेट, जिन्हें 16 किलोहर्ट्ज़ पर सैंपल किया गया है | |
| FLAC | मोनो/स्टीरियो (मल्टीचैनल नहीं). सैंपल रेट 48 किलोहर्ट्ज़ तक (हालांकि, 44.1 किलोहर्ट्ज़ आउटपुट वाले डिवाइसों पर 44.1 किलोहर्ट्ज़ का इस्तेमाल करने का सुझाव दिया जाता है, क्योंकि 48 से 44.1 किलोहर्ट्ज़ डाउनसैंपलर में लो-पास फ़िल्टर शामिल नहीं होता). 16-बिट का इस्तेमाल करने का सुझाव दिया जाता है. 24-बिट के लिए, डिथरिंग लागू नहीं की गई है. | सिर्फ़ FLAC (.flac) |
| MP3 | मोनो/स्टीरियो 8-320 केबीपीएस कॉन्स्टेंट (सीबीआर) या वैरिएबल बिटरेट (वीबीआर) | MP3 (.mp3) |
| MIDI | MIDI टाइप 0 और 1. DLS के वर्शन 1 और 2. XMF और Mobile XMF. रिंगटोन के फ़ॉर्मैट RTTTL/RTX, OTA, और iMelody के साथ काम करता है |
|
| Vorbis |
|
|
| PCM/WAVE | 16-बिट लीनियर पीसीएम (हार्डवेयर की सीमा तक की दरें). डिवाइसों पर, रॉ पीसीएम रिकॉर्डिंग के लिए सैंपलिंग रेट काम करने चाहिए. ये रेट 8000, 11025, 16000, और 44100 हर्ट्ज़ फ़्रीक्वेंसी पर काम करने चाहिए. | WAVE (.wav) |
| Opus | Matroska (.mkv), Ogg(.ogg) |
5.1.4. इमेज एन्कोडिंग
ज़्यादा जानकारी के लिए, 5.1.6 देखें. इमेज कोडेक की जानकारी.
डिवाइस में सेट किए गए सिस्टम में, इमेज को इस तरह से एन्कोड करने की सुविधा होनी चाहिए:
- [C-0-1] JPEG
- [C-0-2] PNG
- [C-0-3] WebP
5.1.5. इमेज डिकोडिंग
ज़्यादा जानकारी के लिए, 5.1.6 देखें. इमेज कोडेक की जानकारी.
डिवाइस में सेट किए गए सिस्टम में, इमेज डिकोडिंग की सुविधा के लिए यहां दी गई एन्कोडिंग का इस्तेमाल किया जाना चाहिए:
- [C-0-1] JPEG
- [C-0-2] GIF
- [C-0-3] PNG
- [C-0-4] बीएमपी
- [C-0-5] WebP
- [C-0-6] रॉ डेटा
5.1.6. इमेज कोडेक की जानकारी
| फ़ॉर्मैट/कोडेक | जानकारी | इस्तेमाल किए जा सकने वाले फ़ाइल टाइप/कंटेनर फ़ॉर्मैट |
|---|---|---|
| JPEG | बेस+प्रोग्रेसिव | JPEG (.jpg) |
| GIF | GIF (.gif) | |
| PNG | PNG (.png) | |
| BMP | BMP (.bmp) | |
| WebP | WebP (.webp) | |
| Raw | ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw) |
5.1.7. वीडियो कोडेक
- वेब वीडियो स्ट्रीमिंग और वीडियो कॉन्फ़्रेंसिंग सेवाओं के लिए, डिवाइसों को VP8 कोडेक का इस्तेमाल करना चाहिए. साथ ही, यह कोडेक ज़रूरी शर्तें पूरी करता हो.
अगर डिवाइस में वीडियो डीकोडर या एन्कोडर शामिल हैं, तो:
-
[C-1-1] वीडियो कोडेक को आउटपुट और इनपुट बाइटबफ़र के ऐसे साइज़ के साथ काम करना चाहिए जो स्टैंडर्ड और कॉन्फ़िगरेशन के हिसाब से, कंप्रेस किए गए और कंप्रेस न किए गए सबसे बड़े फ़्रेम के लिए ज़रूरी हों. हालांकि, उन्हें ज़रूरत से ज़्यादा जगह नहीं लेनी चाहिए.
-
[C-1-2] वीडियो एन्कोडर और डिकोडर में, YUV420 फ़्लेक्सिबल कलर फ़ॉर्मैट (COLOR_FormatYUV420Flexible) काम करना चाहिए.
अगर डिवाइस में सेट किए गए सिस्टम, Display.HdrCapabilities के ज़रिए एचडीआर प्रोफ़ाइल के साथ काम करने की जानकारी देते हैं, तो:
- [C-2-1] एचडीआर स्टैटिक मेटाडेटा को पार्स करने और मैनेज करने की सुविधा होनी चाहिए.
अगर डिवाइस में लागू किए गए सिस्टम, MediaCodecInfo.CodecCapabilities क्लास में FEATURE_IntraRefresh के ज़रिए इंट्रा रीफ़्रेश की सुविधा का विज्ञापन करते हैं, तो:
- [C-3-1]इसमें 10 से 60 फ़्रेम की रेंज में रीफ़्रेश पीरियड की सुविधा होनी चाहिए. साथ ही, यह कॉन्फ़िगर किए गए रीफ़्रेश पीरियड के 20% के अंदर सही तरीके से काम करना चाहिए.
5.1.8. वीडियो कोडेक की सूची
| फ़ॉर्मैट/कोडेक | जानकारी |
इस्तेमाल किए जा सकने वाले फ़ाइल टाइप/ कंटेनर फ़ॉर्मैट |
|---|---|---|
| H.263 |
|
|
| H.264 एवीसी | ज़्यादा जानकारी के लिए, सेक्शन 5.2 और 5.3 देखें |
|
| H.265 HEVC | ज़्यादा जानकारी के लिए, सेक्शन 5.3 देखें | MPEG-4 (.mp4) |
| MPEG-2 | मुख्य प्रोफ़ाइल | MPEG2-TS |
| MPEG-4 SP | 3GPP (.3gp) | |
| VP8 | ज़्यादा जानकारी के लिए, सेक्शन 5.2 और 5.3 देखें |
|
| VP9 | ज़्यादा जानकारी के लिए, सेक्शन 5.3 देखें |
|
5.2. वीडियो एन्कोडिंग
अगर डिवाइस में वीडियो एन्कोडर की सुविधा काम करती है और इसे तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराया जाता है, तो:
- स्लाइडिंग विंडो के हिसाब से, इंट्राफ़्रेम (आई-फ़्रेम) इंटरवल के बीच बिटरेट में ~15% से ज़्यादा का अंतर नहीं होना चाहिए.
- बिटरेट, एक सेकंड की स्लाइडिंग विंडो में ~100% से ज़्यादा नहीं होना चाहिए.
अगर डिवाइसों में कम से कम 2.5 इंच की डायगोनल लंबाई वाला एम्बेड किया गया स्क्रीन डिसप्ले शामिल है या उनमें वीडियो आउटपुट पोर्ट शामिल है या android.hardware.camera.any फ़ीचर फ़्लैग के ज़रिए कैमरे के साथ काम करने की सुविधा का एलान किया गया है, तो:
- [C-1-1] इसमें कम से कम एक VP8 या H.264 वीडियो एन्कोडर का सपोर्ट शामिल होना चाहिए. साथ ही, इसे तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराना होगा.
- VP8 और H.264, दोनों वीडियो एन्कोडर के साथ काम करना चाहिए. साथ ही, इसे तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराना चाहिए.
अगर डिवाइस में सेट किए गए सिस्टम, H.264, VP8, VP9 या HEVC वीडियो एन्कोडर में से किसी एक के साथ काम करते हैं और उसे तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराते हैं, तो:
- [C-2-1] यह ज़रूरी है कि बिटरेट को डाइनैमिक तौर पर कॉन्फ़िगर किया जा सके.
- वैरिएबल फ़्रेम रेट के साथ काम करना चाहिए. इसमें वीडियो एन्कोडर को इनपुट बफ़र के टाइमस्टैंप के आधार पर, फ़्रेम की अवधि का तुरंत पता लगाना चाहिए. साथ ही, उस फ़्रेम की अवधि के आधार पर बिट बकेट को असाइन करना चाहिए.
अगर डिवाइस में MPEG-4 SP वीडियो एन्कोडर काम करता है और यह तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध है, तो:
- सपोर्ट किए गए एनकोडर के लिए, डाइनैमिक रूप से कॉन्फ़िगर किए जा सकने वाले बिटरेट के साथ काम करना चाहिए.
5.2.1. H.263
अगर डिवाइस पर H.263 एन्कोडर काम करते हैं और तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध हैं, तो:
- [C-1-1] बेसलाइन प्रोफ़ाइल लेवल 45 के साथ काम करना ज़रूरी है.
- सपोर्ट किए गए एनकोडर के लिए, डाइनैमिक रूप से कॉन्फ़िगर किए जा सकने वाले बिटरेट के साथ काम करना चाहिए.
5.2.2. H-264
अगर डिवाइस में H.264 कोडेक का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] बेसलाइन प्रोफ़ाइल लेवल 3 के साथ काम करना ज़रूरी है. हालांकि, एएसओ (आर्बिट्ररी स्लाइस ऑर्डरिंग), एफ़एमओ (फ़्लेक्सिबल मैक्रोब्लॉक ऑर्डरिंग), और आरएस (रेडंडेंट स्लाइस) के लिए सहायता पाना ज़रूरी नहीं है. इसके अलावा, अन्य Android डिवाइसों के साथ काम करने के लिए, यह सुझाव दिया जाता है कि एन्कोडर, बेसलाइन प्रोफ़ाइल के लिए एएसओ, एफ़एमओ, और आरएस का इस्तेमाल न करें.
- [C-1-2] यहां दी गई टेबल में, एसडी (स्टैंडर्ड डेफ़िनिशन) वीडियो एन्कोडिंग प्रोफ़ाइलों के साथ काम करना ज़रूरी है.
- Main Profile Level 4 के साथ काम करना चाहिए.
- इसमें एचडी (हाई डेफ़िनिशन) वीडियो एन्कोडिंग प्रोफ़ाइलों के साथ काम करने की सुविधा होनी चाहिए. इसके बारे में यहां दी गई टेबल में बताया गया है.
अगर डिवाइसों पर मीडिया एपीआई के ज़रिए, 720 पिक्सल या 1080 पिक्सल रिज़ॉल्यूशन वाले वीडियो के लिए H.264 एन्कोडिंग की सुविधा उपलब्ध है, तो:
- [C-2-1] यहां दी गई टेबल में मौजूद एन्कोडिंग प्रोफ़ाइलों के साथ काम करना ज़रूरी है.
| एसडी (खराब क्वालिटी) | एसडी (अच्छी क्वालिटी) | एचडी 720 पिक्सल | एचडी 1080 पिक्सल | |
|---|---|---|---|---|
| वीडियो का रिज़ॉल्यूशन | 320 x 240 पिक्सल | 720 x 480 पिक्सल | 1280 x 720 पिक्सल | 1920 x 1080 पिक्सल |
| वीडियो फ़्रेम रेट | 20 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस |
| वीडियो बिटरेट | 384 केबीपीएस | 2 एमबीपीएस | 4 एमबीपीएस | 10 एमबीपीएस |
5.2.3. VP8
अगर डिवाइस में VP8 कोडेक का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] एसडी वीडियो एन्कोडिंग प्रोफ़ाइलों के साथ काम करना चाहिए.
- इनमें एचडी (हाई डेफ़िनिशन) वीडियो एन्कोडिंग प्रोफ़ाइलें काम करनी चाहिए.
- Matroska WebM फ़ाइलें लिखने की सुविधा होनी चाहिए.
- वेब वीडियो स्ट्रीमिंग और वीडियो कॉन्फ़्रेंसिंग सेवाओं की क्वालिटी को बेहतर बनाने के लिए, हार्डवेयर VP8 कोडेक का इस्तेमाल करना चाहिए. यह कोडेक, WebM प्रोजेक्ट की आरटीसी हार्डवेयर कोडिंग की ज़रूरी शर्तों को पूरा करता हो.
अगर डिवाइसों पर मीडिया एपीआई के ज़रिए, 720 पिक्सल या 1080 पिक्सल रिज़ॉल्यूशन वाले वीडियो के लिए VP8 एन्कोडिंग की सुविधा काम करती है, तो:
- [C-2-1] यहां दी गई टेबल में मौजूद एन्कोडिंग प्रोफ़ाइलों के साथ काम करना ज़रूरी है.
| एसडी (खराब क्वालिटी) | एसडी (अच्छी क्वालिटी) | एचडी 720 पिक्सल | एचडी 1080 पिक्सल | |
|---|---|---|---|---|
| वीडियो का रिज़ॉल्यूशन | 320 x 180 पिक्सल | 640 x 360 पिक्सल | 1280 x 720 पिक्सल | 1920 x 1080 पिक्सल |
| वीडियो फ़्रेम रेट | 30 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस |
| वीडियो बिटरेट | 800 केबीपीएस | 2 एमबीपीएस | 4 एमबीपीएस | 10 एमबीपीएस |
5.2.4. VP9
अगर डिवाइस में VP9 कोडेक का इस्तेमाल किया जा सकता है, तो:
- Matroska WebM फ़ाइलें लिखने की सुविधा होनी चाहिए.
5.3. वीडियो डिकोडिंग
अगर डिवाइसों में VP8, VP9, H.264 या H.265 कोडेक काम करते हैं, तो:
- [C-1-1] यह ज़रूरी है कि डिवाइस में मौजूद VP8, VP9, H.264, और H.265 कोडेक के लिए, एक ही स्ट्रीम में Android के स्टैंडर्ड एपीआई के ज़रिए वीडियो रिज़ॉल्यूशन और फ़्रेम रेट को डाइनैमिक तरीके से स्विच किया जा सके. ऐसा रीयल टाइम में और डिवाइस पर हर कोडेक के लिए उपलब्ध ज़्यादा से ज़्यादा रिज़ॉल्यूशन तक किया जाना चाहिए.
अगर डिवाइस में सेट किए गए सिस्टम, HDR_TYPE_DOLBY_VISION के ज़रिए Dolby Vision डिकोडर के साथ काम करने की सुविधा के बारे में बताते हैं, तो:
- [C-2-1] ज़रूरी है कि Dolby Vision की सुविधा के साथ काम करने वाला एक्सट्रैक्टर उपलब्ध हो.
- [C-2-2] डिवाइस की स्क्रीन या स्टैंडर्ड वीडियो आउटपुट पोर्ट (जैसे, एचडीएमआई) पर, डॉल्बी विज़न कॉन्टेंट को सही तरीके से डिसप्ले करना ज़रूरी है.
- [C-2-3] अगर पुराने सिस्टम के साथ काम करने वाली बेस-लेयर मौजूद हैं, तो उनके ट्रैक इंडेक्स को कंबाइंड Dolby Vision लेयर के ट्रैक इंडेक्स के बराबर सेट करना ज़रूरी है.
5.3.1. MPEG-2
अगर डिवाइस में MPEG-2 डिकोडर काम करते हैं, तो:
- [C-1-1] यह ज़रूरी है कि डिवाइस, Main Profile High Level के साथ काम करता हो.
5.3.2. H.263
अगर डिवाइस में H.263 डिकोडर काम करते हैं, तो:
- [C-1-1] बेसलाइन प्रोफ़ाइल Level 30 और Level 45 के साथ काम करना ज़रूरी है.
5.3.3. MPEG-4
अगर डिवाइस में MPEG-4 डिकोडर का इस्तेमाल किया जाता है, तो:
- [C-1-1] Simple Profile Level 3 के साथ काम करना ज़रूरी है.
5.3.4. H.264
अगर डिवाइसों में H.264 डिकोडर काम करते हैं, तो:
- [C-1-1] Main Profile Level 3.1 और बेसलाइन प्रोफ़ाइल के साथ काम करना ज़रूरी है. एएसओ (आर्बिट्ररी स्लाइस ऑर्डरिंग), एफ़एमओ (फ़्लेक्सिबल मैक्रोब्लॉक ऑर्डरिंग), और आरएस (रेडंडेंट स्लाइस) के लिए सहायता पाना ज़रूरी नहीं है.
- [C-1-2] इसमें, नीचे दी गई टेबल में बताई गई एसडी (स्टैंडर्ड डेफ़िनिशन) प्रोफ़ाइलों वाले वीडियो को डिकोड करने की सुविधा होनी चाहिए. साथ ही, ये वीडियो बेसलाइन प्रोफ़ाइल और मेन प्रोफ़ाइल लेवल 3.1 (इसमें 720p30 भी शामिल है) के साथ एन्कोड किए गए हों.
- इसमें एचडी (हाई डेफ़िनिशन) प्रोफ़ाइल वाले वीडियो डिकोड करने की सुविधा होनी चाहिए. इसके बारे में यहां दी गई टेबल में बताया गया है.
अगर Display.getSupportedModes() तरीके से रिपोर्ट की गई ऊंचाई, वीडियो रिज़ॉल्यूशन के बराबर या उससे ज़्यादा है, तो डिवाइसों पर:
- [C-2-1] यहां दी गई टेबल में, एचडी 720 पिक्सल वीडियो डिकोडिंग प्रोफ़ाइलों के साथ काम करना ज़रूरी है.
- [C-2-2] यहां दी गई टेबल में, एचडी 1080 पिक्सल वीडियो डिकोडिंग प्रोफ़ाइलों के साथ काम करना ज़रूरी है.
| एसडी (खराब क्वालिटी) | एसडी (अच्छी क्वालिटी) | एचडी 720 पिक्सल | एचडी 1080 पिक्सल | |
|---|---|---|---|---|
| वीडियो का रिज़ॉल्यूशन | 320 x 240 पिक्सल | 720 x 480 पिक्सल | 1280 x 720 पिक्सल | 1920 x 1080 पिक्सल |
| वीडियो फ़्रेम रेट | 30 एफ़पीएस | 30 एफ़पीएस | 60 एफ़पीएस | 30 एफ़पीएस (60 एफ़पीएसटेलीविज़न) |
| वीडियो बिटरेट | 800 केबीपीएस | 2 एमबीपीएस | 8 एमबीपीएस | 20 एमबीपीएस |
5.3.5. H.265 (HEVC)
अगर डिवाइस में H.265 कोडेक का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] में, मुख्य प्रोफ़ाइल लेवल 3 का मुख्य टियर और एसडी वीडियो डिकोडिंग प्रोफ़ाइलें काम करनी चाहिए. इनके बारे में इस टेबल में बताया गया है.
- इसमें एचडी डिकोडिंग प्रोफ़ाइलों के लिए सहायता होनी चाहिए. इसके बारे में यहां दी गई टेबल में बताया गया है.
- [C-1-2] अगर कोई हार्डवेयर डिकोडर मौजूद है, तो उसे यहां दी गई टेबल में बताई गई एचडी डिकोडिंग प्रोफ़ाइलों के साथ काम करना चाहिए.
अगर Display.getSupportedModes() तरीके से रिपोर्ट की गई ऊंचाई, वीडियो रिज़ॉल्यूशन के बराबर या उससे ज़्यादा है, तो:
- [C-2-1] डिवाइसों में, 720, 1080, और यूएचडी प्रोफ़ाइलों के लिए, H.265 या VP9 डिकोडिंग में से कम से कम एक को सपोर्ट करना ज़रूरी है.
| एसडी (खराब क्वालिटी) | एसडी (अच्छी क्वालिटी) | एचडी 720 पिक्सल | एचडी 1080 पिक्सल | यूएचडी | |
|---|---|---|---|---|---|
| वीडियो का रिज़ॉल्यूशन | 352 x 288 पिक्सल | 720 x 480 पिक्सल | 1280 x 720 पिक्सल | 1920 x 1080 पिक्सल | 3840 x 2160 पिक्सल |
| वीडियो फ़्रेम रेट | 30 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस | 30/60 एफ़पीएस (60 एफ़पीएसH.265 हार्डवेयर डिकोडिंग की सुविधा वाला टेलीविज़न) | 60 एफ़पीएस |
| वीडियो बिटरेट | 600 केबीपीएस | 1.6 एमबीपीएस | 4 एमबीपीएस | 5 एमबीपीएस | 20 एमबीपीएस |
5.3.6. VP8
अगर डिवाइस में VP8 कोडेक का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] इस टेबल में दी गई एसडी डिकोडिंग प्रोफ़ाइलों का इस्तेमाल किया जा सकता है.
- हार्डवेयर VP8 कोडेक का इस्तेमाल करना चाहिए, जो ज़रूरी शर्तें पूरी करता हो.
- नीचे दी गई टेबल में एचडी डिकोडिंग प्रोफ़ाइलें दी गई हैं. डिवाइस में इनकी सुविधा होनी चाहिए.
अगर Display.getSupportedModes() तरीके से रिपोर्ट की गई ऊंचाई, वीडियो रिज़ॉल्यूशन के बराबर या उससे ज़्यादा है, तो:
- [C-2-1] डिवाइसों में, यहां दी गई टेबल में बताई गई 720p प्रोफ़ाइलें काम करनी चाहिए.
- [C-2-2] डिवाइसों में, यहां दी गई टेबल में बताई गई 1080 पिक्सल की प्रोफ़ाइलें काम करनी चाहिए.
| एसडी (खराब क्वालिटी) | एसडी (अच्छी क्वालिटी) | एचडी 720 पिक्सल | एचडी 1080 पिक्सल | |
|---|---|---|---|---|
| वीडियो का रिज़ॉल्यूशन | 320 x 180 पिक्सल | 640 x 360 पिक्सल | 1280 x 720 पिक्सल | 1920 x 1080 पिक्सल |
| वीडियो फ़्रेम रेट | 30 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस (60 एफ़पीएसटेलीविज़न) | 30 (60 एफ़पीएसटेलीविज़न) |
| वीडियो बिटरेट | 800 केबीपीएस | 2 एमबीपीएस | 8 एमबीपीएस | 20 एमबीपीएस |
5.3.7. VP9
अगर डिवाइस में VP9 कोडेक का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] इसमें एसडी वीडियो डिकोडिंग प्रोफ़ाइलों के साथ काम करने की सुविधा होनी चाहिए. इसकी जानकारी यहां दी गई टेबल में दी गई है.
- इसमें एचडी डिकोडिंग प्रोफ़ाइलों के लिए सहायता होनी चाहिए. इसके बारे में यहां दी गई टेबल में बताया गया है.
अगर डिवाइस में VP9 कोडेक और हार्डवेयर डिकोडर का इस्तेमाल किया जाता है, तो:
- [C-2-1] यहां दी गई टेबल में बताई गई एचडी डिकोडिंग प्रोफ़ाइलों के साथ काम करना ज़रूरी है.
अगर Display.getSupportedModes() तरीके से रिपोर्ट की गई ऊंचाई, वीडियो रिज़ॉल्यूशन के बराबर या उससे ज़्यादा है, तो:
- [C-3-1] डिवाइसों में, 720, 1080, और यूएचडी प्रोफ़ाइलों के लिए, VP9 या H.265 में से कम से कम एक कोडेक का इस्तेमाल करके डिकोडिंग की सुविधा होनी चाहिए.
| एसडी (खराब क्वालिटी) | एसडी (अच्छी क्वालिटी) | एचडी 720 पिक्सल | एचडी 1080 पिक्सल | यूएचडी | |
|---|---|---|---|---|---|
| वीडियो का रिज़ॉल्यूशन | 320 x 180 पिक्सल | 640 x 360 पिक्सल | 1280 x 720 पिक्सल | 1920 x 1080 पिक्सल | 3840 x 2160 पिक्सल |
| वीडियो फ़्रेम रेट | 30 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस | 30 एफ़पीएस (60 एफ़पीएसVP9 हार्डवेयर डिकोडिंग की सुविधा वाला टेलीविज़न) | 60 एफ़पीएस |
| वीडियो बिटरेट | 600 केबीपीएस | 1.6 एमबीपीएस | 4 एमबीपीएस | 5 एमबीपीएस | 20 एमबीपीएस |
5.4. ऑडियो रिकॉर्डिंग
इस सेक्शन में बताई गई कुछ ज़रूरी शर्तों को Android 4.3 के बाद से SHOULD के तौर पर लिस्ट किया गया है. हालांकि, आने वाले समय में कंपैटबिलिटी डेफ़िनिशन में इन शर्तों को MUST के तौर पर लिस्ट किया जाएगा. मौजूदा और नए Android डिवाइसों के लिए, यह बेहद ज़रूरी है कि वे 'ज़रूरी' के तौर पर लिस्ट की गई इन ज़रूरी शर्तों को पूरा करें. ऐसा न करने पर, आने वाले समय में Android के नए वर्शन पर अपग्रेड करने के बाद, वे Android के साथ काम नहीं कर पाएंगे.
5.4.1. Raw Audio Capture
अगर डिवाइसों में android.hardware.microphone का एलान किया जाता है, तो:
-
[C-1-1] डिवाइस में, रॉ ऑडियो कॉन्टेंट को कैप्चर करने की सुविधा होनी चाहिए. इसमें ये विशेषताएं होनी चाहिए:
- फ़ॉर्मैट: लीनियर पीसीएम, 16-बिट
- सैंपल रेट: 8000, 11025, 16000, 44100 हर्ट्ज़
- चैनल: मोनो
-
[C-1-2] ऊपर दिए गए सैंपल रेट पर, बिना अप-सैंपलिंग के ऑडियो कैप्चर करना ज़रूरी है.
- [C-1-3] जब ऊपर दी गई सैंपल रेट को डाउन-सैंपलिंग के साथ कैप्चर किया जाता है, तो उसमें एंटी-एलियासिंग फ़िल्टर शामिल होना चाहिए.
-
इसमें एएम रेडियो और डीवीडी क्वालिटी में रॉ ऑडियो कॉन्टेंट कैप्चर करने की सुविधा होनी चाहिए. इसका मतलब है कि इसमें ये सुविधाएं होनी चाहिए:
- फ़ॉर्मैट: लीनियर पीसीएम, 16-बिट
- सैंपलिंग रेट: 22050, 48000 हर्ट्ज़
- चैनल: स्टीरियो
अगर डिवाइस में एएम रेडियो और डीवीडी क्वालिटी में रॉ ऑडियो कॉन्टेंट कैप्चर करने की सुविधा है, तो:
- [C-2-1] को 16000:22050 या 44100:48000 से ज़्यादा के किसी भी अनुपात में अप-सैंपलिंग किए बिना कैप्चर करना होगा.
- [C-2-2] अप-सैंपलिंग या डाउन-सैंपलिंग के लिए, इसमें सही ऐंटी-एलियासिंग फ़िल्टर शामिल होना चाहिए.
5.4.2. आवाज़ पहचानने की सुविधा के लिए रिकॉर्ड करना
अगर डिवाइसों में android.hardware.microphone का एलान किया जाता है, तो:
- [C-1-1]
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITIONऑडियो सोर्स को 44100 और 48000 में से किसी एक सैंपलिंग रेट पर कैप्चर करना ज़रूरी है. - [C-1-2]
AudioSource.VOICE_RECOGNITIONऑडियो सोर्स से ऑडियो स्ट्रीम रिकॉर्ड करते समय, शोर कम करने की सुविधा वाली ऑडियो प्रोसेसिंग को डिफ़ॉल्ट रूप से बंद करना ज़रूरी है. - [C-1-3]
AudioSource.VOICE_RECOGNITIONऑडियो सोर्स से ऑडियो स्ट्रीम रिकॉर्ड करते समय, गेन को अपने-आप कंट्रोल करने की सुविधा डिफ़ॉल्ट रूप से बंद होनी चाहिए. - आवाज़ की पहचान करने वाली ऑडियो स्ट्रीम को रिकॉर्ड करते समय, फ़्रीक्वेंसी की तुलना में ऐम्प्लिट्यूड लगभग एक जैसा होना चाहिए. खास तौर पर, 100 हर्ट्ज़ से 4,000 हर्ट्ज़ तक ±3 डीबी.
- आवाज़ पहचानने की सुविधा के लिए, ऑडियो स्ट्रीम को रिकॉर्ड करना चाहिए. इसके लिए, इनपुट सेंसिटिविटी को इस तरह से सेट किया जाना चाहिए कि 1000 हर्ट्ज़ पर 90 dB साउंड पावर लेवल (एसपीएल) सोर्स, 16-बिट सैंपल के लिए 2500 का आरएमएस दे.
- आवाज़ पहचानने की सुविधा के लिए ऑडियो स्ट्रीम रिकॉर्ड की जानी चाहिए, ताकि पीसीएम ऐम्प्लिट्यूड लेवल, माइक्रोफ़ोन पर -18 dB से +12 dB re 90 dB एसपीएल तक कम से कम 30 dB की रेंज में, इनपुट एसपीएल में हुए बदलावों को लीनियर तरीके से ट्रैक कर सकें.
- आवाज़ पहचानने की सुविधा के लिए, ऑडियो स्ट्रीम को रिकॉर्ड करना चाहिए. इसमें 1 किलोहर्ट्ज़ की फ़्रीक्वेंसी वाले 90 dB एसपीएल इनपुट लेवल पर, माइक्रोफ़ोन के लिए टोटल हार्मोनिक डिस्टॉर्शन (टीएचडी) 1% से कम होना चाहिए.
अगर डिवाइसों में, आवाज़ पहचानने के लिए android.hardware.microphone और नॉइज़ कम करने की टेक्नोलॉजी का इस्तेमाल किया जाता है, तो:
- [C-2-1] इस ऑडियो इफ़ेक्ट को
android.media.audiofx.NoiseSuppressorAPI से कंट्रोल किया जा सकता है. - [C-2-2]
AudioEffect.Descriptor.uuidफ़ील्ड के ज़रिए, नॉइज़ कम करने की टेक्नोलॉजी के हर इस्तेमाल की खास तौर पर पहचान करना ज़रूरी है.
5.4.3. प्लेबैक को फिर से रूट करने के लिए कैप्चर करना
android.media.MediaRecorder.AudioSource क्लास में REMOTE_SUBMIX ऑडियो सोर्स शामिल होता है.
अगर डिवाइसों में android.hardware.audio.output और android.hardware.microphone, दोनों को सेट किया गया है, तो:
-
[C-1-1]
REMOTE_SUBMIXऑडियो सोर्स को सही तरीके से लागू करना ज़रूरी है, ताकि जब कोई ऐप्लिकेशन इस ऑडियो सोर्स से रिकॉर्ड करने के लिएandroid.media.AudioRecordAPI का इस्तेमाल करे, तो वह इन ऑडियो स्ट्रीम को छोड़कर बाकी सभी ऑडियो स्ट्रीम को कैप्चर करे:-
AudioManager.STREAM_RING -
AudioManager.STREAM_ALARM -
AudioManager.STREAM_NOTIFICATION
-
5.5. ऑडियो चलाने की सुविधा
Android में, ऐप्लिकेशन को ऑडियो आउटपुट पेरिफ़ेरल के ज़रिए ऑडियो चलाने की अनुमति देने की सुविधा शामिल है. इसके बारे में सेक्शन 7.8.2 में बताया गया है.
5.5.1. रॉ ऑडियो प्लेबैक
अगर डिवाइसों में android.hardware.audio.output का एलान किया जाता है, तो:
-
[C-1-1] डिवाइस में, रॉ ऑडियो कॉन्टेंट को चलाने की सुविधा होनी चाहिए. इसमें ये विशेषताएं होनी चाहिए:
- फ़ॉर्मैट: लीनियर पीसीएम, 16-बिट
- सैंपलिंग की दरें: 8000, 11025, 16000, 22050, 32000, 44100
- चैनल: मोनो, स्टीरियो
-
इसमें रॉ ऑडियो कॉन्टेंट को चलाने की सुविधा होनी चाहिए. साथ ही, इसमें ये विशेषताएं होनी चाहिए:
- सैंपलिंग रेट: 24000, 48000
5.5.2. ऑडियो इफ़ेक्ट
Android, डिवाइसों पर लागू करने के लिए ऑडियो इफ़ेक्ट के लिए एपीआई उपलब्ध कराता है.
अगर डिवाइसों में android.hardware.audio.output सुविधा का एलान किया जाता है, तो:
- [C-1-1] ज़रूरी है कि इसमें
EFFECT_TYPE_EQUALIZERऔरEFFECT_TYPE_LOUDNESS_ENHANCERलागू किए गए हों. इन्हें AudioEffect सबक्लासEqualizer,LoudnessEnhancerके ज़रिए कंट्रोल किया जा सकता हो. - [C-1-2] ज़रूरी है कि इसमें विज़ुअलाइज़र एपीआई लागू किया गया हो. इसे
Visualizerक्लास के ज़रिए कंट्रोल किया जा सकता है. - इसमें
EFFECT_TYPE_BASS_BOOST,EFFECT_TYPE_ENV_REVERB,EFFECT_TYPE_PRESET_REVERB, औरEFFECT_TYPE_VIRTUALIZERलागू करने की सुविधा होनी चाहिए. इन्हेंAudioEffectसब-क्लासBassBoost,EnvironmentalReverb,PresetReverb, औरVirtualizerके ज़रिए कंट्रोल किया जा सकता है.
5.5.3. ऑडियो आउटपुट वॉल्यूम
Automotive डिवाइस में सेट किए गए सिस्टम के लिए:
- कॉन्टेंट टाइप या इस्तेमाल के आधार पर, हर ऑडियो स्ट्रीम के लिए ऑडियो वॉल्यूम को अलग-अलग अडजस्ट करने की अनुमति होनी चाहिए. इसके लिए, AudioAttributes और कार के ऑडियो सिस्टम के इस्तेमाल के बारे में सार्वजनिक तौर पर उपलब्ध जानकारी
android.car.CarAudioManagerमें दी गई परिभाषा का इस्तेमाल किया जाना चाहिए.
5.6. ऑडियो के इंतज़ार का समय
ऑडियो के इंतज़ार का समय, ऑडियो सिग्नल के सिस्टम से गुज़रने में लगने वाला समय होता है. कई तरह के ऐप्लिकेशन, रीयल-टाइम में साउंड इफ़ेक्ट पाने के लिए कम इंतज़ार के समय पर निर्भर करते हैं.
इस सेक्शन के लिए, यहां दी गई परिभाषाओं का इस्तेमाल करें:
- आउटपुट में लगने वाला समय. यह उस समय के बीच का अंतर होता है, जब कोई ऐप्लिकेशन पीसीएम-कोड किए गए डेटा का फ़्रेम लिखता है और जब डिवाइस पर मौजूद ट्रांसड्यूसर पर उससे जुड़ी आवाज़ सुनाई देती है. इसके अलावा, यह उस समय के बीच का अंतर भी होता है, जब सिग्नल किसी पोर्ट के ज़रिए डिवाइस से बाहर जाता है और उसे बाहर से देखा जा सकता है.
- कोल्ड आउटपुट में लगने वाला समय. पहले फ़्रेम के लिए आउटपुट में लगने वाला समय. ऐसा तब होता है, जब ऑडियो आउटपुट सिस्टम अनुरोध से पहले बंद हो गया हो.
- लगातार आउटपुट मिलने में लगने वाला समय. डिवाइस पर ऑडियो चलने के बाद, अगले फ़्रेम के लिए आउटपुट में लगने वाला समय.
- इनपुट के इंतज़ार का समय. यह वह समय होता है जब डिवाइस पर मौजूद ट्रांसड्यूसर या पोर्ट के ज़रिए, डिवाइस को परिवेश से कोई आवाज़ सुनाई जाती है और जब कोई ऐप्लिकेशन, पीसीएम-कोड वाले डेटा के फ़्रेम को पढ़ता है.
- इनपुट नहीं मिला. इनपुट सिग्नल का शुरुआती हिस्सा, जिसका इस्तेमाल नहीं किया जा सकता या जो उपलब्ध नहीं है.
- कोल्ड इनपुट के लिए इंतज़ार का समय. ऑडियो इनपुट सिस्टम के निष्क्रिय होने और अनुरोध से पहले बंद होने पर, पहले फ़्रेम के लिए इनपुट में लगने वाले समय और इनपुट में लगने वाले समय का योग.
- लगातार इनपुट लेटेन्सी. डिवाइस के ऑडियो कैप्चर करने के दौरान, बाद के फ़्रेम के लिए इनपुट लेटेन्सी.
- कोल्ड आउटपुट जिटर. कोल्ड आउटपुट की लेटेन्सी वैल्यू के अलग-अलग मेज़रमेंट के बीच का अंतर.
- कोल्ड इनपुट जिटर. कोल्ड इनपुट लेटेन्सी की वैल्यू के अलग-अलग मेज़रमेंट के बीच का अंतर.
- लगातार राउंड-ट्रिप में लगने वाला समय. यह लगातार इनपुट लेटेन्सी, लगातार आउटपुट लेटेन्सी, और एक बफ़र अवधि का योग होता है. बफ़र पीरियड से, ऐप्लिकेशन को सिग्नल प्रोसेस करने और इनपुट और आउटपुट स्ट्रीम के बीच फ़ेज़ के अंतर को कम करने का समय मिलता है.
- OpenSL ES PCM बफ़र क्यू एपीआई. Android NDK में, पीसीएम से जुड़े OpenSL ES एपीआई का सेट.
- AAudio native audio API. Android NDK में मौजूद AAudio एपीआई का सेट.
अगर डिवाइसों पर android.hardware.audio.output लागू किया गया है, तो हमारा सुझाव है कि वे इन ज़रूरी शर्तों को पूरा करें या इनसे बेहतर परफ़ॉर्म करें:
- [एसआर] कोल्ड आउटपुट की लेटेन्सी 100 मिलीसेकंड या इससे कम हो
- [एसआर] लगातार आउटपुट में लगने वाला समय 45 मिलीसेकंड या इससे कम हो
- [SR] Minimize the cold output jitter
अगर OpenSL ES पीसीएम बफ़र सूची एपीआई का इस्तेमाल करते समय, डिवाइसों पर लागू की गई सेटिंग, शुरुआती कैलिब्रेशन के बाद ऊपर दी गई ज़रूरी शर्तों को पूरा करती हैं, तो इसका मतलब है कि ये डिवाइस, लगातार आउटपुट मिलने में लगने वाले इंतज़ार के समय और पहली बार आउटपुट मिलने में लगने वाले इंतज़ार के समय से जुड़ी ज़रूरी शर्तों को पूरा करते हैं. ऐसा कम से कम एक ऐसे ऑडियो डिवाइस के लिए होना चाहिए जिस पर OpenSL ES पीसीएम बफ़र सूची एपीआई काम करता हो. ऐसे में, डिवाइसों को ये लेबल दिए जाते हैं:
- [SR]
android.hardware.audio.low_latencyफ़ीचर फ़्लैग के बारे में एलान करके, कम लेटेंसी वाले ऑडियो की जानकारी देने का सुझाव दिया जाता है. - [SR] AAudio API के ज़रिए कम-लेटेंसी वाले ऑडियो की सुविधा के लिए, ज़रूरी शर्तों को पूरा करने का सुझाव दिया जाता है.
अगर डिवाइसों पर OpenSL ES PCM बफ़र क्यू एपीआई के ज़रिए कम समय में ऑडियो प्रोसेस करने की सुविधा से जुड़ी ज़रूरी शर्तें पूरी नहीं होती हैं, तो:
- [C-1-1] ज़रूरी है कि कम समय में ऑडियो ट्रांसफ़र करने की सुविधा के बारे में जानकारी न दी जाए.
अगर डिवाइसों में android.hardware.microphone की सुविधा शामिल है, तो उन्हें इनपुट ऑडियो से जुड़ी ये ज़रूरी शर्तें पूरी करनी चाहिए:
- [एसआर] कोल्ड इनपुट लेटेन्सी 100 मिलीसेकंड या इससे कम हो
- [एसआर] लगातार इनपुट लेटेन्सी 30 मिलीसेकंड या इससे कम हो
- [एसआर] लगातार राउंड-ट्रिप लेटेंसी 50 मिलीसेकंड या उससे कम हो
- [SR] Minimize the cold input jitter
5.7. नेटवर्क प्रोटोकॉल
डिवाइस में सेट किए हुए सिस्टम में, ऑडियो और वीडियो चलाने के लिए मीडिया नेटवर्क प्रोटोकॉल काम करने चाहिए. इनके बारे में Android SDK के दस्तावेज़ में बताया गया है.
अगर डिवाइस में ऑडियो या वीडियो डीकोडर शामिल हैं, तो:
-
[C-1-1] एचटीटीपी(एस) पर, सेक्शन 5.1 में बताए गए सभी ज़रूरी कोडेक और कंटेनर फ़ॉर्मैट काम करने चाहिए.
-
[C-1-2] एचटीटीपी लाइव स्ट्रीमिंग ड्राफ़्ट प्रोटोकॉल, वर्शन 7 के साथ, नीचे दी गई मीडिया सेगमेंट फ़ॉर्मैट टेबल में दिखाए गए मीडिया सेगमेंट फ़ॉर्मैट काम करने चाहिए.
-
[C-1-3] RTSP टेबल में, नीचे दी गई आरटीपी ऑडियो वीडियो प्रोफ़ाइल और उससे जुड़े कोडेक के साथ काम करना चाहिए. अपवादों के बारे में जानने के लिए, कृपया सेक्शन 5.1 में टेबल के फ़ुटनोट देखें.
मीडिया सेगमेंट के फ़ॉर्मैट
| सेगमेंट फ़ॉर्मैट | रेफ़रंस | कोडेक के साथ काम करने की सुविधा |
|---|---|---|
| MPEG-2 ट्रांसपोर्ट स्ट्रीम | ISO 13818 |
वीडियो कोडेक:
और MPEG-2 के बारे में ज़्यादा जानने के लिए, सेक्शन 5.1.3 देखें. ऑडियो कोडेक:
|
| ADTS फ़्रेमिंग और ID3 टैग के साथ AAC | ISO 13818-7 | एएसी और इसके वैरिएंट के बारे में जानकारी के लिए, सेक्शन 5.1.1 देखें |
| WebVTT | WebVTT |
RTSP (RTP, SDP)
| प्रोफ़ाइल का नाम | रेफ़रंस | कोडेक के साथ काम करने की सुविधा |
|---|---|---|
| H264 एवीसी | RFC 6184 | H264 AVC के बारे में ज़्यादा जानकारी के लिए, सेक्शन 5.1.3 देखें |
| MP4A-LATM | RFC 6416 | एएसी और इसके वैरिएंट के बारे में जानकारी के लिए, सेक्शन 5.1.1 देखें |
| H263-1998 |
RFC 3551 RFC 4629 RFC 2190 |
H263 के बारे में ज़्यादा जानकारी के लिए, सेक्शन 5.1.3 देखें |
| H263-2000 | RFC 4629 | H263 के बारे में ज़्यादा जानकारी के लिए, सेक्शन 5.1.3 देखें |
| एएमआर | RFC 4867 | एएमआर-एनबी के बारे में ज़्यादा जानकारी के लिए, सेक्शन 5.1.1 देखें |
| AMR-WB | RFC 4867 | AMR-WB के बारे में जानकारी के लिए, सेक्शन 5.1.1 देखें |
| MP4V-ES | RFC 6416 | MPEG-4 SP के बारे में ज़्यादा जानकारी के लिए, सेक्शन 5.1.3 देखें |
| mpeg4-generic | RFC 3640 | एएसी और इसके वैरिएंट के बारे में जानकारी के लिए, सेक्शन 5.1.1 देखें |
| MP2T | RFC 2250 | ज़्यादा जानकारी के लिए, एचटीटीपी लाइव स्ट्रीमिंग के नीचे मौजूद MPEG-2 ट्रांसपोर्ट स्ट्रीम देखें |
5.8. सुरक्षित मीडिया
अगर डिवाइस में सुरक्षित वीडियो आउटपुट की सुविधा काम करती है और सुरक्षित डिसप्ले की सुविधा भी काम करती है, तो:
- [C-1-1]
Display.FLAG_SECUREके साथ काम करने की सुविधा का एलान करना ज़रूरी है.
अगर डिवाइस में सेट किए गए सिस्टम में Display.FLAG_SECURE और वायरलेस डिसप्ले प्रोटोकॉल का इस्तेमाल किया जाता है, तो:
- [C-2-1] वायरलेस प्रोटोकॉल, जैसे कि Miracast के ज़रिए कनेक्ट किए गए डिसप्ले के लिए, लिंक को क्रिप्टोग्राफ़िक तौर पर मज़बूत तरीके से सुरक्षित करना ज़रूरी है. जैसे, HDCP 2.x या इससे नया वर्शन.
अगर डिवाइस में सेट किए गए सिस्टम में Display.FLAG_SECURE का इस्तेमाल किया जाता है और उसमें वायर से कनेक्ट किए जाने वाले बाहरी डिसप्ले की सुविधा काम करती है, तो:
- [C-3-1] सभी वायर्ड बाहरी डिसप्ले के लिए, HDCP 1.2 या इससे बाद के वर्शन का इस्तेमाल किया जाना चाहिए.
5.9. म्यूज़िकल इंस्ट्रुमेंट डिजिटल इंटरफ़ेस (एमआईडीआई)
अगर कोई डिवाइस, ऐप्लिकेशन के बीच एमआईडीआई सॉफ़्टवेयर ट्रांसपोर्ट (वर्चुअल एमआईडीआई डिवाइस) का इस्तेमाल करने की सुविधा देता है और एमआईडीआई की सुविधा वाले इन सभी हार्डवेयर ट्रांसपोर्ट के साथ काम करता है, तो उसे:
- [SR] android.content.pm.PackageManager क्लास के ज़रिए, android.software.midi सुविधा के लिए सहायता की जानकारी देने का सुझाव दिया जाता है.
एमआईडीआई की सुविधा वाले हार्डवेयर ट्रांसपोर्ट ये हैं:
- यूएसबी होस्ट मोड (सेक्शन 7.7 यूएसबी)
- यूएसबी पेरिफ़ेरल मोड (सेक्शन 7.7 यूएसबी)
- ब्लूटूथ LE पर MIDI, सेंट्रल डिवाइस के तौर पर काम कर रहा है (सेक्शन 7.4.3 ब्लूटूथ)
अगर डिवाइस में, ऊपर दिए गए MIDI की सुविधा वाले किसी हार्डवेयर ट्रांसपोर्ट के ज़रिए, MIDI के अलावा अन्य कनेक्टिविटी की सुविधा मिलती है, लेकिन उस हार्डवेयर ट्रांसपोर्ट के ज़रिए MIDI की सुविधा नहीं मिलती, तो:
- [C-1-1] यह ज़रूरी है कि डिवाइस, android.software.midi सुविधा के साथ काम करने की जानकारी न दे.
5.10. प्रोफ़ेशनल ऑडियो
अगर डिवाइसों पर, android.content.pm.PackageManager क्लास के ज़रिए android.hardware.audio.pro सुविधा के काम करने की जानकारी मिलती है, तो:
- [C-1-1] यह ज़रूरी है कि सुविधा
android.hardware.audio.low_latencyके साथ काम करने की जानकारी दी जाए. - [C-1-2] सेक्शन 5.6 ऑडियो के इंतज़ार का समय में बताई गई, लगातार राउंड-ट्रिप ऑडियो के इंतज़ार का समय 20 मिलीसेकंड या इससे कम होनी चाहिए. साथ ही, कम से कम एक पाथ पर यह 10 मिलीसेकंड या इससे कम होनी चाहिए.
- [C-1-3] में यूएसबी होस्ट मोड और यूएसबी पेरीफ़ेरल मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल होना चाहिए.
- [C-1-4] यह ज़रूरी है कि डिवाइस,
android.software.midiसुविधा के साथ काम करता हो. - [C-1-5] OpenSL ES पीसीएम बफ़र क्यू एपीआई का इस्तेमाल करके, लेटेंसी और यूएसबी ऑडियो से जुड़ी ज़रूरी शर्तों को पूरा करना ज़रूरी है.
- ऑडियो चालू होने पर, सीपीयू की परफ़ॉर्मेंस का लेवल लगातार बना रहना चाहिए.
- ऑडियो क्लॉक में, स्टैंडर्ड टाइम के हिसाब से कम से कम अंतर होना चाहिए.
- जब दोनों चालू हों, तो सीपीयू
CLOCK_MONOTONICके मुकाबले ऑडियो क्लॉक ड्रिफ्ट को कम करना चाहिए. - उपयोगकर्ता के डिवाइस पर मौजूद ट्रांसड्यूसर के ज़रिए, ऑडियो के इंतज़ार के समय को कम से कम करना चाहिए.
- यूएसबी डिजिटल ऑडियो पर ऑडियो के इंतज़ार के समय को कम करना चाहिए.
- सभी पाथ पर ऑडियो के इंतज़ार के समय की जानकारी देनी चाहिए.
- ऑडियो बफ़र पूरा होने पर कॉलबैक एंट्री के समय में जिटर को कम करना चाहिए. इससे, कॉलबैक के ज़रिए इस्तेमाल किए जा सकने वाले सीपीयू बैंडविड्थ के प्रतिशत पर असर पड़ता है.
- सामान्य इस्तेमाल के दौरान, रिपोर्ट की गई लेटेन्सी पर, ऑडियो अंडररन (आउटपुट) या ओवररन (इनपुट) नहीं होना चाहिए.
- इन्हें चैनलों के बीच इंतज़ार के समय में कोई अंतर नहीं रखना चाहिए.
- सभी ट्रांसपोर्ट पर एमआईडीआई की औसत लेटेन्सी को कम करना चाहिए.
- सभी ट्रांसपोर्ट पर, लोड (जिटर) के दौरान एमआईडीआई के रिस्पॉन्स में लगने वाले समय में होने वाले बदलाव को कम से कम करना चाहिए.
- सभी ट्रांसपोर्ट पर, एमआईडीआई के सटीक टाइमस्टैंप देने चाहिए.
- डिवाइस पर मौजूद ट्रांसड्यूसर से आने वाले ऑडियो सिग्नल में मौजूद नॉइज़ को कम करना चाहिए. इसमें कोल्ड स्टार्ट के तुरंत बाद की अवधि भी शामिल है.
- जब दोनों एंड-पॉइंट चालू हों, तब इनपुट और आउटपुट के बीच ऑडियो क्लॉक का अंतर शून्य होना चाहिए. इससे जुड़े एंड-पॉइंट के उदाहरणों में, डिवाइस पर मौजूद माइक्रोफ़ोन और स्पीकर या ऑडियो जैक इनपुट और आउटपुट शामिल हैं.
- जब दोनों चालू हों, तो इसे एक ही थ्रेड पर, इनपुट और आउटपुट, दोनों के लिए ऑडियो बफ़र पूरा होने पर कॉल किए जाने वाले कॉलबैक को हैंडल करना चाहिए. साथ ही, इनपुट कॉलबैक से वापस आने के तुरंत बाद, आउटपुट कॉलबैक में जाना चाहिए. अगर एक ही थ्रेड पर कॉल बैक को मैनेज करना मुमकिन नहीं है, तो इनपुट कॉल बैक डालने के कुछ समय बाद आउटपुट कॉल बैक डालें. इससे ऐप्लिकेशन को इनपुट और आउटपुट, दोनों के लिए एक जैसा समय तय करने की अनुमति मिलती है.
- इनपुट और आउटपुट के लिए, HAL ऑडियो बफ़रिंग के बीच फ़ेज़ के अंतर को कम करना चाहिए.
- टच करने के बाद, स्क्रीन पर दिखने में लगने वाला समय कम होना चाहिए.
- डिवाइस पर लोड होने के दौरान, टच के इंतज़ार के समय में होने वाले बदलाव (jitter) को कम से कम करना चाहिए.
अगर डिवाइसों में ऊपर दी गई सभी ज़रूरी शर्तें पूरी की जाती हैं, तो:
- [SR]
android.content.pm.PackageManagerक्लास के ज़रिए,android.hardware.audio.proसुविधा के लिए सहायता उपलब्ध कराने की जानकारी देने का सुझाव दिया जाता है.
अगर डिवाइस में OpenSL ES PCM बफ़र क्यू एपीआई के ज़रिए ज़रूरी शर्तें पूरी की जाती हैं, तो:
- [SR] यह सुझाव दिया जाता है कि AAudio API के ज़रिए भी इन्हीं ज़रूरी शर्तों को पूरा किया जाए.
अगर डिवाइस में 4 कंडक्टर वाला 3.5 मि॰मी॰ ऑडियो जैक शामिल है, तो:
- [C-2-1] ऑडियो जैक के पाथ पर, ऑडियो के लगातार राउंड-ट्रिप में लगने वाला समय 20 मिलीसेकंड या इससे कम होना चाहिए.
- [SR] वायर्ड ऑडियो हेडसेट स्पेसिफ़िकेशन (v1.1) के सेक्शन मोबाइल डिवाइस (जैक) स्पेसिफ़िकेशन का पालन करने का सुझाव दिया जाता है.
- ऑडियो जैक के पाथ पर, ऑडियो के इंतज़ार का समय लगातार 10 मिलीसेकंड या इससे कम होना चाहिए.
अगर डिवाइसों में चार कंडक्टर वाला 3.5 मि॰मी॰ ऑडियो जैक नहीं है, तो:
- [C-3-1] ऑडियो के इंतज़ार का समय लगातार 20 मिलीसेकंड या इससे कम होना चाहिए.
- यूएसबी ऑडियो क्लास का इस्तेमाल करके, यूएसबी होस्ट मोड पोर्ट पर ऑडियो की राउंड-ट्रिप लेटेन्सी लगातार 10 मिलीसेकंड या उससे कम होनी चाहिए.
अगर डिवाइस में यूएसबी होस्ट मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [C-4-1] यूएसबी ऑडियो क्लास को लागू करना ज़रूरी है.
अगर डिवाइस में एचडीएमआई पोर्ट शामिल है, तो:
- [C-5-1] 20-बिट या 24-बिट डेप्थ और 192 किलोहर्ट्ज़ पर, स्टीरियो और आठ चैनलों में आउटपुट देने की सुविधा होनी चाहिए. साथ ही, बिट-डेप्थ में कोई कमी नहीं होनी चाहिए और न ही रीसैंपलिंग होनी चाहिए.
5.11. प्रोसेस नहीं किए गए वीडियो के लिए कैप्चर करना
Android में, android.media.MediaRecorder.AudioSource.UNPROCESSED ऑडियो सोर्स के ज़रिए बिना प्रोसेस किए गए ऑडियो को रिकॉर्ड करने की सुविधा शामिल है. OpenSL ES में, इसे रिकॉर्ड प्रीसेट SL_ANDROID_RECORDING_PRESET_UNPROCESSED की मदद से ऐक्सेस किया जा सकता है.
अगर डिवाइस में, बिना प्रोसेस किए गए ऑडियो सोर्स का इस्तेमाल किया जाता है और उसे तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराया जाता है, तो:
-
[C-1-1]
android.media.AudioManagerप्रॉपर्टी PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED के ज़रिए, सहायता के बारे में जानकारी देना ज़रूरी है. -
[C-1-2] मिड-फ़्रीक्वेंसी रेंज में, ऐम्प्लिट्यूड-वर्सेस-फ़्रीक्वेंसी की विशेषताएं लगभग एक जैसी होनी चाहिए: खास तौर पर, बिना प्रोसेस किए गए ऑडियो सोर्स को रिकॉर्ड करने के लिए इस्तेमाल किए गए हर माइक्रोफ़ोन के लिए, 100 हर्ट्ज़ से 7,000 हर्ट्ज़ तक ±10dB.
-
[C-1-3] लो फ़्रीक्वेंसी रेंज में ऐम्प्लिट्यूड लेवल दिखाना ज़रूरी है: खास तौर पर, 5 हर्ट्ज़ से 100 हर्ट्ज़ तक ±20 dB, जो कि बिना प्रोसेस किए गए ऑडियो सोर्स को रिकॉर्ड करने के लिए इस्तेमाल किए गए हर माइक्रोफ़ोन के लिए, मिड-फ़्रीक्वेंसी रेंज की तुलना में है.
-
[C-1-4] इसमें ज़्यादा फ़्रीक्वेंसी रेंज में ऐम्प्लिट्यूड लेवल दिखना चाहिए: खास तौर पर, 7,000 हर्ट्ज़ से 22 किलोहर्ट्ज़ तक ±30 डीबी, जो कि बिना प्रोसेस किए गए ऑडियो सोर्स को रिकॉर्ड करने के लिए इस्तेमाल किए गए हर माइक्रोफ़ोन की मिड-फ़्रीक्वेंसी रेंज की तुलना में है.
-
[C-1-5] ऑडियो इनपुट की सेंसिटिविटी को इस तरह से सेट किया जाना चाहिए कि 94 dB के साउंड प्रेशर लेवल (एसपीएल) पर चलाए गए 1000 हर्ट्ज़ के साइनसोडल टोन सोर्स से, 16 बिट-सैंपल के लिए 520 का आरएमएस (या फ़्लोटिंग पॉइंट/डबल प्रेसिज़न सैंपल के लिए -36 dB फ़ुल स्केल) वाला रिस्पॉन्स मिले. ऐसा हर उस माइक्रोफ़ोन के लिए होना चाहिए जिसका इस्तेमाल बिना प्रोसेस किए गए ऑडियो सोर्स को रिकॉर्ड करने के लिए किया जाता है.
-
[C-1-6] बिना प्रोसेस किए गए ऑडियो सोर्स को रिकॉर्ड करने के लिए इस्तेमाल किए गए हर माइक्रोफ़ोन के लिए, सिग्नल-टू-नॉइज़ रेशियो (एसएनआर) 60 डीबी या इससे ज़्यादा होना चाहिए. (जबकि एसएनआर को 94 dB एसपीएल और सेल्फ नॉइज़ के बराबर एसपीएल के बीच के अंतर के तौर पर मापा जाता है, जिसे A-वेटेड किया जाता है).
-
[C-1-7] बिना प्रोसेस किए गए ऑडियो सोर्स को रिकॉर्ड करने के लिए इस्तेमाल किए गए हर माइक्रोफ़ोन के लिए, 90 dB एसपीएल इनपुट लेवल पर 1 kHZ के लिए, टोटल हार्मोनिक डिस्टॉर्शन (टीएचडी) 1% से कम होना चाहिए.
-
पाथ में, लेवल मल्टीप्लायर के अलावा कोई अन्य सिग्नल प्रोसेसिंग (जैसे, ऑटोमैटिक गेन कंट्रोल, हाई पास फ़िल्टर या नॉइज़ कैंसलेशन) नहीं होनी चाहिए, ताकि लेवल को मनचाही रेंज में लाया जा सके. दूसरे शब्दों में:
- [C-1-8] अगर किसी वजह से आर्किटेक्चर में सिग्नल प्रोसेसिंग मौजूद है, तो उसे बंद करना होगा. साथ ही, सिग्नल पाथ में किसी तरह की देरी या अतिरिक्त इंतज़ार का समय नहीं होना चाहिए.
- [C-1-9] लेवल मल्टीप्लायर को पाथ पर इस्तेमाल करने की अनुमति है. हालांकि, इससे सिग्नल पाथ में देरी या लेटेन्सी नहीं होनी चाहिए.
सभी एसपीएल मेज़रमेंट, टेस्ट किए जा रहे माइक्रोफ़ोन के ठीक बगल में किए जाते हैं. एक से ज़्यादा माइक्रोफ़ोन कॉन्फ़िगरेशन के लिए, ये ज़रूरी शर्तें हर माइक्रोफ़ोन पर लागू होती हैं.
अगर डिवाइस में सेट किए गए सिस्टम, android.hardware.microphone का इस्तेमाल करते हैं, लेकिन बिना प्रोसेस किए गए ऑडियो सोर्स के साथ काम नहीं करते, तो:
- [C-2-1]
AudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED)एपीआई तरीके के लिए,nullको वापस भेजना ज़रूरी है, ताकि यह सही तरीके से पता चल सके कि यह सुविधा काम नहीं करती. - [SR] अब भी यह सुझाव दिया जाता है कि बिना प्रोसेस किए गए रिकॉर्डिंग सोर्स के सिग्नल पाथ के लिए, ज़्यादा से ज़्यादा ज़रूरी शर्तों को पूरा किया जाए.
6. डेवलपर टूल और विकल्पों के साथ काम करने की सुविधा
6.1. डेवलपर टूल
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] Android SDK में दिए गए Android डेवलपर टूल के साथ काम करना ज़रूरी है.
-
- [C-0-2] यह ज़रूरी है कि डिवाइस, Android SDK में बताए गए सभी adb फ़ंक्शन के साथ काम करता हो. इनमें dumpsys भी शामिल है.
- [C-0-3] dumpsys के ज़रिए लॉग किए गए डिवाइस सिस्टम इवेंट (batterystats , diskstats, fingerprint, graphicsstats, netstats, notification, procstats) के फ़ॉर्मैट या कॉन्टेंट में बदलाव नहीं किया जाना चाहिए.
- [C-0-4] डिवाइस पर adb डेमॉन डिफ़ॉल्ट रूप से बंद होना चाहिए. साथ ही, Android Debug Bridge को चालू करने के लिए, उपयोगकर्ता के पास एक ऐसा तरीका होना चाहिए जिसका वह आसानी से इस्तेमाल कर सके.
- [C-0-5] सुरक्षित ए़डीबी के साथ काम करना ज़रूरी है. Android में, सुरक्षित adb की सुविधा काम करती है. Secure adb की मदद से, पुष्टि किए गए होस्ट पर adb की सुविधा चालू की जा सकती है.
-
[C-0-6] ऐसा तरीका उपलब्ध कराना ज़रूरी है जिससे होस्ट मशीन से adb को कनेक्ट किया जा सके. उदाहरण के लिए:
- जिन डिवाइसों में यूएसबी पोर्ट नहीं है और जो पेरिफ़ेरल मोड के साथ काम नहीं करते हैं उनमें स्थानीय नेटवर्क (जैसे, इथरनेट या वाई-फ़ाई) के ज़रिए adb को लागू करना ज़रूरी है.
- Windows 7, 9, और 10 के लिए ड्राइवर उपलब्ध कराने होंगे. इससे डेवलपर, adb प्रोटोकॉल का इस्तेमाल करके डिवाइस से कनेक्ट कर पाएंगे.
-
Dalvik Debug Monitor Service (ddms)
- [C-0-7] यह ज़रूरी है कि डिवाइस, Android SDK में बताई गई सभी ddms सुविधाओं के साथ काम करता हो. डीडीएमएस, एडीबी का इस्तेमाल करता है. इसलिए, डीडीएमएस की सुविधा डिफ़ॉल्ट रूप से बंद होनी चाहिए. हालांकि, जब उपयोगकर्ता ऊपर बताए गए तरीके से Android डीबग ब्रिज को चालू करता है, तब डीडीएमएस की सुविधा चालू होनी चाहिए.
-
Monkey
- [C-0-8] इसमें Monkey फ़्रेमवर्क शामिल होना चाहिए. साथ ही, इसे ऐप्लिकेशन के इस्तेमाल के लिए उपलब्ध कराना चाहिए.
-
SysTrace
- [C-0-9] यह ज़रूरी है कि डिवाइस, Android SDK में दिए गए दस्तावेज़ के मुताबिक, systrace टूल के साथ काम करे. Systrace डिफ़ॉल्ट रूप से बंद होना चाहिए. साथ ही, इसे चालू करने के लिए, उपयोगकर्ता के पास एक ऐसा तरीका होना चाहिए जिसे वह आसानी से ऐक्सेस कर सके.
6.2. डेवलपर के लिए सेटिंग और टूल
Android में, डेवलपर के लिए ऐप्लिकेशन डेवलपमेंट से जुड़ी सेटिंग कॉन्फ़िगर करने की सुविधा शामिल है.
डिवाइस में सेट किए हुए सिस्टम में, डेवलपर विकल्पों के लिए एक जैसा अनुभव होना चाहिए. जैसे:
- [C-0-1] ऐप्लिकेशन डेवलपमेंट से जुड़ी सेटिंग दिखाने के लिए, android.settings.APPLICATION_DEVELOPMENT_SETTINGS इंटेंट का इस्तेमाल करना ज़रूरी है. Android के अपस्ट्रीम वर्शन में, डेवलपर के लिए सेटिंग और टूल वाला मेन्यू डिफ़ॉल्ट रूप से छिपा होता है. हालांकि, उपयोगकर्ता सेटिंग > डिवाइस के बारे में जानकारी > बिल्ड नंबर मेन्यू आइटम पर सात (7) बार दबाकर, डेवलपर के लिए सेटिंग और टूल को लॉन्च कर सकते हैं.
- [C-0-2] डेवलपर के लिए सेटिंग और टूल डिफ़ॉल्ट रूप से छिपे होने चाहिए. साथ ही, डेवलपर के लिए सेटिंग और टूल को चालू करने का तरीका उपलब्ध कराना चाहिए. इसके लिए, किसी खास अनुमति वाली सूची की ज़रूरत नहीं होनी चाहिए.
- उपयोगकर्ता की सुरक्षा से जुड़े मामलों में, ध्यान भटकने से रोकने के लिए, डेवलपर के विकल्पों वाले मेन्यू के ऐक्सेस को कुछ समय के लिए सीमित कर सकता है. इसके लिए, मेन्यू को छिपाया जा सकता है या बंद किया जा सकता है.
7. हार्डवेयर के साथ काम करने की सुविधा
अगर किसी डिवाइस में ऐसा हार्डवेयर कॉम्पोनेंट शामिल है जिसके लिए तीसरे पक्ष के डेवलपर के पास एपीआई है, तो:
- [C-0-1] डिवाइस में सेट किए गए सिस्टम के लिए, Android SDK के दस्तावेज़ में बताए गए तरीके से एपीआई लागू करना ज़रूरी है.
अगर एसडीके में मौजूद कोई एपीआई, किसी ऐसे हार्डवेयर कॉम्पोनेंट के साथ इंटरैक्ट करता है जिसे वैकल्पिक बताया गया है और डिवाइस में वह कॉम्पोनेंट मौजूद नहीं है, तो:
- [C-0-2] कॉम्पोनेंट एपीआई के लिए, क्लास की पूरी परिभाषाएं (एसडीके के दस्तावेज़ के मुताबिक) अब भी दिखनी चाहिए.
- [C-0-3] एपीआई के व्यवहार को, कुछ हद तक नो-ऑप के तौर पर लागू किया जाना चाहिए.
- [C-0-4] एपीआई के तरीकों को एसडीके के दस्तावेज़ में बताई गई जगहों पर, शून्य वैल्यू दिखानी चाहिए.
- [C-0-5] एपीआई के तरीकों को उन क्लास के लिए नो-ऑप लागू करने की सुविधा देनी होगी जहां एसडीके के दस्तावेज़ में शून्य वैल्यू की अनुमति नहीं है.
- [C-0-6] एपीआई के तरीकों से ऐसी गड़बड़ियां नहीं होनी चाहिए जिनके बारे में एसडीके के दस्तावेज़ में नहीं बताया गया है.
- [C-0-7] डिवाइसों में सेट किए गए सिस्टम के लिए, android.content.pm.PackageManager क्लास में
getSystemAvailableFeatures()औरhasSystemFeature(String)तरीकों का इस्तेमाल करके, हार्डवेयर कॉन्फ़िगरेशन की सटीक जानकारी लगातार रिपोर्ट करना ज़रूरी है. ऐसा एक ही बिल्ड फ़िंगरप्रिंट के लिए किया जाना चाहिए.
इन ज़रूरी शर्तों के लागू होने का एक सामान्य उदाहरण, टेलीफ़ोनी एपीआई है: फ़ोन के अलावा अन्य डिवाइसों पर भी, इन एपीआई को नो-ऑप के तौर पर लागू किया जाना चाहिए.
7.1. डिसप्ले और ग्राफ़िक्स
Android में ऐसी सुविधाएं शामिल हैं जो डिवाइस के हिसाब से ऐप्लिकेशन ऐसेट और यूज़र इंटरफ़ेस (यूआई) लेआउट को अपने-आप अडजस्ट करती हैं. इससे यह पक्का किया जा सकता है कि तीसरे पक्ष के ऐप्लिकेशन, अलग-अलग हार्डवेयर कॉन्फ़िगरेशन पर ठीक से काम करें. डिवाइसों को इन एपीआई और व्यवहारों को सही तरीके से लागू करना होगा. इस बारे में इस सेक्शन में बताया गया है.
इस सेक्शन में बताई गई ज़रूरी शर्तों में इस्तेमाल की गई इकाइयों की परिभाषा यहां दी गई है:
- फ़िज़िकल डाइगोनल साइज़. डिसप्ले के उस हिस्से के दो विपरीत कोनों के बीच की दूरी जो रोशनी में है. यह दूरी इंच में होती है.
- डॉट्स पर इंच (डीपीआई). एक इंच की हॉरिज़ॉन्टल या वर्टिकल लाइन में मौजूद पिक्सल की संख्या. जहां डीपीआई की वैल्यू दी गई हैं वहां हॉरिज़ॉन्टल और वर्टिकल, दोनों डीपीआई वैल्यू इस रेंज में होनी चाहिए.
- आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात). स्क्रीन के लंबे डाइमेंशन के पिक्सल का अनुपात, छोटे डाइमेंशन के पिक्सल से. उदाहरण के लिए, 480x854 पिक्सल के डिसप्ले का आसपेक्ट रेशियो 854/480 = 1.779 होगा. इसे “16:9” भी कहा जा सकता है.
- डेंसिटी-इंडिपेंडेंट पिक्सल (डीपी). वर्चुअल पिक्सल यूनिट को 160 डीपीआई वाली स्क्रीन के हिसाब से नॉर्मलाइज़ किया जाता है. इसे इस तरह से कैलकुलेट किया जाता है: पिक्सल = डीपी * (डेंसिटी/160).
7.1.1. स्क्रीन कॉन्फ़िगरेशन
7.1.1.1. स्क्रीन का साइज़
Android UI फ़्रेमवर्क, अलग-अलग लॉजिकल स्क्रीन लेआउट साइज़ के साथ काम करता है. साथ ही, ऐप्लिकेशन को Configuration.screenLayout के ज़रिए, मौजूदा कॉन्फ़िगरेशन के स्क्रीन लेआउट साइज़ के बारे में क्वेरी करने की अनुमति देता है. इसके लिए, SCREENLAYOUT_SIZE_MASK और Configuration.smallestScreenWidthDp का इस्तेमाल किया जाता है.
-
[C-0-1] डिवाइस में सेट किए गए सिस्टम के लिए, Android SDK के दस्तावेज़ में बताए गए तरीके से
Configuration.screenLayoutके लिए लेआउट का सही साइज़ रिपोर्ट करना ज़रूरी है. खास तौर पर, डिवाइसों को लॉजिकल डेंसिटी-इंडिपेंडेंट पिक्सल (डीपी) के स्क्रीन डाइमेंशन की सही जानकारी देनी होगी. जैसे:- ऐसे डिवाइसों के लिए,
Configuration.uiModeको UI_MODE_TYPE_WATCH के अलावा किसी अन्य वैल्यू के तौर पर सेट किया गया है औरConfiguration.screenLayoutके लिएsmallसाइज़ की जानकारी दी गई है. ऐसे डिवाइसों का डाइमेंशन कम से कम 426 डीपी x 320 डीपी होना चाहिए. Configuration.screenLayoutके लिएnormalसाइज़ की जानकारी देने वाले डिवाइसों में, कम से कम 480 डीपी x 320 डीपी होना चाहिए.Configuration.screenLayoutके लिएlargeसाइज़ की जानकारी देने वाले डिवाइसों में, कम से कम 640 dp x 480 dp होना चाहिए.Configuration.screenLayoutके लिएxlargeसाइज़ की जानकारी देने वाले डिवाइसों में, कम से कम 960 डीपी x 720 डीपी होना चाहिए.
- ऐसे डिवाइसों के लिए,
-
[C-0-2] Android SDK के दस्तावेज़ में बताए गए तरीके के मुताबिक, AndroidManifest.xml में <
supports-screens> एट्रिब्यूट के ज़रिए, डिवाइसों को यह जानकारी देनी होगी कि ऐप्लिकेशन, स्क्रीन के किन साइज़ के साथ काम कर सकते हैं.
7.1.1.2. स्क्रीन का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात)
फ़िजिकल स्क्रीन डिसप्ले के स्क्रीन आसपेक्ट रेशियो की वैल्यू पर कोई पाबंदी नहीं है. हालाँकि, लॉजिकल डिसप्ले के स्क्रीन आसपेक्ट रेशियो को इन ज़रूरी शर्तों को पूरा करना होगा. लॉजिकल डिसप्ले में तीसरे पक्ष के ऐप्लिकेशन रेंडर किए जाते हैं. लॉजिकल डिसप्ले के स्क्रीन आसपेक्ट रेशियो का पता, view.Display एपीआई और Configuration एपीआई के ज़रिए रिपोर्ट की गई ऊँचाई और चौड़ाई की वैल्यू से लगाया जा सकता है:
-
[C-0-1]
Configuration.uiModeकोUI_MODE_TYPE_NORMALके तौर पर सेट करने वाले डिवाइसों में, आसपेक्ट रेशियो की वैल्यू 1.3333 (4:3) और 1.86 (लगभग 16:9) के बीच होनी चाहिए. हालांकि, अगर ऐप्लिकेशन इनमें से कोई एक शर्त पूरी करता है, तो उसे ज़्यादा स्ट्रेच करने के लिए तैयार माना जा सकता है:- ऐप्लिकेशन ने
android.max_aspectमेटाडेटा वैल्यू के ज़रिए यह एलान किया है कि यह बड़े आसपेक्ट रेशियो वाली स्क्रीन पर काम करता है. - ऐप्लिकेशन, android:resizeableActivity एट्रिब्यूट के ज़रिए यह जानकारी देता है कि उसका साइज़ बदला जा सकता है.
- ऐप्लिकेशन, एपीआई लेवल 24 या उसके बाद के वर्शन को टारगेट कर रहा हो. साथ ही, इसमें ऐसा
android:MaxAspectRatioशामिल न हो जो अनुमति वाले आसपेक्ट रेशियो को सीमित करता हो.
- ऐप्लिकेशन ने
-
[C-0-2]
Configuration.uiModeकोUI_MODE_TYPE_WATCHके तौर पर सेट करने वाले डिवाइसों में, आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू 1.0 (1:1) के तौर पर सेट होनी चाहिए.
7.1.1.3. स्क्रीन की सघनता
Android यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क, लॉजिकल डेंसिटी का एक स्टैंडर्ड सेट तय करता है. इससे ऐप्लिकेशन डेवलपर को ऐप्लिकेशन के संसाधनों को टारगेट करने में मदद मिलती है.
-
[C-0-1] डिफ़ॉल्ट रूप से, डिवाइसों को DENSITY_DEVICE_STABLE एपीआई के ज़रिए, इनमें से सिर्फ़ एक लॉजिकल Android फ़्रेमवर्क डेंसिटी रिपोर्ट करनी होगी. साथ ही, यह वैल्यू किसी भी समय नहीं बदलनी चाहिए. हालांकि, डिवाइस, उपयोगकर्ता के किए गए डिसप्ले कॉन्फ़िगरेशन में बदलावों के हिसाब से कोई दूसरी डेंसिटी रिपोर्ट कर सकता है. जैसे, शुरुआती बूट के बाद सेट किया गया डिसप्ले साइज़.
- 120 डीपीआई (ldpi)
- 160 डीपीआई (एमडीपीआई)
- 213 डीपीआई (टीवीडीपीआई)
- 240 डीपीआई (hdpi)
- 260 डीपीआई (260dpi)
- 280 डीपीआई (280dpi)
- 300 डीपीआई (300dpi)
- 320 dpi (xhdpi)
- 340 dpi (340dpi)
- 360 डीपीआई (360dpi)
- 400 डीपीआई (400dpi)
- 420 डीपीआई (420dpi)
- 480 dpi (xxhdpi)
- 560 डीपीआई (560dpi)
- 640 dpi (xxxhdpi)
-
डिवाइसों को, Android फ़्रेमवर्क की स्टैंडर्ड डेंसिटी तय करनी चाहिए. यह डेंसिटी, स्क्रीन की फ़िज़िकल डेंसिटी के सबसे करीब होनी चाहिए. हालांकि, ऐसा तब तक किया जाना चाहिए, जब तक लॉजिकल डेंसिटी की वजह से स्क्रीन का साइज़, कम से कम साइज़ से कम न हो जाए. अगर फ़िज़िकल डेंसिटी के सबसे करीब वाली स्टैंडर्ड Android फ़्रेमवर्क डेंसिटी की वजह से, स्क्रीन का साइज़, साथ काम करने वाली सबसे छोटी स्क्रीन के साइज़ (320 डीपी चौड़ाई) से छोटा हो जाता है, तो डिवाइसों को स्टैंडर्ड Android फ़्रेमवर्क डेंसिटी की अगली सबसे कम वैल्यू रिपोर्ट करनी चाहिए.
अगर डिवाइस के डिसप्ले साइज़ को बदलने का विकल्प उपलब्ध है, तो:
- [C-1-1] डिसप्ले साइज़ को, नेटिव डेंसिटी के 1.5 गुना से ज़्यादा नहीं बढ़ाया जाना चाहिए. साथ ही, स्क्रीन के डाइमेंशन को 320dp (संसाधन क्वालिफ़ायर sw320dp के बराबर) से कम नहीं किया जाना चाहिए. इनमें से जो भी पहले हो उसे लागू किया जाना चाहिए.
- [C-1-2] डिसप्ले साइज़ को नेटिव डेनसिटी के 0.85 गुना से कम नहीं किया जाना चाहिए.
- बेहतर इस्तेमाल और फ़ॉन्ट के साइज़ में एकरूपता बनाए रखने के लिए, हमारा सुझाव है कि नेटिव डिसप्ले के विकल्पों को ऊपर दी गई सीमाओं के मुताबिक इस तरह से स्केल किया जाए
- छोटा: 0.85x
- डिफ़ॉल्ट: 1x (नेटिव डिसप्ले स्केल)
- बड़ा: 1.15x
- ज़्यादा बड़ा: 1.3 गुना
- सबसे बड़ा 1.45x
7.1.2. डिसप्ले मेट्रिक
अगर डिवाइसों में स्क्रीन या वीडियो आउटपुट शामिल है, तो:
- [C-1-1]
android.util.DisplayMetricsएपीआई में तय की गई सभी डिसप्ले मेट्रिक के लिए, सही वैल्यू रिपोर्ट करना ज़रूरी है.
अगर डिवाइसों में एम्बेड की गई स्क्रीन या वीडियो आउटपुट शामिल नहीं है, तो:
- [C-2-1]
android.util.DisplayMetricsAPI में तय की गई सभी डिसप्ले मेट्रिक के लिए, एमुलेट किए गए डिफ़ॉल्टview.Displayको सही वैल्यू रिपोर्ट करनी होंगी.
7.1.3. स्क्रीन अभिविन्यास
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] यह बताना ज़रूरी है कि ऐप्लिकेशन, स्क्रीन के किन ओरिएंटेशन (
android.hardware.screen.portraitऔर/याandroid.hardware.screen.landscape) के साथ काम करता है. साथ ही, कम से कम एक ओरिएंटेशन के बारे में बताना ज़रूरी है. उदाहरण के लिए, लैंडस्केप मोड में फ़िक्स की गई स्क्रीन वाले डिवाइस, जैसे कि टेलीविज़न या लैपटॉप को सिर्फ़android.hardware.screen.landscapeकी वैल्यू रिपोर्ट करनी चाहिए. - [C-0-2]
android.content.res.Configuration.orientation,android.view.Display.getOrientation()या अन्य एपीआई के ज़रिए क्वेरी किए जाने पर, डिवाइस की मौजूदा ओरिएंटेशन की सही वैल्यू रिपोर्ट करनी चाहिए.
अगर डिवाइस में स्क्रीन को दोनों ओर घुमाने की सुविधा काम करती है, तो:
- [C-1-1] ऐप्लिकेशन को पोर्ट्रेट या लैंडस्केप स्क्रीन ओरिएंटेशन के हिसाब से डाइनैमिक ओरिएंटेशन की सुविधा देनी होगी. इसका मतलब है कि डिवाइस को, स्क्रीन के ओरिएंटेशन के लिए ऐप्लिकेशन के अनुरोध का पालन करना होगा.
- [C-1-2] ओरिएंटेशन बदलते समय, रिपोर्ट किए गए स्क्रीन साइज़ या डेनसिटी में बदलाव नहीं होना चाहिए.
- पोर्ट्रेट या लैंडस्केप ओरिएंटेशन को डिफ़ॉल्ट के तौर पर चुना जा सकता है.
7.1.4. 2D और 3D ग्राफ़िक ऐक्सेलरेशन
7.1.4.1 OpenGL ES
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] यह ज़रूरी है कि डिवाइस, मैनेज किए गए एपीआई (जैसे कि
GLES10.getString()तरीके से) और नेटिव एपीआई के ज़रिए, OpenGL ES के सपोर्ट किए गए वर्शन (1.1, 2.0, 3.0, 3.1, 3.2) की सही पहचान करे. - [C-0-2] यह ज़रूरी है कि डिवाइस में, OpenGL ES के हर उस वर्शन के लिए मैनेज किए गए सभी एपीआई और नेटिव एपीआई काम करते हों जिनके साथ डिवाइस काम कर सकता है.
अगर डिवाइसों में स्क्रीन या वीडियो आउटपुट शामिल है, तो:
- [C-1-1] Android SDK के दस्तावेज़ में बताए गए तरीके के मुताबिक, OpenGL ES 1.0 और 2.0, दोनों के साथ काम करना ज़रूरी है.
- [SR] OpenGL ES 3.0 सपोर्ट करने का सुझाव दिया जाता है.
- OpenGL ES 3.1 या 3.2 के साथ काम करना चाहिए.
अगर डिवाइस में सेट किए गए सिस्टम में OpenGL ES के किसी भी वर्शन का इस्तेमाल किया जाता है, तो:
- [C-2-1] उन्हें OpenGL ES के मैनेज किए गए एपीआई और नेटिव एपीआई के ज़रिए, लागू किए गए किसी भी अन्य OpenGL ES एक्सटेंशन की रिपोर्ट देनी होगी. इसके उलट, उन्हें ऐसी एक्सटेंशन स्ट्रिंग की रिपोर्ट नहीं देनी चाहिए जिनके साथ वे काम नहीं करते.
- [C-2-2]
EGL_KHR_image,EGL_KHR_image_base,EGL_ANDROID_image_native_buffer,EGL_ANDROID_get_native_client_buffer,EGL_KHR_wait_sync,EGL_KHR_get_all_proc_addresses,EGL_ANDROID_presentation_time,EGL_KHR_swap_buffers_with_damage, औरEGL_ANDROID_recordableएक्सटेंशन के साथ काम करना ज़रूरी है. - [SR] EGL_KHR_partial_update का इस्तेमाल करने का सुझाव दिया जाता है.
- उन्हें
getString()तरीके का इस्तेमाल करके, टेक्सचर कंप्रेस करने के हर उस फ़ॉर्मैट की सटीक जानकारी देनी चाहिए जो उनके डिवाइस पर काम करता है. आम तौर पर, यह जानकारी वेंडर के हिसाब से अलग-अलग होती है.
अगर डिवाइस में OpenGL ES 3.0, 3.1 या 3.2 के साथ काम करने की सुविधा उपलब्ध है, तो:
- [C-3-1] libGLESv2.so लाइब्रेरी में OpenGL ES 2.0 के फ़ंक्शन सिंबल के साथ-साथ, इन वर्शन के लिए भी फ़ंक्शन सिंबल एक्सपोर्ट करने होंगे.
अगर डिवाइस में OpenGL ES 3.2 का इस्तेमाल किया जाता है, तो:
- [C-4-1] OpenGL ES Android Extension Pack के साथ पूरी तरह से काम करना ज़रूरी है.
अगर डिवाइस में OpenGL ES Android Extension Pack की सभी सुविधाएं काम करती हैं, तो:
- [C-5-1]
android.hardware.opengles.aepफ़ीचर फ़्लैग के ज़रिए, सहायता की पहचान करना ज़रूरी है.
अगर डिवाइस में EGL_KHR_mutable_render_buffer एक्सटेंशन के लिए सहायता उपलब्ध है, तो:
- [C-6-1]
EGL_ANDROID_front_buffer_auto_refreshएक्सटेंशन के साथ काम करना भी ज़रूरी है.
7.1.4.2 Vulkan
Android में Vulkan का इस्तेमाल किया जा सकता है. यह एक क्रॉस-प्लैटफ़ॉर्म एपीआई है, जो कम ओवरहेड के साथ हाई-परफ़ॉर्मेंस 3D ग्राफ़िक उपलब्ध कराता है.
अगर डिवाइस में सेट किए गए सिस्टम में OpenGL ES 3.0 या 3.1 काम करता है, तो:
- [SR] Vulkan 1.0 के साथ काम करने की सुविधा शामिल करने का सुझाव दिया जाता है .
अगर डिवाइसों में स्क्रीन या वीडियो आउटपुट शामिल है, तो:
- Vulkan 1.0 के साथ काम करना चाहिए.
अगर डिवाइस में Vulkan 1.0 का इस्तेमाल किया जा रहा है, तो:
- [C-1-1]
android.hardware.vulkan.levelऔरandroid.hardware.vulkan.versionफ़ीचर फ़्लैग के साथ सही पूर्णांक वैल्यू रिपोर्ट करना ज़रूरी है. - [C-1-2] Vulkan नेटिव एपीआई
vkEnumeratePhysicalDevices()के लिए, कम से कम एकVkPhysicalDeviceकी गिनती करना ज़रूरी है . - [C-1-3] हर
VkPhysicalDeviceके लिए, Vulkan 1.0 एपीआई को पूरी तरह से लागू करना ज़रूरी है. - [C-1-4] ऐप्लिकेशन पैकेज की नेटिव लाइब्रेरी डायरेक्ट्री में मौजूद,
libVkLayer*.soनाम की नेटिव लाइब्रेरी में शामिल लेयर को Vulkan नेटिव एपीआईvkEnumerateInstanceLayerProperties()औरvkEnumerateDeviceLayerProperties()के ज़रिए दिखाना ज़रूरी है . - [C-1-5] ऐप्लिकेशन पैकेज के बाहर की लाइब्रेरी से मिली लेयर को नहीं गिना जाना चाहिए. इसके अलावा, Vulkan API को ट्रेस या इंटरसेप्ट करने के अन्य तरीके भी नहीं दिए जाने चाहिए. हालांकि, ऐसा तब किया जा सकता है, जब ऐप्लिकेशन में
android:debuggableएट्रिब्यूट कोtrueके तौर पर सेट किया गया हो. - [C-1-6] Vulkan नेटिव एपीआई के ज़रिए, उन सभी एक्सटेंशन स्ट्रिंग की जानकारी देनी होगी जिनके साथ वे काम करते हैं. इसके उलट, उन एक्सटेंशन स्ट्रिंग की जानकारी नहीं देनी होगी जिनके साथ वे ठीक से काम नहीं करते.
अगर डिवाइस में Vulkan 1.0 का इस्तेमाल नहीं किया जा रहा है, तो:
- [C-2-1] यह ज़रूरी है कि Vulkan के किसी भी फ़ीचर फ़्लैग (जैसे,
android.hardware.vulkan.level,android.hardware.vulkan.version) का एलान न किया गया हो. - [C-2-2] Vulkan नेटिव एपीआई
vkEnumeratePhysicalDevices()के लिए, किसी भीVkPhysicalDeviceको नहीं गिनना चाहिए.
7.1.4.3 RenderScript
- [C-0-1] डिवाइस में Android RenderScript की सुविधा होनी चाहिए. इसके बारे में Android SDK के दस्तावेज़ में बताया गया है.
7.1.4.4 2D ग्राफ़िक ऐक्सेलरेशन
Android में, ऐप्लिकेशन के लिए यह सुविधा उपलब्ध है कि वे ऐप्लिकेशन, ऐक्टिविटी, विंडो या व्यू लेवल पर 2D ग्राफ़िक के लिए हार्डवेयर ऐक्सेलरेट करने की सुविधा चालू कर सकें. इसके लिए, उन्हें मेनिफ़ेस्ट टैग android:hardwareAccelerated का इस्तेमाल करना होगा या सीधे तौर पर एपीआई कॉल करने होंगे.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] हार्डवेयर से तेज़ी लाने की सुविधा डिफ़ॉल्ट रूप से चालू होनी चाहिए. साथ ही, अगर डेवलपर android:hardwareAccelerated="false” को सेट करके या Android View API के ज़रिए हार्डवेयर से तेज़ी लाने की सुविधा को सीधे तौर पर बंद करने का अनुरोध करता है, तो उसे बंद करना ज़रूरी है.
- [C-0-2] हार्डवेयर ऐक्सेलरेटर के बारे में Android SDK के दस्तावेज़ में बताई गई बातों के मुताबिक काम करना ज़रूरी है.
Android में एक TextureView ऑब्जेक्ट शामिल होता है. इसकी मदद से डेवलपर, हार्डवेयर की मदद से तेज़ किए गए OpenGL ES टेक्सचर को सीधे तौर पर यूज़र इंटरफ़ेस (यूआई) के हाइरार्की में रेंडरिंग टारगेट के तौर पर इंटिग्रेट कर सकते हैं.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-3] TextureView API के साथ काम करना ज़रूरी है. साथ ही, अपस्ट्रीम Android के साथ काम करने के तरीके में कोई बदलाव नहीं होना चाहिए.
7.1.4.5 वाइड-गैमट डिसप्ले
अगर डिवाइस में सेट किए गए सिस्टम, Configuration.isScreenWideColorGamut() के ज़रिए वाइड-गैमट डिसप्ले के साथ काम करने का दावा करते हैं, तो:
- [C-1-1] में कलर-कैलिब्रेटेड डिसप्ले होना ज़रूरी है.
- [C-1-2] डिवाइस में ऐसा डिसप्ले होना चाहिए जिसका गैमट, CIE 1931 xyY स्पेस में sRGB कलर गैमट को पूरी तरह से कवर करता हो.
- [C-1-3] इसमें ऐसा डिसप्ले होना चाहिए जिसका गैमट, CIE 1931 xyY स्पेस में NTSC 1953 के कम से कम 90% हिस्से को कवर करता हो.
- [C-1-4] OpenGL ES 3.0, 3.1 या 3.2 के साथ काम करना ज़रूरी है. साथ ही, इसकी जानकारी सही तरीके से देनी होगी.
- [C-1-5] यह ज़रूरी है कि डिवाइस,
EGL_KHR_no_config_context,EGL_EXT_pixel_format_float,EGL_KHR_gl_colorspace,EGL_EXT_colorspace_scrgb_linear, औरEGL_GL_colorspace_display_p3एक्सटेंशन के साथ काम करने की जानकारी दे. - [SR]
GL_EXT_sRGBका इस्तेमाल करने का सुझाव दिया जाता है.
इसके उलट, अगर डिवाइसों पर वाइड-गैमट डिसप्ले की सुविधा काम नहीं करती है, तो:
- [C-2-1] CIE 1931 xyY स्पेस में, sRGB के 100% या इससे ज़्यादा हिस्से को कवर करना चाहिए. हालांकि, स्क्रीन कलर गैमट तय नहीं किया गया है.
7.1.5. लेगसी ऐप्लिकेशन कंपैटबिलिटी मोड
Android में “कंपैटिबिलिटी मोड” होता है. इसमें फ़्रेमवर्क, स्क्रीन के सामान्य साइज़ (320 डीपी चौड़ाई) वाले मोड में काम करता है. इससे उन लेगसी ऐप्लिकेशन को फ़ायदा मिलता है जिन्हें Android के पुराने वर्शन के लिए डेवलप नहीं किया गया है. ये वर्शन, स्क्रीन के साइज़ के हिसाब से काम करने की सुविधा से पहले के हैं.
7.1.6. स्क्रीन टेक्नोलॉजी
Android प्लैटफ़ॉर्म में ऐसे एपीआई शामिल होते हैं जिनकी मदद से ऐप्लिकेशन, डिसप्ले पर बेहतर ग्राफ़िक रेंडर कर सकते हैं. डिवाइसों को Android SDK के हिसाब से, इन सभी एपीआई के साथ काम करना होगा. हालांकि, इस दस्तावेज़ में खास तौर पर अनुमति दी गई हो, तो ऐसा करने की ज़रूरत नहीं है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] डिसप्ले में, 16-बिट कलर ग्राफ़िक रेंडर करने की सुविधा होनी चाहिए.
- इसमें 24-बिट कलर ग्राफ़िक वाले डिसप्ले काम करने चाहिए.
- [C-0-2] इसमें ऐसे डिसप्ले होने चाहिए जो ऐनिमेशन रेंडर कर सकें.
- [C-0-3] ऐसी डिसप्ले टेक्नोलॉजी का इस्तेमाल करना ज़रूरी है जिसका पिक्सल आसपेक्ट रेशियो (पीएआर) 0.9 और 1.15 के बीच हो. इसका मतलब है कि पिक्सल का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) स्क्वेयर (1.0) के आस-पास होना चाहिए. इसमें 10 से 15% का अंतर हो सकता है.
7.1.7. दूसरे डिसप्ले
Android में सेकंडरी डिसप्ले की सुविधा काम करती है. इससे मीडिया शेयर करने की सुविधाओं को चालू किया जा सकता है. साथ ही, बाहरी डिसप्ले को ऐक्सेस करने के लिए डेवलपर एपीआई का इस्तेमाल किया जा सकता है.
अगर डिवाइसों में, वायर, वायरलेस या एम्बेड किए गए अतिरिक्त डिसप्ले कनेक्शन के ज़रिए बाहरी डिसप्ले का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] Android SDK के दस्तावेज़ में बताए गए तरीके के मुताबिक,
DisplayManagerसिस्टम सेवा और एपीआई को लागू करना ज़रूरी है.
7.2. इनपुट डिवाइस
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] यूज़र इंटरफ़ेस (यूआई) एलिमेंट के बीच नेविगेट करने के लिए, इनपुट मैकेनिज़्म शामिल करना ज़रूरी है. जैसे, टचस्क्रीन या बिना टच किए नेविगेट करने की सुविधा.
7.2.1. कीबोर्ड
अगर डिवाइस में तीसरे पक्ष के इनपुट मेथड एडिटर (आईएमई) ऐप्लिकेशन इस्तेमाल किए जा सकते हैं, तो:
- [C-1-1]
android.software.input_methodsफ़ीचर फ़्लैग के बारे में एलान करना ज़रूरी है. - [C-1-2]
Input Management Frameworkको पूरी तरह से लागू करना ज़रूरी है - [C-1-3] में पहले से लोड किया गया सॉफ़्टवेयर कीबोर्ड होना चाहिए.
डिवाइस में लागू की गई सेटिंग: [C-0-1] डिवाइस में ऐसा हार्डवेयर कीबोर्ड शामिल नहीं होना चाहिए जो android.content.res.Configuration.keyboard में बताए गए फ़ॉर्मैट (QWERTY या 12-की) में से किसी एक से मेल न खाता हो. इसमें सॉफ़्ट कीबोर्ड को लागू करने के अतिरिक्त तरीके शामिल होने चाहिए. * इसमें हार्डवेयर कीबोर्ड शामिल हो सकता है.
7.2.2. बिना छुए नेविगेट करने की सुविधा
Android में, बिना टच किए नेविगेट करने के लिए डी-पैड, ट्रैकबॉल, और व्हील का इस्तेमाल किया जा सकता है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] android.content.res.Configuration.navigation के लिए सही वैल्यू रिपोर्ट करना ज़रूरी है.
अगर डिवाइसों में बिना छुए नेविगेट करने की सुविधा नहीं है, तो:
- [C-1-1] टेक्स्ट को चुनने और उसमें बदलाव करने के लिए, उपयोगकर्ता को यूज़र इंटरफ़ेस का एक सही विकल्प देना होगा. यह विकल्प, इनपुट मैनेजमेंट इंजन के साथ काम करता हो. Android के अपस्ट्रीम ओपन सोर्स वर्शन में, चुनने का एक ऐसा तरीका शामिल है जिसका इस्तेमाल उन डिवाइसों के साथ किया जा सकता है जिनमें नॉन-टच नेविगेशन इनपुट नहीं होते हैं.
7.2.3. मार्गदर्शक कुंजियां
होम, हाल ही के ऐप्लिकेशन, और वापस जाएं फ़ंक्शन आम तौर पर, किसी बटन या टच स्क्रीन के किसी हिस्से से इंटरैक्ट करके इस्तेमाल किए जाते हैं. ये Android नेविगेशन के लिए ज़रूरी हैं. इसलिए:
- [C-0-1] होम फ़ंक्शन उपलब्ध कराना ज़रूरी है.
- इसमें हाल ही में इस्तेमाल किए गए आइटम और वापस जाने के लिए बटन होने चाहिए.
अगर होम, हाल ही के या वापस जाएँ फ़ंक्शन उपलब्ध कराए जाते हैं, तो:
- [C-1-1] जब इनमें से कोई भी सुविधा उपलब्ध हो, तो उसे एक ही कार्रवाई (जैसे, टैप करना, दो बार क्लिक करना या जेस्चर) से ऐक्सेस किया जा सकता हो.
- [C-1-2] यह साफ़ तौर पर बताया जाना चाहिए कि किस एक कार्रवाई से हर फ़ंक्शन ट्रिगर होगा. बटन पर दिखने वाला आइकॉन, स्क्रीन के नेविगेशन बार वाले हिस्से पर सॉफ़्टवेयर का आइकॉन दिखाना या डिवाइस को पहली बार सेटअप करने के दौरान, उपयोगकर्ता को चरण-दर-चरण डेमो फ़्लो दिखाना, इस तरह के संकेत के उदाहरण हैं.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [SR] हमारा सुझाव है कि मेन्यू फ़ंक्शन के लिए इनपुट मैकेनिज़्म उपलब्ध न कराएं, क्योंकि Android 4.0 के बाद से इसे ऐक्शन बार के पक्ष में बंद कर दिया गया है.
अगर डिवाइसों में मेन्यू फ़ंक्शन उपलब्ध है, तो:
- [C-2-1] जब ऐक्शन ओवरफ़्लो मेन्यू पॉप-अप खाली न हो और ऐक्शन बार दिख रहा हो, तब ऐक्शन ओवरफ़्लो बटन दिखना चाहिए.
- [C-2-2] कार्रवाई बार में मौजूद ओवरफ़्लो बटन को चुनने पर दिखने वाले ऐक्शन ओवरफ़्लो पॉप-अप की जगह में बदलाव नहीं करना चाहिए. हालांकि, मेन्यू फ़ंक्शन को चुनने पर दिखने वाले ऐक्शन ओवरफ़्लो पॉप-अप को स्क्रीन पर बदली गई जगह पर रेंडर किया जा सकता है.
अगर डिवाइसों में मेन्यू फ़ंक्शन उपलब्ध नहीं है, तो पुराने वर्शन के साथ काम करने की सुविधा के लिए, उन्हें ये काम करने होंगे: * [C-3-1] जब targetSdkVersion की वैल्यू 10 से कम हो, तब उन्हें ऐप्लिकेशन के लिए मेन्यू फ़ंक्शन उपलब्ध कराना होगा. इसके लिए, वे फ़िज़िकल बटन, सॉफ़्टवेयर की या जेस्चर का इस्तेमाल कर सकते हैं. यह मेन्यू फ़ंक्शन तब तक ऐक्सेस किया जा सकता है, जब तक इसे अन्य नेविगेशन फ़ंक्शन के साथ न छिपाया गया हो.
अगर डिवाइसों में सहायता फ़ंक्शन उपलब्ध है, तो: [C-4-1] जब नेविगेशन के अन्य बटन ऐक्सेस किए जा सकते हों, तब सहायता फ़ंक्शन को एक ही ऐक्शन (जैसे, टैप करना, दो बार क्लिक करना या जेस्चर) से ऐक्सेस किया जा सकता हो. [SR] इस इंटरैक्शन के लिए, होम फ़ंक्शन पर देर तक दबाकर रखने की सुविधा का इस्तेमाल करने का सुझाव दिया जाता है.
अगर डिवाइसों में नेविगेशन बटन दिखाने के लिए, स्क्रीन के अलग हिस्से का इस्तेमाल किया जाता है, तो:
- [C-5-1] नेविगेशन कुंजियों को स्क्रीन के ऐसे हिस्से का इस्तेमाल करना चाहिए जो ऐप्लिकेशन के लिए उपलब्ध न हो. साथ ही, उन्हें स्क्रीन के उस हिस्से को धुंधला नहीं करना चाहिए या उसमें किसी तरह की रुकावट नहीं डालनी चाहिए जो ऐप्लिकेशन के लिए उपलब्ध है.
- [C-5-2] ऐप्लिकेशन के लिए, डिसप्ले का वह हिस्सा उपलब्ध कराना ज़रूरी है जो सेक्शन 7.1.1 में बताई गई ज़रूरी शर्तों को पूरा करता हो.
- [C-5-3]
View.setSystemUiVisibility()एपीआई के तरीके से, ऐप्लिकेशन की ओर से सेट किए गए फ़्लैग का पालन करना ज़रूरी है, ताकि स्क्रीन के इस अलग हिस्से (नेविगेशन बार) को एसडीके में बताए गए तरीके से छिपाया जा सके.
7.2.4. टचस्क्रीन इनपुट
Android में, कई तरह के पॉइंटर इनपुट सिस्टम काम करते हैं. जैसे, टचस्क्रीन, टच पैड, और फ़ेक टच इनपुट डिवाइस. टचस्क्रीन वाले डिवाइसों पर लागू होने वाली सुविधाओं को इस तरह से डिसप्ले किया जाता है कि उपयोगकर्ता को ऐसा लगे कि वह सीधे तौर पर स्क्रीन पर मौजूद आइटम में बदलाव कर रहा है. उपयोगकर्ता सीधे तौर पर स्क्रीन को छू रहा है. इसलिए, सिस्टम को यह बताने के लिए किसी अतिरिक्त अफ़ोर्डेंस की ज़रूरत नहीं होती कि किन ऑब्जेक्ट में बदलाव किया जा रहा है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें किसी तरह का पॉइंटर इनपुट सिस्टम (माउस जैसा या टच) होना चाहिए.
- पूरी तरह से अलग-अलग ट्रैक किए गए पॉइंटर के साथ काम करना चाहिए.
अगर डिवाइसों में टचस्क्रीन (सिंगल-टच या इससे बेहतर) शामिल है, तो:
- [C-1-1]
Configuration.touchscreenएपीआई फ़ील्ड के लिए,TOUCHSCREEN_FINGERकी जानकारी देना ज़रूरी है. - [C-1-2]
android.hardware.touchscreenऔरandroid.hardware.faketouchफ़ीचर फ़्लैग की जानकारी देना ज़रूरी है
अगर डिवाइसों में ऐसी टचस्क्रीन शामिल है जो एक से ज़्यादा टच को ट्रैक कर सकती है, तो:
- [C-2-1] डिवाइस पर मौजूद टचस्क्रीन के टाइप के हिसाब से, सही फ़ीचर फ़्लैग
android.hardware.touchscreen.multitouch,android.hardware.touchscreen.multitouch.distinct,android.hardware.touchscreen.multitouch.jazzhandरिपोर्ट करना ज़रूरी है.
अगर डिवाइस में टचस्क्रीन नहीं है और सिर्फ़ पॉइंटर डिवाइस का इस्तेमाल किया जाता है, तो सेक्शन 7.2.5 में बताई गई फ़ेक टच की ज़रूरी शर्तों को पूरा करने वाले डिवाइसों के लिए:
- [C-3-1]
android.hardware.touchscreenसे शुरू होने वाले किसी भी फ़ीचर फ़्लैग की जानकारी नहीं देनी चाहिए. साथ ही, सिर्फ़android.hardware.faketouchकी जानकारी देनी चाहिए.
7.2.5. फ़र्ज़ी टच इनपुट
नकली टच वाला इंटरफ़ेस, उपयोगकर्ता को इनपुट सिस्टम उपलब्ध कराता है. यह सिस्टम, टचस्क्रीन की कुछ सुविधाओं के जैसा होता है. उदाहरण के लिए, माउस या रिमोट कंट्रोल से स्क्रीन पर कर्सर को घुमाने पर, टच करने जैसा अनुभव मिलता है. हालांकि, इसके लिए उपयोगकर्ता को पहले पॉइंट करना या फ़ोकस करना होता है. इसके बाद, क्लिक करना होता है. माउस, ट्रैकपैड, जायरोस्कोप पर आधारित एयर माउस, जायरो-पॉइंटर, जॉयस्टिक, और मल्टी-टच ट्रैकपैड जैसे कई इनपुट डिवाइसों पर, नकली टच इंटरैक्शन की सुविधा काम कर सकती है. Android में android.hardware.faketouch कॉन्स्टेंट की सुविधा शामिल है. यह सुविधा, माउस या ट्रैकपैड जैसे हाई-फ़िडेलिटी नॉन-टच (पॉइंटर पर आधारित) इनपुट डिवाइस से जुड़ी है. यह टच-आधारित इनपुट (इसमें बुनियादी जेस्चर सपोर्ट भी शामिल है) को सही तरीके से इम्यूलेट कर सकता है. इससे पता चलता है कि डिवाइस, टचस्क्रीन की सुविधा के इम्यूलेट किए गए सबसेट के साथ काम करता है.
अगर डिवाइसों में टचस्क्रीन की सुविधा शामिल नहीं है, लेकिन उनमें कोई अन्य पॉइंटर इनपुट सिस्टम शामिल है और वे उसे उपलब्ध कराना चाहते हैं, तो:
android.hardware.faketouchफ़ीचर फ़्लैग के लिए सहायता का एलान करना चाहिए.
अगर डिवाइस में सेट किए गए सिस्टम में android.hardware.faketouch का इस्तेमाल किया जाता है, तो:
- [C-1-1] पॉइंटर की जगह की स्क्रीन पर X और Y की सटीक पोज़िशन की जानकारी देनी होगी. साथ ही, स्क्रीन पर विज़ुअल पॉइंटर दिखाना होगा.
- [C-1-2] टच इवेंट की जानकारी देते समय, ऐक्शन कोड का इस्तेमाल करना ज़रूरी है. इससे यह पता चलता है कि स्क्रीन पर पॉइंटर के नीचे या ऊपर जाने पर क्या बदलाव हुआ.
- [C-1-3] स्क्रीन पर मौजूद किसी ऑब्जेक्ट पर पॉइंटर को नीचे और ऊपर ले जाने की सुविधा होनी चाहिए. इससे उपयोगकर्ता, स्क्रीन पर मौजूद किसी ऑब्जेक्ट पर टैप करने की कार्रवाई को दोहरा सकते हैं.
- [C-1-4] इसमें, स्क्रीन पर मौजूद किसी ऑब्जेक्ट पर, एक तय समय के अंदर पॉइंटर को नीचे ले जाने, ऊपर ले जाने, नीचे ले जाने, और फिर ऊपर ले जाने की सुविधा होनी चाहिए. इससे लोगों को स्क्रीन पर मौजूद किसी ऑब्जेक्ट पर दो बार टैप करने की सुविधा मिलती है.
- [C-1-5] स्क्रीन पर किसी भी पॉइंट पर पॉइंटर डाउन करने की सुविधा होनी चाहिए. साथ ही, स्क्रीन पर किसी भी पॉइंट पर पॉइंटर को ले जाने और फिर पॉइंटर अप करने की सुविधा होनी चाहिए. इससे उपयोगकर्ता, टच ड्रैग की सुविधा का इस्तेमाल कर पाएंगे.
- [C-1-6] इसमें पॉइंटर डाउन करने की सुविधा होनी चाहिए. साथ ही, उपयोगकर्ताओं को ऑब्जेक्ट को स्क्रीन पर किसी दूसरी जगह पर तेज़ी से ले जाने और फिर स्क्रीन पर पॉइंटर अप करने की सुविधा मिलनी चाहिए. इससे उपयोगकर्ता, स्क्रीन पर किसी ऑब्जेक्ट को फ़्लिंग कर सकते हैं.
- [C-1-7]
Configuration.touchscreenएपीआई फ़ील्ड के लिए,TOUCHSCREEN_NOTOUCHकी जानकारी देना ज़रूरी है.
अगर डिवाइस में सेट किए गए सिस्टम में android.hardware.faketouch.multitouch.distinct का इस्तेमाल किया जाता है, तो:
- [C-2-1]
android.hardware.faketouchके साथ काम करने की सुविधा का एलान करना ज़रूरी है. - [C-2-2] में, दो या उससे ज़्यादा इंडिपेंडेंट पॉइंटर इनपुट को अलग-अलग ट्रैक करने की सुविधा होनी चाहिए.
अगर डिवाइस में सेट किए गए सिस्टम में android.hardware.faketouch.multitouch.jazzhand का इस्तेमाल किया जाता है, तो:
- [C-3-1]
android.hardware.faketouchके साथ काम करने की जानकारी देना ज़रूरी है. - [C-3-2] इसमें पांच (उंगलियों के हाथ को ट्रैक करना) या इससे ज़्यादा पॉइंटर इनपुट को पूरी तरह से अलग-अलग ट्रैक करने की सुविधा होनी चाहिए.
7.2.6. गेम कंट्रोलर की सुविधा
7.2.6.1. बटन मैपिंग
अगर डिवाइसों में android.hardware.gamepad सुविधा वाला फ़्लैग चालू है, तो: [C-1-1] डिवाइस में कंट्रोलर एम्बेड होना चाहिए या बॉक्स में अलग से कंट्रोलर शामिल होना चाहिए. इससे नीचे दी गई टेबल में शामिल सभी इवेंट को इनपुट किया जा सकेगा. [C-1-2] HID इवेंट को, उससे जुड़े Android view.InputEvent कॉन्स्टेंट पर मैप करने की सुविधा होनी चाहिए. ये कॉन्स्टेंट, नीचे दी गई टेबल में दिए गए हैं. Android के अपस्ट्रीम वर्शन में, गेम कंट्रोलर के लिए इस सुविधा को लागू किया गया है. इससे यह ज़रूरी शर्त पूरी होती है.
| बटन | एचआईडी का इस्तेमाल2 | Android बटन |
|---|---|---|
| A1 | 0x09 0x0001 | KEYCODE_BUTTON_A (96) |
| B1 | 0x09 0x0002 | KEYCODE_BUTTON_B (97) |
| X1 | 0x09 0x0004 | KEYCODE_BUTTON_X (99) |
| Y1 | 0x09 0x0005 | KEYCODE_BUTTON_Y (100) |
|
डी-पैड में अप ऐरो वाला बटन1 डी-पैड में डाउन ऐरो वाला बटन1 |
0x01 0x00393 | AXIS_HAT_Y4 |
|
डी-पैड में लेफ़्ट ऐरो वाला बटन1 डी-पैड में राइट ऐरो वाला बटन1 |
0x01 0x00393 | AXIS_HAT_X4 |
| लेफ़्ट शोल्डर बटन1 | 0x09 0x0007 | KEYCODE_BUTTON_L1 (102) |
| राइट शोल्डर बटन1 | 0x09 0x0008 | KEYCODE_BUTTON_R1 (103) |
| लेफ़्ट स्टिक क्लिक करें1 | 0x09 0x000E | KEYCODE_BUTTON_THUMBL (106) |
| राइट स्टिक क्लिक करें1 | 0x09 0x000F | KEYCODE_BUTTON_THUMBR (107) |
| Home1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
| वापस जाएं1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
1 KeyEvent
2 ऊपर दिए गए एचआईडी इस्तेमाल के बारे में, गेम पैड सीए (0x01 0x0005) में एलान करना होगा.
3 इस इस्तेमाल में, लॉजिकल मिनिमम 0, लॉजिकल मैक्सिमम 7, फ़िज़िकल मिनिमम 0, फ़िज़िकल मैक्सिमम 315, यूनिट डिग्री में, और रिपोर्ट का साइज़ 4 होना चाहिए. लॉजिकल वैल्यू को वर्टिकल ऐक्सिस से क्लॉकवाइज़ रोटेशन के तौर पर तय किया जाता है. उदाहरण के लिए, लॉजिकल वैल्यू 0 का मतलब है कि कोई रोटेशन नहीं हुआ है और ऊपर की ओर वाला बटन दबाया गया है. वहीं, लॉजिकल वैल्यू 1 का मतलब है कि 45 डिग्री का रोटेशन हुआ है और ऊपर की ओर और बाईं ओर वाले दोनों बटन दबाए गए हैं.
| ऐनलॉग कंट्रोल1 | एचआईडी का इस्तेमाल | Android बटन |
|---|---|---|
| लेफ़्ट ट्रिगर | 0x02 0x00C5 | AXIS_LTRIGGER |
| राइट ट्रिगर | 0x02 0x00C4 | AXIS_RTRIGGER |
| लेफ़्ट जॉयस्टिक |
0x01 0x0030 0x01 0x0031 |
AXIS_X AXIS_Y |
| राइट जॉयस्टिक |
0x01 0x0032 0x01 0x0035 |
AXIS_Z AXIS_RZ |
7.2.7. रिमोट कंट्रोल
डिवाइस से जुड़ी ज़रूरी शर्तों के लिए, सेक्शन 2.3.1 देखें.
7.3. सेंसर
अगर डिवाइस में किसी खास तरह का सेंसर शामिल है और तीसरे पक्ष के डेवलपर के लिए उससे जुड़ा एपीआई उपलब्ध है, तो डिवाइस में उस एपीआई को लागू करना ज़रूरी है. इसे Android SDK के दस्तावेज़ में बताए गए तरीके के मुताबिक लागू किया जाना चाहिए. साथ ही, सेंसर के बारे में Android Open Source के दस्तावेज़ में भी इसकी जानकारी दी गई है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1]
android.content.pm.PackageManagerक्लास के हिसाब से, सेंसर के मौजूद होने या न होने की सटीक जानकारी देना ज़रूरी है. - [C-0-2] यह ज़रूरी है कि
SensorManager.getSensorList()और इसी तरह के अन्य तरीकों से, काम करने वाले सेंसर की सही सूची दिखाई जाए. - [C-0-3] सभी अन्य सेंसर एपीआई के लिए, सही तरीके से काम करना चाहिए. उदाहरण के लिए, जब ऐप्लिकेशन लिसनर रजिस्टर करने की कोशिश करें, तो ज़रूरत के हिसाब से
trueयाfalseवैल्यू वापस भेजें. साथ ही, जब संबंधित सेंसर मौजूद न हों, तो सेंसर लिसनर को कॉल न करें.
अगर डिवाइस में किसी खास तरह का सेंसर शामिल है और तीसरे पक्ष के डेवलपर के लिए उससे जुड़ा एपीआई उपलब्ध है, तो:
- [C-1-1] Android SDK के दस्तावेज़ में बताए गए हर सेंसर टाइप के लिए, इकाइयों की अंतरराष्ट्रीय प्रणाली (मेट्रिक) की वैल्यू का इस्तेमाल करके, सेंसर से जुड़ी सभी मेज़रमेंट रिपोर्ट करना ज़रूरी है.
- [C-1-2] सेंसर डेटा को 100 मिलीसेकंड की ज़्यादा से ज़्यादा देरी के साथ रिपोर्ट करना ज़रूरी है
- सेंसर के लिए, कम से कम 5 मि॰से॰ की ज़रूरी लेटेन्सी के साथ स्ट्रीम किए गए डेटा के लिए 2 * sample_time + ऐप्लिकेशन प्रोसेसर के चालू होने पर 2 * sample_time. इस देरी में, फ़िल्टर करने में लगने वाला समय शामिल नहीं है.
- [C-1-3] सेंसर के चालू होने के 400 मिलीसेकंड + 2 * sample_time के अंदर, सेंसर के पहले सैंपल की जानकारी देना ज़रूरी है. इस सैंपल के लिए, सटीकता का स्कोर 0 हो सकता है.
-
[SR] Android SDK के दस्तावेज़ में बताए गए तरीके के मुताबिक, नैनोसेकंड में इवेंट का समय रिपोर्ट करना चाहिए. इससे यह पता चलता है कि इवेंट कब हुआ और SystemClock.elapsedRealtimeNano() क्लॉक के साथ कब सिंक हुआ. मौजूदा और नए Android डिवाइसों के लिए, इन ज़रूरी शर्तों को पूरा करना बेहद ज़रूरी है. इससे वे आने वाले समय में प्लैटफ़ॉर्म के नए वर्शन पर अपग्रेड कर पाएंगे. ऐसा हो सकता है कि आने वाले समय में, यह एक ज़रूरी कॉम्पोनेंट बन जाए. सिंक करने में होने वाली गड़बड़ी 100 मिलीसेकंड से कम होनी चाहिए.
-
[C-1-4] Android SDK के दस्तावेज़ में बताए गए किसी भी एपीआई के लिए, डिवाइसों को समय-समय पर डेटा सैंपल उपलब्ध कराने होंगे. Android SDK के दस्तावेज़ में बताया गया है कि यह एपीआई, लगातार काम करने वाला सेंसर है. इन डेटा सैंपल में जिटर 3% से कम होना चाहिए. जिटर को इस तरह से तय किया जाता है: लगातार होने वाले इवेंट के बीच, रिपोर्ट किए गए टाइमस्टैंप वैल्यू के अंतर का स्टैंडर्ड डेविएशन.
-
[C-1-5] यह पक्का करना ज़रूरी है कि सेंसर इवेंट स्ट्रीम की वजह से, डिवाइस का सीपीयू निलंबित न हो या निलंबित होने के बाद चालू न हो.
- कई सेंसर चालू होने पर, बिजली की खपत, हर सेंसर की बताई गई बिजली की खपत के योग से ज़्यादा नहीं होनी चाहिए.
ऊपर दी गई सूची में सभी सेंसर शामिल नहीं हैं. Android SDK और Android Open Source Project के दस्तावेज़ों में, सेंसर के बारे में दी गई जानकारी को आधिकारिक माना जाएगा.
कुछ सेंसर टाइप कंपोज़िट होते हैं. इसका मतलब है कि उन्हें एक या एक से ज़्यादा अन्य सेंसर से मिले डेटा से बनाया जा सकता है. (उदाहरण के लिए, ओरिएंटेशन सेंसर और लीनियर ऐक्सलरेशन सेंसर.)
डिवाइस में सेट किए गए सिस्टम के लिए:
- इन सेंसर टाइप को लागू करना चाहिए, जब इनमें सेंसर टाइप में बताए गए ज़रूरी फ़िज़िकल सेंसर शामिल हों.
अगर डिवाइस में कंपोज़िट सेंसर शामिल है, तो:
- [C-2-1] सेंसर को कंपोज़िट सेंसर के बारे में Android Open Source के दस्तावेज़ में बताए गए तरीके से लागू करना ज़रूरी है.
7.3.1. एक्सलरोमीटर
- डिवाइस में 3-ऐक्सिस एक्सलरोमीटर शामिल होना चाहिए.
अगर डिवाइस में 3-ऐक्सिस एक्सलरोमीटर शामिल है, तो:
- [C-1-1] कम से कम 50 हर्ट्ज़ की फ़्रीक्वेंसी तक इवेंट रिपोर्ट करने की सुविधा होनी चाहिए.
- [C-1-2]
TYPE_ACCELEROMETERसेंसर को लागू करना और उसके बारे में जानकारी देना ज़रूरी है. - [C-1-3] Android API में दी गई जानकारी के मुताबिक, Android सेंसर कोऑर्डिनेट सिस्टम का पालन करना ज़रूरी है.
- [C-1-4] यह किसी भी ऐक्सिस पर, फ़्रीफ़ॉल से लेकर चार गुना गुरुत्वाकर्षण(4g) या इससे ज़्यादा को मेज़र करने में सक्षम होना चाहिए.
- [C-1-5] इसका रिज़ॉल्यूशन कम से कम 12 बिट का होना चाहिए.
- [C-1-6] ज़रूरी है कि स्टैंडर्ड डेविएशन 0.05 मीटर/सेकंड^ से ज़्यादा न हो. स्टैंडर्ड डेविएशन की गिनती, हर ऐक्सिस के हिसाब से की जानी चाहिए. इसके लिए, सबसे तेज़ सैंपलिंग रेट पर कम से कम तीन सेकंड की अवधि में इकट्ठा किए गए सैंपल का इस्तेमाल किया जाना चाहिए.
- [SR] को
TYPE_SIGNIFICANT_MOTIONकंपोज़िट सेंसर लागू करने का सुझाव दिया जाता है. - [SR] अगर ऑनलाइन ऐक्सिलरोमीटर कैलिब्रेशन की सुविधा उपलब्ध है, तो
TYPE_ACCELEROMETER_UNCALIBRATEDसेंसर को लागू करने का सुझाव दिया जाता है. - Android SDK के दस्तावेज़ में बताए गए तरीके के मुताबिक,
TYPE_SIGNIFICANT_MOTION,TYPE_TILT_DETECTOR,TYPE_STEP_DETECTOR,TYPE_STEP_COUNTERकंपोज़िट सेंसर लागू करने चाहिए. - कम से कम 200 हर्ट्ज़ तक के इवेंट की जानकारी देनी चाहिए.
- इसका रिज़ॉल्यूशन कम से कम 16-बिट होना चाहिए.
- डिवाइस के इस्तेमाल के दौरान, इसे कैलिब्रेट किया जाना चाहिए. ऐसा तब किया जाना चाहिए, जब डिवाइस के लाइफ़साइकल के दौरान इसकी विशेषताओं में बदलाव होता है. साथ ही, डिवाइस को रीबूट करने के दौरान, कंपनसेशन पैरामीटर को सुरक्षित रखना चाहिए.
- तापमान के हिसाब से सही होना चाहिए.
TYPE_ACCELEROMETER_UNCALIBRATEDसेंसर को भी लागू करना चाहिए.
अगर डिवाइसों में 3-ऐक्सिस एक्सलरोमीटर और TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR, TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER में से कोई भी कंपोज़िट सेंसर लागू किया गया है, तो:
- [C-2-1] इनकी बिजली की खपत का कुल योग हमेशा 4 मिलीवॉट से कम होना चाहिए.
- डिवाइस के डाइनैमिक या स्टैटिक मोड में होने पर, दोनों की वैल्यू 2 mW और 0.5 mW से कम होनी चाहिए.
अगर डिवाइस में 3-ऐक्सिस एक्सलरोमीटर और जाइरोस्कोप सेंसर शामिल हैं, तो:
- [C-3-1]
TYPE_GRAVITYऔरTYPE_LINEAR_ACCELERATIONकंपोज़िट सेंसर को लागू करना ज़रूरी है. TYPE_GAME_ROTATION_VECTORकंपोज़िट सेंसर का इस्तेमाल करना चाहिए.- [SR] मौजूदा और नए Android डिवाइसों में
TYPE_GAME_ROTATION_VECTORसेंसर को लागू करने का सुझाव दिया जाता है.
अगर डिवाइस में 3-ऐक्सिस एक्सलरोमीटर, जाइरोस्कोप सेंसर, और मैग्नेटोमीटर सेंसर शामिल हैं, तो:
- [C-4-1]
TYPE_ROTATION_VECTORकंपोज़िट सेंसर का होना ज़रूरी है.
7.3.2. मैग्नेटोमीटर
- डिवाइस में 3-ऐक्सिस मैग्नेटोमीटर (कंपास) शामिल होना चाहिए.
अगर डिवाइस में 3-ऐक्सिस मैग्नेटोमीटर शामिल है, तो:
- [C-1-1]
TYPE_MAGNETIC_FIELDसेंसर का होना ज़रूरी है. - [C-1-2] इवेंट की रिपोर्टिंग कम से कम 10 हर्ट्ज़ की फ़्रीक्वेंसी पर की जा सकती है. साथ ही, इवेंट की रिपोर्टिंग कम से कम 50 हर्ट्ज़ की फ़्रीक्वेंसी पर की जानी चाहिए.
- [C-1-3] Android API में दी गई जानकारी के मुताबिक, Android सेंसर कोऑर्डिनेट सिस्टम का पालन करना ज़रूरी है.
- [C-1-4] हर ऐक्सिस पर, सैचुरेट होने से पहले -900 µT और +900 µT के बीच मेज़रमेंट करने में सक्षम होना चाहिए.
- [C-1-5] मैग्नेटोमीटर को डाइनैमिक (करंट की वजह से पैदा होने वाले) और स्टैटिक (मैग्नेट की वजह से पैदा होने वाले) मैग्नेटिक फ़ील्ड से दूर रखकर, हार्ड आयरन ऑफ़सेट वैल्यू को 700 µT से कम होना चाहिए. साथ ही, इसकी वैल्यू 200 µT से कम होनी चाहिए.
- [C-1-6] इसका रिज़ॉल्यूशन 0.6 µT के बराबर या इससे ज़्यादा होना चाहिए.
- [C-1-7] में हार्ड आयरन बायस के ऑनलाइन कैलिब्रेशन और कंपंसेशन की सुविधा होनी चाहिए. साथ ही, डिवाइस रीबूट होने पर भी कंपंसेशन पैरामीटर बने रहने चाहिए.
- [C-1-8] में सॉफ़्ट आयरन कंपनसेशन लागू होना चाहिए. कैलिब्रेशन, डिवाइस के इस्तेमाल के दौरान या उसके प्रोडक्शन के दौरान किया जा सकता है.
- [C-1-9] इसमें स्टैंडर्ड डेविएशन होना चाहिए. इसका हिसाब, हर ऐक्सिस के हिसाब से लगाया जाता है. इसके लिए, सबसे तेज़ सैंपलिंग रेट पर कम से कम तीन सेकंड तक इकट्ठा किए गए सैंपल का इस्तेमाल किया जाता है. यह 1.5 µT से ज़्यादा नहीं होना चाहिए. इसमें स्टैंडर्ड डेविएशन 0.5 µT से ज़्यादा नहीं होना चाहिए.
TYPE_MAGNETIC_FIELD_UNCALIBRATEDसेंसर को लागू किया जाना चाहिए.- [SR] मौजूदा और नए Android डिवाइसों में
TYPE_MAGNETIC_FIELD_UNCALIBRATEDसेंसर को लागू करने का सुझाव दिया जाता है.
अगर डिवाइस में 3-ऐक्सिस मैग्नेटोमीटर, एक्सलरोमीटर सेंसर, और जाइरोस्कोप सेंसर शामिल हैं, तो:
- [C-2-1]
TYPE_ROTATION_VECTORकंपोज़िट सेंसर का होना ज़रूरी है.
अगर डिवाइस में 3-ऐक्सिस मैग्नेटोमीटर और एक्सलरोमीटर शामिल हैं, तो:
TYPE_GEOMAGNETIC_ROTATION_VECTORसेंसर को लागू किया जा सकता है.
अगर डिवाइस में 3-ऐक्सिस मैग्नेटोमीटर, एक्सलरोमीटर, और TYPE_GEOMAGNETIC_ROTATION_VECTOR सेंसर शामिल हैं, तो:
- [C-3-1] ज़रूरी है कि यह 10 mW से कम बिजली की खपत करे.
- जब सेंसर को 10 हर्ट्ज़ पर बैच मोड के लिए रजिस्टर किया जाता है, तो उसे 3 mW से कम बिजली की खपत करनी चाहिए.
7.3.3. जीपीएस
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें जीपीएस/जीएनएसएस रिसीवर शामिल होना चाहिए.
अगर डिवाइसों में जीपीएस/जीएनएसएस रिसीवर शामिल हैं और वे android.hardware.location.gps फ़ीचर फ़्लैग के ज़रिए ऐप्लिकेशन को इस सुविधा के बारे में जानकारी देते हैं, तो:
- [C-1-1]
LocationManager#requestLocationUpdateके ज़रिए अनुरोध किए जाने पर, जगह की जानकारी के आउटपुट के साथ, कम से कम 1 हर्ट्ज़ की दर से काम करना चाहिए. - [C-1-2] खुले आसमान वाली जगहों (मज़बूत सिग्नल, न के बराबर मल्टीपाथ, HDOP < 2) में, 0.5 एमबीपीएस या इससे तेज़ डेटा स्पीड वाले इंटरनेट कनेक्शन से कनेक्ट होने पर, 10 सेकंड के अंदर जगह की जानकारी का पता लगाना ज़रूरी है (पहली बार जगह की जानकारी का पता लगाने में लगने वाला समय). आम तौर पर, इस ज़रूरत को पूरा करने के लिए, किसी तरह की असिस्टेड या अनुमानित जीपीएस/जीएनएसएस तकनीक का इस्तेमाल किया जाता है. इससे जीपीएस/जीएनएसएस लॉक-ऑन टाइम को कम किया जा सकता है. सहायता डेटा में रेफ़रंस टाइम, रेफ़रंस लोकेशन, और सैटेलाइट एफ़ेमेरिस/क्लॉक शामिल होता है.
- [SR] जगह की जानकारी का पता लगाने के बाद, डिवाइस को खुले आसमान वाली जगहों में 10 सेकंड के अंदर, जगह की जानकारी का पता लगाना चाहिए. यह जानकारी, पिछली बार जगह की जानकारी मिलने के एक घंटे बाद तक की होगी. भले ही, यह अनुरोध डेटा कनेक्शन के बिना और/या डिवाइस बंद करके फिर चालू करने के बाद भेजा गया हो.
-
जगह की जानकारी का पता लगाने के बाद, खुले आसमान वाली जगहों में, जब वाहन रुका हो या उसका ऐक्सलरेशन एक मीटर प्रति सेकंड स्क्वेयर्ड से कम हो, तब:
- [C-1-3] कम से कम 95% समय में, 20 मीटर के दायरे तक जगह की जानकारी का पता लगाना और 0.5 मीटर प्रति सेकंड की स्पीड का पता लगाना ज़रूरी है.
- [C-1-4] एक ही कॉन्स्टलेशन के कम से कम आठ सैटलाइट को एक साथ ट्रैक करना और
GnssStatus.Callbackके ज़रिए उनकी जानकारी देना ज़रूरी है. - अलग-अलग कॉन्स्टलेशन के कम से कम 24 सैटलाइट एक साथ ट्रैक करने चाहिए. जैसे, जीपीएस और Glonass, Beidou, Galileo में से कोई एक.
- [C-1-5] टेस्ट एपीआई ‘getGnssYearOfHardware’ के ज़रिए, जीएनएसएस टेक्नोलॉजी जनरेशन की जानकारी देना ज़रूरी है.
- [एसआर] आपातकालीन फ़ोन कॉल के दौरान, सामान्य जीपीएस/जीएनएसएस की जगह की जानकारी देना जारी रखें.
- [एसआर] एसबीएएस को अपवाद मानकर, ट्रैक किए गए सभी कॉन्स्टलेशन (इनके बारे में GnssStatus मैसेज में बताया गया है) से जीएनएसएस के मेज़रमेंट की जानकारी दें.
- [SR] एजीसी और जीएनएसएस मेज़रमेंट की फ़्रीक्वेंसी की रिपोर्ट करें.
- [SR] हर जीपीएस लोकेशन के हिस्से के तौर पर, सभी सटीक अनुमानों के बारे में बताएं. इनमें बियरिंग, स्पीड, और वर्टिकल शामिल हैं.
- [SR] हमारा सुझाव है कि टेस्ट एपीआई
LocationManager.getGnssYearOfHardware()के ज़रिए "2016" या "2017" की जानकारी देने वाले डिवाइसों के लिए, अतिरिक्त ज़रूरी शर्तों को पूरा किया जाए.
अगर डिवाइसों में जीपीएस/जीएनएसएस रिसीवर शामिल हैं और वे android.hardware.location.gps फ़ीचर फ़्लैग के ज़रिए ऐप्लिकेशन को इस सुविधा के बारे में जानकारी देते हैं, साथ ही LocationManager.getGnssYearOfHardware() Test API "2016" या उसके बाद का साल दिखाता है, तो:
- [C-2-1] जीपीएस मेज़रमेंट मिलते ही उनकी जानकारी देना ज़रूरी है. भले ही, जीपीएस/जीएनएसएस से कैलकुलेट की गई जगह की जानकारी अब तक न दी गई हो.
- [C-2-2] जीपीएस स्यूडोरेंज और स्यूडोरेंज रेट की जानकारी देना ज़रूरी है. खुले आसमान वाली जगहों में, जगह की जानकारी का पता लगाने के बाद, जब वाहन रुका हुआ हो या 0.2 मीटर प्रति सेकंड स्क्वेयर्ड से कम ऐक्सलरेशन के साथ चल रहा हो, तब कम से कम 95% समय में, 20 मीटर के दायरे तक जगह की जानकारी और 0.2 मीटर प्रति सेकंड की स्पीड का हिसाब लगाने के लिए ये जानकारी काफ़ी होनी चाहिए.
अगर डिवाइसों में जीपीएस/जीएनएसएस रिसीवर शामिल हैं और वे android.hardware.location.gps फ़ीचर फ़्लैग के ज़रिए ऐप्लिकेशन को इस सुविधा के बारे में जानकारी देते हैं, तो:LocationManager.getGnssYearOfHardware()
- [C-3-1] आपातकालीन फ़ोन कॉल के दौरान, सामान्य जीपीएस/जीएनएसएस की जगह की जानकारी देना जारी रखना चाहिए.
- [C-3-2] एसबीएएस को अपवाद मानकर, ट्रैक किए गए सभी कॉन्स्टलेशन (इनके बारे में GnssStatus मैसेज में बताया गया है) से जीएनएसएस के मेज़रमेंट की जानकारी दी जानी चाहिए.
- [C-3-3] एजीसी और जीएनएसएस मेज़रमेंट की फ़्रीक्वेंसी के बारे में बताना ज़रूरी है.
- [C-3-4] हर जीपीएस लोकेशन के हिस्से के तौर पर, सभी सटीक अनुमानों के बारे में बताना ज़रूरी है. इनमें बियरिंग, स्पीड, और वर्टिकल शामिल हैं.
7.3.4. जाइरोस्कोप
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें जाइरोस्कोप (ऐंगल में बदलाव का सेंसर) शामिल होना चाहिए.
- इसमें जाइरोस्कोप सेंसर शामिल नहीं होना चाहिए, जब तक कि 3-ऐक्सिस एक्सलरोमीटर भी शामिल न हो.
अगर डिवाइस में जाइरोस्कोप शामिल है, तो:
- [C-1-1] कम से कम 50 हर्ट्ज़ की फ़्रीक्वेंसी तक इवेंट रिपोर्ट करने की सुविधा होनी चाहिए.
- [C-1-2]
TYPE_GYROSCOPEसेंसर को लागू करना ज़रूरी है. साथ ही,TYPE_GYROSCOPE_UNCALIBRATEDसेंसर को भी लागू किया जाना चाहिए. - [C-1-3] में, ओरिएंटेशन में होने वाले बदलावों को मेज़र करने की सुविधा होनी चाहिए. यह बदलाव, हर सेकंड में 1,000 डिग्री तक हो सकता है.
- [C-1-4] इसका रिज़ॉल्यूशन 12 बिट या इससे ज़्यादा होना चाहिए. साथ ही, इसका रिज़ॉल्यूशन 16 बिट या इससे ज़्यादा होना चाहिए.
- [C-1-5] तापमान के हिसाब से सही होना चाहिए.
- [C-1-6] इस्तेमाल के दौरान इसे कैलिब्रेट और कंपंसेट किया जाना चाहिए. साथ ही, डिवाइस को रीबूट करने पर भी कंपंसेशन पैरामीटर बने रहने चाहिए.
- [C-1-7] इसमें हर हर्ट्ज़ के हिसाब से, 1e-7 rad^2 / s^2 से ज़्यादा अंतर नहीं होना चाहिए (हर हर्ट्ज़ के हिसाब से अंतर या rad^2 / s). सैंपलिंग रेट के हिसाब से वैरियंस में बदलाव किया जा सकता है. हालांकि, यह वैल्यू से कम होना चाहिए. दूसरे शब्दों में, अगर 1 हर्ट्ज़ की सैंपलिंग दर पर गायरो के वैरिएंस को मेज़र किया जाता है, तो यह 1e-7 rad^2/s^2 से ज़्यादा नहीं होना चाहिए.
- [SR] मौजूदा और नए Android डिवाइसों में
SENSOR_TYPE_GYROSCOPE_UNCALIBRATEDसेंसर को लागू करने का सुझाव दिया जाता है. - [SR] यह सुझाव दिया जाता है कि जब डिवाइस कमरे के तापमान पर स्थिर हो, तब कैलिब्रेशन की गड़बड़ी 0.01 रेडियन/सेकंड से कम होनी चाहिए.
- कम से कम 200 हर्ट्ज़ तक के इवेंट की जानकारी देनी चाहिए.
अगर डिवाइस में जाइरोस्कोप, एक्सलरोमीटर सेंसर, और मैग्नेटोमीटर सेंसर शामिल हैं, तो:
- [C-2-1]
TYPE_ROTATION_VECTORकंपोज़िट सेंसर का होना ज़रूरी है.
अगर डिवाइस में जाइरोस्कोप और एक्सलरोमीटर सेंसर शामिल हैं, तो:
- [C-3-1]
TYPE_GRAVITYऔरTYPE_LINEAR_ACCELERATIONकंपोज़िट सेंसर को लागू करना ज़रूरी है. - [SR] मौजूदा और नए Android डिवाइसों में
TYPE_GAME_ROTATION_VECTORसेंसर को लागू करने का सुझाव दिया जाता है. TYPE_GAME_ROTATION_VECTORकंपोज़िट सेंसर का इस्तेमाल करना चाहिए.
7.3.5. बैरोमीटर
- डिवाइस में बैरोमीटर (बाहरी हवा के दबाव को मापने वाला सेंसर) शामिल होना चाहिए.
अगर डिवाइस में बैरोमीटर शामिल है, तो:
- [C-1-1]
TYPE_PRESSUREसेंसर को लागू करना और उसके बारे में जानकारी देना ज़रूरी है. - [C-1-2] को 5 हर्ट्ज़ या इससे ज़्यादा की फ़्रीक्वेंसी पर इवेंट डिलीवर करने में सक्षम होना चाहिए.
- [C-1-3] तापमान के हिसाब से सही होना चाहिए.
- [SR] 300hPa से 1100hPa की रेंज में प्रेशर मेज़रमेंट की जानकारी देने का सुझाव दिया जाता है.
- इसमें 1hPa की सटीक जानकारी होनी चाहिए.
- इसकी रिलेटिव ऐक्युरसी 20hPa रेंज में 0.12hPa होनी चाहिए. यह समुद्र तल पर ~200 मीटर के बदलाव पर ~1 मीटर की ऐक्युरसी के बराबर है.
7.3.6. Thermometer
डिवाइस में लागू किए गए सिस्टम: इनमें आस-पास के तापमान को मापने वाला थर्मामीटर (तापमान सेंसर) शामिल हो सकता है. इसमें सीपीयू का तापमान मापने वाला सेंसर शामिल किया जा सकता है, लेकिन इसे शामिल नहीं किया जाना चाहिए.
अगर डिवाइस में परिवेश का तापमान मापने वाला थर्मामीटर (तापमान सेंसर) शामिल है, तो:
- [C-1-1] इसे
SENSOR_TYPE_AMBIENT_TEMPERATUREके तौर पर तय किया जाना चाहिए. साथ ही, इससे कमरे/वाहन के केबिन के तापमान को मापा जाना चाहिए. यह तापमान डिग्री सेल्सियस में होना चाहिए. - [C-1-2] इसे
SENSOR_TYPE_TEMPERATUREके तौर पर तय करना ज़रूरी है. - [C-1-3] डिवाइस के सीपीयू का तापमान मापना ज़रूरी है.
- [C-1-4] MUST NOT measure any other temperature.
ध्यान दें कि SENSOR_TYPE_TEMPERATURE सेंसर टाइप को Android 4.0 में बंद कर दिया गया था.
7.3.7. फ़ोटोमीटर
- डिवाइस में फ़ोटोमीटर (स्क्रीन की रोशनी को अपने-आप घटाने-बढ़ाने वाला सेंसर) शामिल हो सकता है.
7.3.8. निकटता सेंसर
- डिवाइस में प्रॉक्सिमिटी सेंसर शामिल किया जा सकता है.
अगर डिवाइस में प्रॉक्सिमिटी सेंसर शामिल है, तो:
- [C-1-1] स्क्रीन की दिशा में किसी ऑब्जेक्ट की दूरी का पता लगाना ज़रूरी है. इसका मतलब है कि प्रॉक्सिमिटी सेंसर को इस तरह से ओरिएंट किया जाना चाहिए कि वह स्क्रीन के आस-पास मौजूद चीज़ों का पता लगा सके. ऐसा इसलिए, क्योंकि इस तरह के सेंसर का मुख्य मकसद, उपयोगकर्ता के इस्तेमाल किए जा रहे फ़ोन का पता लगाना होता है. अगर डिवाइस में किसी अन्य ओरिएंटेशन वाला प्रॉक्सिमिटी सेंसर शामिल है, तो उसे इस एपीआई के ज़रिए ऐक्सेस नहीं किया जाना चाहिए.
- [C-1-2] में एक बिट या इससे ज़्यादा की सटीक जानकारी होनी चाहिए.
7.3.9. हाई फ़िडेलिटी सेंसर
अगर डिवाइसों में इस सेक्शन में बताए गए अच्छी क्वालिटी के सेंसर शामिल हैं और उन्हें तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराया जाता है, तो:
- [C-1-1]
android.hardware.sensor.hifi_sensorsफ़ीचर फ़्लैग के ज़रिए, सुविधा की पहचान करना ज़रूरी है.
अगर डिवाइसों में android.hardware.sensor.hifi_sensors का एलान किया जाता है, तो:
-
[C-2-1] डिवाइस में
TYPE_ACCELEROMETERसेंसर होना ज़रूरी है. यह सेंसर:- मेज़रमेंट रेंज, कम से कम -8g और +8g के बीच होनी चाहिए.
- इसका मेज़रमेंट रिज़ॉल्यूशन कम से कम 1024 LSB/G होना चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी कम से कम 12.5 हर्ट्ज़ या इससे कम होनी चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी ज़्यादा से ज़्यादा 400 हर्ट्ज़ या इससे ज़्यादा होनी चाहिए.
- मेज़रमेंट नॉइज़ 400 uG/√Hz से ज़्यादा नहीं होना चाहिए.
- इस सेंसर के नॉन-वेक-अप फ़ॉर्म को लागू करना ज़रूरी है. साथ ही, इसमें कम से कम 3,000 सेंसर इवेंट को बफ़र करने की सुविधा होनी चाहिए.
- बैटरी की खपत 3 mW से ज़्यादा नहीं होनी चाहिए.
- इसमें 24 घंटे के स्टैटिक डेटासेट से, स्टेशनरी नॉइज़ बायस स्टेबिलिटी \<15 μg √Hz होनी चाहिए.
- तापमान के हिसाब से, इसके पूर्वाग्रह में बदलाव ≤ +/- 1 मिलीग्राम / °C होना चाहिए.
- इसमें सबसे सही फ़िट वाली लाइन की नॉन-लीनियरिटी ≤ 0.5% होनी चाहिए. साथ ही, तापमान के हिसाब से सेंसिटिविटी में बदलाव ≤ 0.03%/C° होना चाहिए.
- सेंसर के नॉइज़ इंटिग्रिटी की ज़रूरी शर्तों को पूरा करने के लिए, इसमें वाइट नॉइज़ स्पेक्ट्रम होना चाहिए.
-
[C-2-2] में
TYPE_ACCELEROMETERकी तरह ही क्वालिटी की ज़रूरी शर्तों को पूरा करने वालाTYPE_ACCELEROMETER_UNCALIBRATEDहोना चाहिए. -
[C-2-3] डिवाइस में
TYPE_GYROSCOPEसेंसर होना ज़रूरी है. यह सेंसर:- यह ज़रूरी है कि इसकी मेज़रमेंट रेंज, कम से कम -1000 और +1000 dps के बीच हो.
- इसका मेज़रमेंट रिज़ॉल्यूशन कम से कम 16 एलएसबी/डीपीएस होना चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी कम से कम 12.5 हर्ट्ज़ या इससे कम होनी चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी ज़्यादा से ज़्यादा 400 हर्ट्ज़ या इससे ज़्यादा होनी चाहिए.
- मेज़रमेंट नॉइज़ 0.014°/s/√Hz से ज़्यादा नहीं होना चाहिए.
- इसमें 24 घंटे के स्टैटिक डेटासेट से, < 0.0002 °/s √Hz की स्टेशनरी बायस स्टेबिलिटी होनी चाहिए.
- तापमान के मुकाबले, बायस में बदलाव ≤ +/- 0.05 °/ s / °C होना चाहिए.
- तापमान में ≤ 0.02% / °C के हिसाब से बदलाव होने पर, सेंसिटिविटी में बदलाव होना चाहिए.
- इसमें सबसे सही फ़िट वाली लाइन की नॉन-लीनियरिटी ≤ 0.2% होनी चाहिए.
- इसमें नॉइज़ डेंसिटी ≤ 0.007 °/s/√Hz होनी चाहिए.
- सेंसर के नॉइज़ इंटिग्रिटी की ज़रूरी शर्तों को पूरा करने के लिए, इसमें वाइट नॉइज़ स्पेक्ट्रम होना चाहिए.
- डिवाइस के स्थिर होने पर, तापमान 10 ~ 40 ℃ के बीच होने पर, कैलिब्रेशन की गड़बड़ी 0.002 रेडियन/सेकंड से कम होनी चाहिए.
-
[C-2-4] में
TYPE_GYROSCOPE_UNCALIBRATEDहोना चाहिए. इसकी क्वालिटी से जुड़ी शर्तें,TYPE_GYROSCOPEके जैसी होनी चाहिए. - [C-2-5] डिवाइस में
TYPE_GEOMAGNETIC_FIELDसेंसर होना ज़रूरी है. यह सेंसर:- इसकी मेज़रमेंट रेंज कम से कम -900 और +900 uT के बीच होनी चाहिए.
- इसका मेज़रमेंट रिज़ॉल्यूशन कम से कम 5 LSB/uT होना चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी कम से कम 5 हर्ट्ज़ या इससे कम होनी चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी ज़्यादा से ज़्यादा 50 हर्ट्ज़ या इससे ज़्यादा होनी चाहिए.
- इसमें मेज़रमेंट नॉइज़ 0.5 uT से ज़्यादा नहीं होना चाहिए.
- [C-2-6] इसमें
TYPE_MAGNETIC_FIELD_UNCALIBRATEDहोना चाहिए. इसकी क्वालिटी से जुड़ी शर्तें,TYPE_GEOMAGNETIC_FIELDके जैसी होनी चाहिए. इसके अलावा:- इस सेंसर के लिए, नॉन-वेक-अप फ़ॉर्म को लागू करना ज़रूरी है. साथ ही, इसमें कम से कम 600 सेंसर इवेंट को बफ़र करने की सुविधा होनी चाहिए.
- सेंसर के नॉइज़ इंटिग्रिटी की ज़रूरी शर्तों को पूरा करने के लिए, इसमें वाइट नॉइज़ स्पेक्ट्रम होना चाहिए.
- [C-2-7] डिवाइस में
TYPE_PRESSUREसेंसर होना ज़रूरी है. यह सेंसर:- इसका मेज़रमेंट रेंज कम से कम 300 और 1100 hPa के बीच होनी चाहिए.
- इसका मेज़रमेंट रिज़ॉल्यूशन कम से कम 80 एलएसबी/एचपीए होना चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी कम से कम 1 हर्ट्ज़ या इससे कम होनी चाहिए.
- मेज़रमेंट की फ़्रीक्वेंसी ज़्यादा से ज़्यादा 10 हर्ट्ज़ या इससे ज़्यादा होनी चाहिए.
- इसमें मेज़रमेंट नॉइज़ 2 Pa/√Hz से ज़्यादा नहीं होना चाहिए.
- इस सेंसर के लिए, नॉन-वेक-अप फ़ॉर्म को लागू करना ज़रूरी है. साथ ही, इसमें कम से कम 300 सेंसर इवेंट को बफ़र करने की सुविधा होनी चाहिए.
- बैटरी की खपत 2 mW से ज़्यादा नहीं होनी चाहिए.
- [C-2-8] डिवाइस में
TYPE_GAME_ROTATION_VECTORसेंसर होना ज़रूरी है. यह सेंसर:- इस सेंसर के लिए, नॉन-वेक-अप फ़ॉर्म को लागू करना ज़रूरी है. साथ ही, इसमें कम से कम 300 सेंसर इवेंट को बफ़र करने की सुविधा होनी चाहिए.
- बैटरी की खपत 4 mW से ज़्यादा नहीं होनी चाहिए.
- [C-2-9] डिवाइस में
TYPE_SIGNIFICANT_MOTIONसेंसर होना ज़रूरी है. यह सेंसर:- डिवाइस के स्थिर होने पर, बिजली की खपत 0.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए. वहीं, डिवाइस के मूव होने पर, बिजली की खपत 1.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए.
- [C-2-10] डिवाइस में
TYPE_STEP_DETECTORसेंसर होना चाहिए. यह सेंसर:- इस सेंसर के नॉन-वेक-अप फ़ॉर्म को लागू करना ज़रूरी है. साथ ही, इसमें कम से कम 100 सेंसर इवेंट को बफ़र करने की सुविधा होनी चाहिए.
- डिवाइस के स्थिर होने पर, बिजली की खपत 0.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए. वहीं, डिवाइस के मूव होने पर, बिजली की खपत 1.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए.
- बैटरी की खपत 4 mW से ज़्यादा नहीं होनी चाहिए.
- [C-2-11] डिवाइस में
TYPE_STEP_COUNTERसेंसर होना ज़रूरी है. यह सेंसर:- डिवाइस के स्थिर होने पर, बिजली की खपत 0.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए. वहीं, डिवाइस के मूव होने पर, बिजली की खपत 1.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए.
- [C-2-12] डिवाइस में
TILT_DETECTORसेंसर होना ज़रूरी है. यह सेंसर:- डिवाइस के स्थिर होने पर, बिजली की खपत 0.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए. वहीं, डिवाइस के मूव होने पर, बिजली की खपत 1.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए.
- [C-2-13] ऐक्सिलरोमीटर, जायरोस्कोप सेंसर, और मैग्नेटोमीटर से रिपोर्ट किए गए एक ही फ़िज़िकल इवेंट के टाइमस्टैंप के बीच 2.5 मिलीसेकंड से ज़्यादा का अंतर नहीं होना चाहिए.
- [C-2-14] जाइरोस्कोप सेंसर इवेंट के टाइमस्टैंप, कैमरा सबसिस्टम के टाइमस्टैंप के साथ मैच होने चाहिए. साथ ही, इनमें एक मिलीसेकंड से ज़्यादा का अंतर नहीं होना चाहिए.
- [C-2-15] ऐप्लिकेशन को सैंपल, पांच मिलीसेकंड के अंदर डिलीवर किए जाने चाहिए. यह समय, ऐप्लिकेशन को ऊपर दिए गए किसी भी फ़िज़िकल सेंसर पर डेटा उपलब्ध होने के समय से शुरू होता है.
- [C-2-16] जब डिवाइस स्थिर हो, तब उसकी बिजली की खपत 0.5 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए. साथ ही, जब डिवाइस चल रहा हो, तब उसकी बिजली की खपत 2.0 मि॰वॉ॰ से ज़्यादा नहीं होनी चाहिए. ऐसा तब होना चाहिए, जब इनमें से किसी भी सेंसर का कॉम्बिनेशन चालू हो:
-
SENSOR_TYPE_SIGNIFICANT_MOTION -
SENSOR_TYPE_STEP_DETECTOR -
SENSOR_TYPE_STEP_COUNTER -
SENSOR_TILT_DETECTORS
-
- [C-2-17] इसमें
TYPE_PROXIMITYसेंसर हो सकता है. हालांकि, अगर यह मौजूद है, तो इसमें कम से कम 100 सेंसर इवेंट को बफ़र करने की सुविधा होनी चाहिए.
ध्यान दें कि इस सेक्शन में बिजली की खपत से जुड़ी सभी ज़रूरी शर्तों में, ऐप्लिकेशन प्रोसेसर की बिजली की खपत शामिल नहीं है. इसमें सेंसर चेन के सभी कॉम्पोनेंट की पावर शामिल होती है. जैसे, सेंसर, सपोर्टिंग सर्किट्री, सेंसर प्रोसेसिंग सिस्टम वगैरह.
अगर डिवाइस में सेंसर को सीधे तौर पर इस्तेमाल करने की सुविधा शामिल है, तो:
- [C-3-1]
isDirectChannelTypeSupportedऔरgetHighestDirectReportRateLevelAPI के ज़रिए, डायरेक्ट चैनल टाइप और डायरेक्ट रिपोर्ट रेट लेवल के बारे में सही जानकारी देना ज़रूरी है. - [C-3-2] सेंसर डायरेक्ट चैनल की सुविधा के साथ काम करने वाले सभी सेंसर के लिए, सेंसर डायरेक्ट चैनल के दो टाइप में से कम से कम एक टाइप के साथ काम करना ज़रूरी है
-
TYPE_HARDWARE_BUFFER -
TYPE_MEMORY_FILE - इन टाइप के प्राइमरी सेंसर (नॉन-वेकअप वैरिएंट) के लिए, सेंसर डायरेक्ट चैनल के ज़रिए इवेंट रिपोर्टिंग की सुविधा काम करनी चाहिए:
-
TYPE_ACCELEROMETER -
TYPE_ACCELEROMETER_UNCALIBRATED -
TYPE_GYROSCOPE -
TYPE_GYROSCOPE_UNCALIBRATED -
TYPE_MAGNETIC_FIELD -
TYPE_MAGNETIC_FIELD_UNCALIBRATED
7.3.10. फ़िंगरप्रिंट सेंसर
अगर डिवाइस में सुरक्षित लॉक स्क्रीन की सुविधा शामिल है, तो:
- डिवाइस में फ़िंगरप्रिंट सेंसर होना चाहिए.
अगर डिवाइसों में फ़िंगरप्रिंट सेंसर शामिल है और यह सेंसर तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध है, तो:
- [C-1-1] यह ज़रूरी है कि
android.hardware.fingerprintसुविधा के साथ काम करने का एलान किया गया हो. - [C-1-2] Android SDK के दस्तावेज़ में बताए गए तरीके से, एपीआई को पूरी तरह से लागू करना ज़रूरी है.
- [C-1-3] में, गलत तरीके से स्वीकार किए जाने की दर 0.002% से ज़्यादा नहीं होनी चाहिए.
- [C-1-4] फ़िंगरप्रिंट की पुष्टि करने के लिए, पांच बार गलत तरीके से कोशिश करने के बाद, कम से कम 30 सेकंड तक कोशिशों को सीमित करना ज़रूरी है.
- [C-1-5] में हार्डवेयर से सुरक्षित कुंजी या डेटा की मदद से कीस्टोर लागू करने की सुविधा होनी चाहिए. साथ ही, फ़िंगरप्रिंट मैचिंग की प्रोसेस, ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) में या टीईई के साथ सुरक्षित चैनल वाले चिप पर होनी चाहिए.
- [C-1-6] पहचान ज़ाहिर करने वाले सभी फ़िंगरप्रिंट डेटा को एन्क्रिप्ट (सुरक्षित) किया जाना चाहिए. साथ ही, क्रिप्टोग्राफ़िक तरीके से पुष्टि की जानी चाहिए, ताकि उन्हें ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) के बाहर हासिल, पढ़ा या बदला न जा सके. इसके बारे में, Android ओपन सोर्स प्रोजेक्ट की साइट पर लागू करने के दिशा-निर्देश में बताया गया है.
- [C-1-7] डिवाइस में फ़िंगरप्रिंट जोड़ने से पहले, यह ज़रूरी है कि उपयोगकर्ता, टीईई से सुरक्षित मौजूदा डिवाइस क्रेडेंशियल (पिन/पैटर्न/पासवर्ड) की पुष्टि करे या नया डिवाइस क्रेडेंशियल जोड़े. इससे भरोसे की चेन बन जाती है. Android ओपन सोर्स प्रोजेक्ट के लागू करने से, फ़्रेमवर्क में ऐसा करने का तरीका मिलता है.
- [C-1-8] यह ज़रूरी है कि तीसरे पक्ष के ऐप्लिकेशन को, अलग-अलग फ़िंगरप्रिंट के बीच अंतर करने की अनुमति न दी जाए.
- [C-1-9] DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT फ़्लैग का पालन करना ज़रूरी है.
- [C-1-10] Android 6.0 से पहले के वर्शन से अपग्रेड करने पर, फ़िंगरप्रिंट के डेटा को सुरक्षित तरीके से माइग्रेट किया जाना चाहिए, ताकि ऊपर दी गई ज़रूरी शर्तों को पूरा किया जा सके. अगर ऐसा नहीं किया जाता है, तो डेटा को हटा दिया जाना चाहिए.
- [SR] डिवाइस पर मेज़र किए गए फ़र्ज़ी अस्वीकार किए जाने की दर 10% से कम होनी चाहिए.
- [एसआर] एक उंगली के लिए, फ़िंगरप्रिंट सेंसर को छूने से लेकर स्क्रीन अनलॉक होने तक, एक सेकंड से कम समय लगना चाहिए. ऐसा करना बेहद ज़रूरी है.
- Android ओपन सोर्स प्रोजेक्ट में दिए गए Android फ़िंगरप्रिंट आइकॉन का इस्तेमाल करना चाहिए.
7.3.11. सिर्फ़ Android Automotive के लिए सेंसर
वाहन से जुड़े सेंसर के बारे में android.car.CarSensorManager API में बताया गया है.
7.3.11.1. मौजूदा गियर
डिवाइस से जुड़ी ज़रूरी शर्तों के लिए, सेक्शन 2.5.1 देखें.
7.3.11.2. दिन रात मोड
डिवाइस से जुड़ी ज़रूरी शर्तों के लिए, सेक्शन 2.5.1 देखें.
7.3.11.3. ड्राइविंग स्टेटस
डिवाइस से जुड़ी ज़रूरी शर्तों के लिए, सेक्शन 2.5.1 देखें.
7.3.11.4. पहिए की रफ़्तार
डिवाइस से जुड़ी ज़रूरी शर्तों के लिए, सेक्शन 2.5.1 देखें.
7.3.12. पोज़ सेंसर
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें छह डिग्री ऑफ़ फ़्रीडम वाले पोज़ सेंसर की सुविधा हो सकती है.
अगर डिवाइस में 6 डिग्री ऑफ़ फ़्रीडम के साथ पोज़ सेंसर काम करता है, तो:
- [C-1-1]
TYPE_POSE_6DOFसेंसर को लागू करना और उसके बारे में जानकारी देना ज़रूरी है. - [C-1-2] को सिर्फ़ रोटेशन वेक्टर से ज़्यादा सटीक होना चाहिए.
7.4. डेटा कनेक्टिविटी
7.4.1. टेलीफ़ोनी
Android API और इस दस्तावेज़ में इस्तेमाल किया गया “टेलीफ़ोनी” शब्द, खास तौर पर GSM या CDMA नेटवर्क के ज़रिए वॉइस कॉल करने और एसएमएस भेजने से जुड़े हार्डवेयर के लिए इस्तेमाल किया जाता है. ऐसा हो सकता है कि ये वॉइस कॉल पैकेट-स्विच किए गए हों या न किए गए हों. हालांकि, Android के लिए इन्हें किसी भी डेटा कनेक्टिविटी से अलग माना जाता है. इस कनेक्टिविटी को एक ही नेटवर्क का इस्तेमाल करके लागू किया जा सकता है. दूसरे शब्दों में कहें, तो Android की “टेलीफ़ोनी” सुविधा और एपीआई का इस्तेमाल सिर्फ़ वॉइस कॉल और एसएमएस के लिए किया जाता है. उदाहरण के लिए, ऐसे डिवाइसों को टेलीफ़ोनी डिवाइस नहीं माना जाता है जिन पर कॉल नहीं किए जा सकते या एसएमएस नहीं भेजे/पाए जा सकते. भले ही, वे डेटा कनेक्टिविटी के लिए सेल्युलर नेटवर्क का इस्तेमाल करते हों.
- Android का इस्तेमाल उन डिवाइसों पर किया जा सकता है जिनमें टेलीफ़ोनी हार्डवेयर शामिल नहीं है. इसका मतलब है कि Android, फ़ोन के अलावा अन्य डिवाइसों के साथ भी काम करता है.
अगर डिवाइस में जीएसएम या सीडीएमए टेलीफ़ोनी की सुविधा शामिल है, तो:
- [C-1-1] टेक्नोलॉजी के हिसाब से,
android.hardware.telephonyफ़ीचर फ़्लैग और अन्य सब-फ़ीचर फ़्लैग के बारे में एलान करना ज़रूरी है. - [C-1-2] उस टेक्नोलॉजी के लिए, एपीआई की पूरी सुविधा लागू करनी होगी.
अगर डिवाइसों में टेलीफ़ोनी हार्डवेयर शामिल नहीं है, तो:
- [C-2-1] पूरे एपीआई को नो-ऑप्स के तौर पर लागू करना ज़रूरी है.
7.4.1.1. नंबर ब्लॉक करने की सुविधा के साथ काम करने वाले डिवाइस
अगर डिवाइस में सेट किए गए सिस्टम, android.hardware.telephony feature की रिपोर्ट देते हैं, तो:
- [C-1-1] MUST include number blocking support
- [C-1-2] एसडीके के दस्तावेज़ में बताए गए तरीके के मुताबिक,
BlockedNumberContractऔर उससे जुड़े एपीआई को पूरी तरह से लागू करना ज़रूरी है. - [C-1-3] ऐप्लिकेशन के साथ किसी भी तरह की बातचीत किए बिना, 'BlockedNumberProvider' में मौजूद किसी फ़ोन नंबर से आने वाले सभी कॉल और मैसेज ब्लॉक किए जाने चाहिए. हालांकि, एसडीके के दस्तावेज़ में बताए गए तरीके से, नंबर ब्लॉक करने की सुविधा को कुछ समय के लिए बंद किया जा सकता है.
- [C-1-4] ब्लॉक किए गए कॉल के लिए, कॉल लॉग की जानकारी देने वाली कंपनी को जानकारी नहीं भेजनी चाहिए.
- [C-1-5] ब्लॉक किए गए मैसेज के लिए, टेलीफ़ोनी की सेवा देने वाली कंपनी को नहीं लिखना चाहिए.
- [C-1-6] ऐप्लिकेशन में, ब्लॉक किए गए नंबर मैनेज करने के लिए यूज़र इंटरफ़ेस (यूआई) होना चाहिए. यह यूज़र इंटरफ़ेस (यूआई),
TelecomManager.createManageBlockedNumbersIntent()तरीके से मिले इंटेंट के साथ खुलता है. - [C-1-7] दूसरे क्रम के उपयोगकर्ताओं को, डिवाइस पर ब्लॉक किए गए नंबर देखने या उनमें बदलाव करने की अनुमति नहीं देनी चाहिए. ऐसा इसलिए, क्योंकि Android प्लैटफ़ॉर्म यह मानता है कि डिवाइस पर टेलीफ़ोनी सेवाओं का पूरा कंट्रोल, प्राथमिक उपयोगकर्ता के पास होता है. सेकंडरी उपयोगकर्ताओं के लिए, ब्लॉक करने से जुड़ा पूरा यूज़र इंटरफ़ेस (यूआई) छिपा होना चाहिए. साथ ही, ब्लॉक किए गए लोगों की सूची का पालन किया जाना चाहिए.
- जब कोई डिवाइस Android 7.0 पर अपडेट होता है, तो ब्लॉक किए गए नंबरों को सेवा देने वाली कंपनी के पास माइग्रेट करना चाहिए.
7.4.2. आईईईई 802.11 (वाई-फ़ाई)
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें 802.11 के एक या उससे ज़्यादा फ़ॉर्मैट के लिए सहायता शामिल होनी चाहिए.
अगर डिवाइसों में 802.11 के साथ काम करने की सुविधा शामिल है और तीसरे पक्ष के ऐप्लिकेशन के लिए इस सुविधा को उपलब्ध कराया जाता है, तो:
- [C-1-1] इससे जुड़े Android API को लागू करना ज़रूरी है.
- [C-1-2] हार्डवेयर फ़ीचर फ़्लैग
android.hardware.wifiकी जानकारी देना ज़रूरी है. - [C-1-3] एसडीके के दस्तावेज़ में बताए गए तरीके से, मल्टीकास्ट एपीआई को लागू करना ज़रूरी है.
- [C-1-4] मल्टीकास्ट डीएनएस (एमडीएनएस) का इस्तेमाल किया जा सकता है. साथ ही, डिवाइस के चालू रहने के दौरान, एमडीएनएस पैकेट (224.0.0.251) को फ़िल्टर नहीं किया जाना चाहिए. जैसे:
- भले ही, स्क्रीन चालू न हो.
- Android TV डिवाइसों में, स्टैंडबाय मोड में होने पर भी ऐसा होता है.
- जब एसटीए डिसकनेक्ट हो, तब हर स्कैन की शुरुआत में प्रोब रिक्वेस्ट के एमएसी पते और क्रम संख्या को बदलना ज़रूरी है.
- एक स्कैन के दौरान भेजे गए प्रोब रिक्वेस्ट फ़्रेम के हर ग्रुप को एक ही एमएसी पते का इस्तेमाल करना चाहिए. स्कैन के बीच में एमएसी पता नहीं बदलना चाहिए.
- प्रोब रिक्वेस्ट फ़्रेम की क्रम संख्या, स्कैन के दौरान सामान्य रूप से क्रम में बढ़ती रहनी चाहिए
- किसी स्कैन की आखिरी प्रोब रिक्वेस्ट और अगले स्कैन की पहली प्रोब रिक्वेस्ट के बीच में क्रम संख्या को बदलते रहना चाहिए
- एसटीए के डिसकनेक्ट होने पर, जांच के अनुरोध वाले फ़्रेम में सिर्फ़ ये जानकारी वाले एलिमेंट शामिल होने चाहिए:
- SSID पैरामीटर सेट (0)
- DS पैरामीटर सेट (3)
7.4.2.1. Wi-Fi Direct
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें वाई-फ़ाई डायरेक्ट (वाई-फ़ाई पीयर-टू-पीयर) की सुविधा होनी चाहिए.
अगर डिवाइस में वाई-फ़ाई डायरेक्ट की सुविधा काम करती है, तो:
- [C-1-1] एसडीके के दस्तावेज़ में बताए गए तरीके के मुताबिक, Android API को लागू करना ज़रूरी है.
- [C-1-2] हार्डवेयर की सुविधा
android.hardware.wifi.directके बारे में जानकारी देना ज़रूरी है. - [C-1-3] यह ज़रूरी है कि यह डिवाइस, वाई-फ़ाई की सामान्य सुविधा के साथ काम करता हो.
- इसमें वाई-फ़ाई और वाई-फ़ाई डायरेक्ट, दोनों एक साथ काम करने चाहिए.
7.4.2.2. वाई-फ़ाई टनल वाले डायरेक्ट लिंक का सेटअप
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें Android SDK के दस्तावेज़ में बताए गए तरीके से, Wi-Fi टनल वाले डायरेक्ट लिंक सेटअप (टीडीएलएस) की सुविधा शामिल होनी चाहिए.
अगर डिवाइस में टीडीलएस की सुविधा काम करती है और WiFiManager API के ज़रिए टीडीलएस चालू किया गया है, तो:
- [C-1-1]
WifiManager.isTdlsSupportedके ज़रिए, TDLS के साथ काम करने की जानकारी देना ज़रूरी है. - टीडीएलएस का इस्तेमाल सिर्फ़ तब करना चाहिए, जब ऐसा करना मुमकिन हो और फ़ायदेमंद हो.
- इसमें कुछ अनुमानित जानकारी होनी चाहिए. साथ ही, अगर इसकी परफ़ॉर्मेंस वाई-फ़ाई ऐक्सेस पॉइंट से कनेक्ट करने पर बेहतर हो सकती है, तो इसमें टीडीएलएस का इस्तेमाल नहीं किया जाना चाहिए.
7.4.2.3. Wi-Fi Aware
डिवाइस में सेट किए गए सिस्टम के लिए:
- Wi-Fi Aware के साथ काम करना चाहिए.
अगर डिवाइसों में Wi-Fi Aware की सुविधा काम करती है और तीसरे पक्ष के ऐप्लिकेशन के लिए यह सुविधा उपलब्ध है, तो:
- [C-1-1] एसडीके के दस्तावेज़ में बताए गए तरीके के मुताबिक,
WifiAwareManagerएपीआई लागू करना ज़रूरी है. - [C-1-2]
android.hardware.wifi.awareफ़ीचर फ़्लैग के बारे में एलान करना ज़रूरी है. - [C-1-3] यह ज़रूरी है कि डिवाइस, वाई-फ़ाई और Wi-Fi Aware की सुविधाओं को एक साथ इस्तेमाल करने की अनुमति देता हो.
- [C-1-4] यह ज़रूरी है कि डिवाइस, वाई-फ़ाई अवेयर मैनेजमेंट इंटरफ़ेस के पते को 30 मिनट से ज़्यादा के अंतराल पर और वाई-फ़ाई अवेयर के चालू होने पर, रैंडमाइज़ करे.
7.4.2.4. वाई-फ़ाई पासपॉइंट
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें Wi-Fi Passpoint की सुविधा होनी चाहिए.
अगर डिवाइस में वाई-फ़ाई पासपॉइंट की सुविधा काम करती है, तो:
- [C-1-1] एसडीके के दस्तावेज़ में बताए गए तरीके के मुताबिक, Passpoint से जुड़े
WifiManagerएपीआई लागू करने होंगे. - [C-1-2] डिवाइस में IEEE 802.11u स्टैंडर्ड का इस्तेमाल किया जाना चाहिए. खास तौर पर, नेटवर्क डिस्कवरी और नेटवर्क चुनने से जुड़े स्टैंडर्ड का इस्तेमाल किया जाना चाहिए. जैसे, जेनेरिक एडवर्टाइज़मेंट सर्विस (जीएएस) और ऐक्सेस नेटवर्क क्वेरी प्रोटोकॉल (एएनक्यूपी).
इसके उलट, अगर डिवाइस में वाई-फ़ाई Passpoint की सुविधा काम नहीं करती है, तो:
- [C-2-1] Passpoint से जुड़े
WifiManagerएपीआई को लागू करने पर,UnsupportedOperationExceptionथ्रो करना ज़रूरी है.
7.4.3. ब्लूटूथ
अगर डिवाइस में ब्लूटूथ ऑडियो प्रोफ़ाइल की सुविधा काम करती है, तो:
- इसमें अडवांस ऑडियो कोडेक और ब्लूटूथ ऑडियो कोडेक (जैसे कि LDAC) काम करने चाहिए.
अगर डिवाइसों में android.hardware.vr.high_performance सुविधा का एलान किया जाता है, तो:
- [C-1-1] इनमें ब्लूटूथ 4.2 और ब्लूटूथ स्मार्ट डेटा लेंथ एक्सटेंशन काम करना चाहिए.
Android में ब्लूटूथ और ब्लूटूथ लो एनर्जी की सुविधा काम करती है.
अगर डिवाइस में ब्लूटूथ और ब्लूटूथ लो एनर्जी (एलई) की सुविधा काम करती है, तो:
- [C-2-1] यह ज़रूरी है कि प्लैटफ़ॉर्म की काम की सुविधाओं (क्रमशः
android.hardware.bluetoothऔरandroid.hardware.bluetooth_le) के बारे में एलान किया गया हो और प्लैटफ़ॉर्म के एपीआई लागू किए गए हों. - डिवाइस के लिए सही ब्लूटूथ प्रोफ़ाइलें लागू करनी चाहिए. जैसे, A2DP, AVCP, OBEX वगैरह.
अगर डिवाइस में ब्लूटूथ लो एनर्जी की सुविधा काम करती है, तो:
- [C-3-1] हार्डवेयर की सुविधा
android.hardware.bluetooth_leके बारे में एलान करना ज़रूरी है. - [C-3-2] एसडीके के दस्तावेज़ और android.bluetooth में बताए गए तरीके से, GATT (जेनेरिक एट्रिब्यूट प्रोफ़ाइल) पर आधारित ब्लूटूथ एपीआई चालू करना ज़रूरी है.
- [C-3-3]
BluetoothAdapter.isOffloadedFilteringSupported()के लिए सही वैल्यू रिपोर्ट करना ज़रूरी है, ताकि यह पता चल सके कि ScanFilter एपीआई क्लास के लिए फ़िल्टर करने का लॉजिक लागू किया गया है या नहीं. - [C-3-4]
BluetoothAdapter.isMultipleAdvertisementSupported()के लिए सही वैल्यू रिपोर्ट करना ज़रूरी है, ताकि यह पता चल सके कि लो एनर्जी एडवर्टाइज़िंग की सुविधा काम करती है या नहीं. - ScanFilter API लागू करते समय, फ़िल्टर करने की प्रोसेस को ब्लूटूथ चिपसेट पर ऑफ़लोड करने की सुविधा होनी चाहिए.
- डिवाइस में, ब्लूटूथ चिपसेट पर बैच स्कैनिंग की सुविधा होनी चाहिए.
-
इसमें कम से कम चार स्लॉट के साथ एक से ज़्यादा विज्ञापन दिखाने की सुविधा होनी चाहिए.
-
[SR] उपयोगकर्ता की निजता की सुरक्षा के लिए, यह सुझाव दिया जाता है कि हल किए जा सकने वाले निजी पते (आरपीए) के टाइम आउट को 15 मिनट से ज़्यादा न रखें. साथ ही, टाइम आउट होने पर पते को बदल दें.
7.4.4. नियर-फ़ील्ड कम्यूनिकेशन
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें नियर-फ़ील्ड कम्यूनिकेशन (एनएफ़सी) के लिए, ट्रांसीवर और उससे जुड़ा हार्डवेयर शामिल होना चाहिए.
- [C-0-1]
android.nfc.NdefMessageऔरandroid.nfc.NdefRecordएपीआई को लागू करना ज़रूरी है. भले ही, इनमें एनएफ़सी की सुविधा काम न करती हो याandroid.hardware.nfcसुविधा का एलान न किया गया हो. ऐसा इसलिए, क्योंकि क्लास, प्रोटोकॉल से अलग डेटा प्रज़ेंटेशन फ़ॉर्मैट को दिखाती हैं.
अगर डिवाइसों में NFC हार्डवेयर शामिल है और इसे तीसरे पक्ष के ऐप्लिकेशन के लिए उपलब्ध कराने का प्लान है, तो:
- [C-1-1]
android.content.pm.PackageManager.hasSystemFeature()तरीके से,android.hardware.nfcसुविधा के बारे में जानकारी देना ज़रूरी है. - इनमें, एनएफ़सी के इन स्टैंडर्ड के ज़रिए, एनडीईएफ़ मैसेज पढ़ने और लिखने की सुविधा होनी चाहिए:
- [C-1-2] यह डिवाइस, एनएफ़सी फ़ोरम के रीडर/राइटर के तौर पर काम कर सकता हो. इसके लिए, एनएफ़सी फ़ोरम की तकनीकी जानकारी NFCForum-TS-DigitalProtocol-1.0 में बताए गए एनएफ़सी स्टैंडर्ड का इस्तेमाल किया जाता है:
- NfCA (ISO14443-3A)
- NfCB (ISO14443-3B)
- NfcF (JIS X 6319-4)
- IsoDep (ISO 14443-4)
- NFC फ़ोरम के टैग टाइप 1, 2, 3, 4, 5 (NFC फ़ोरम के हिसाब से)
-
[SR] यह सुझाव दिया जाता है कि डिवाइस में, एनएफ़सी के इन स्टैंडर्ड के ज़रिए एनडीईएफ़ मैसेज और रॉ डेटा को पढ़ने और लिखने की सुविधा हो. ध्यान दें कि हालांकि, एनएफ़सी के मानकों को 'बेहद ज़रूरी' के तौर पर बताया गया है, लेकिन आने वाले समय में, साथ काम करने की परिभाषा में इन्हें 'ज़रूरी' के तौर पर बदलने का प्लान है. इस वर्शन में इन मानकों का पालन करना ज़रूरी नहीं है. हालांकि, आने वाले वर्शन में इनका पालन करना ज़रूरी होगा. Android के इस वर्शन पर काम करने वाले मौजूदा और नए डिवाइसों को, अब इन ज़रूरी शर्तों को पूरा करने के लिए कहा गया है. इससे वे आने वाले समय में, प्लैटफ़ॉर्म के नए वर्शन पर अपग्रेड कर पाएंगे.
-
[C-1-3] में, पीयर-टू-पीयर के इन स्टैंडर्ड और प्रोटोकॉल के ज़रिए डेटा ट्रांसमिट और रिसीव करने की सुविधा होनी चाहिए:
- ISO 18092
- LLCP 1.2 (NFC फ़ोरम के हिसाब से तय किया गया)
- SDP 1.0 (NFC फ़ोरम के मुताबिक)
- एनडीईएफ़ पुश प्रोटोकॉल
- SNEP 1.0 (NFC फ़ोरम के मुताबिक)
- [C-1-4] इसमें Android Beam की सुविधा होनी चाहिए. साथ ही, Android Beam की सुविधा डिफ़ॉल्ट रूप से चालू होनी चाहिए.
- [C-1-5] Android Beam चालू होने या मालिकाना हक वाला कोई अन्य NFC P2p मोड चालू होने पर, Android Beam का इस्तेमाल करके डेटा भेजने और पाने की सुविधा होनी चाहिए.
- [C-1-6] SNEP डिफ़ॉल्ट सर्वर को लागू करना ज़रूरी है. डिफ़ॉल्ट एसएनईपी सर्वर को मिले मान्य एनडीईएफ़ मैसेज,
android.nfc.ACTION_NDEF_DISCOVEREDइंटेंट का इस्तेमाल करके ऐप्लिकेशन को भेजे जाने चाहिए. सेटिंग में जाकर Android Beam की सुविधा बंद करने पर, आने वाले NDEF मैसेज को भेजने की सुविधा बंद नहीं होनी चाहिए. - [C-1-7]
android.settings.NFCSHARING_SETTINGSइंटेंट का इस्तेमाल करके, एनएफ़सी शेयर करने की सेटिंग दिखाना ज़रूरी है. - [C-1-8] एनपीपी सर्वर को लागू करना ज़रूरी है. एनपीपी सर्वर को मिले मैसेज को उसी तरह से प्रोसेस किया जाना चाहिए जिस तरह से एसएनईपी के डिफ़ॉल्ट सर्वर को मिले मैसेज को प्रोसेस किया जाता है.
- [C-1-9] Android Beam चालू होने पर, SNEP क्लाइंट को लागू करना होगा. साथ ही, डिफ़ॉल्ट SNEP सर्वर को आउटबाउंड P2P NDEF भेजने की कोशिश करनी होगी. अगर कोई डिफ़ॉल्ट एसएनईपी सर्वर नहीं मिलता है, तो क्लाइंट को एनपीपी सर्वर को डेटा भेजना होगा.
- [C-1-10] फ़ोरग्राउंड गतिविधियों को
android.nfc.NfcAdapter.setNdefPushMessage,android.nfc.NfcAdapter.setNdefPushMessageCallback, औरandroid.nfc.NfcAdapter.enableForegroundNdefPushका इस्तेमाल करके, आउटबाउंड P2P NDEF मैसेज सेट करने की अनुमति देनी होगी. - आउटबाउंड P2P NDEF मैसेज भेजने से पहले, जेस्चर या स्क्रीन पर पुष्टि करने की सुविधा का इस्तेमाल करना चाहिए. जैसे, 'बीम करने के लिए छुएं'.
- [C-1-11] अगर डिवाइस पर ब्लूटूथ ऑब्जेक्ट पुश प्रोफ़ाइल काम करती है, तो एनएफ़सी कनेक्शन को ब्लूटूथ पर ट्रांसफ़र करने की सुविधा काम करनी चाहिए.
- [C-1-12]
android.nfc.NfcAdapter.setBeamPushUrisका इस्तेमाल करते समय, ब्लूटूथ पर कनेक्शन हैंडओवर करने की सुविधा काम करनी चाहिए. इसके लिए, NFC फ़ोरम के “कनेक्शन हैंडओवर वर्शन 1.2” और “NFC का इस्तेमाल करके ब्लूटूथ की सुरक्षित और आसान पेयरिंग वर्शन 1.0” स्पेसिफ़िकेशन लागू करने होंगे. इस तरह के डिवाइस में, हैंडओवर एलएलसीपी सेवा को लागू करना ज़रूरी है. इस सेवा का नाम “urn:nfc:sn:handover” होना चाहिए, ताकि एनएफ़सी पर हैंडओवर का अनुरोध/चुने गए रिकॉर्ड को बदला जा सके. साथ ही, इसमें ब्लूटूथ ऑब्जेक्ट पुश प्रोफ़ाइल का इस्तेमाल करना ज़रूरी है, ताकि ब्लूटूथ पर डेटा ट्रांसफ़र किया जा सके. लेगसी सिस्टम के साथ काम करने के लिए (Android 4.1 डिवाइसों के साथ काम करने के लिए), इस सुविधा को अब भी SNEP GET अनुरोध स्वीकार करने चाहिए. इससे NFC के ज़रिए हैंडओवर का अनुरोध/चुने गए रिकॉर्ड शेयर किए जा सकेंगे. हालांकि, कनेक्शन हैंडओवर करने के लिए, किसी भी सुविधा को एसएनईपी के GET अनुरोध नहीं भेजने चाहिए. - [C-1-13] NFC डिस्कवरी मोड में, डिवाइस के साथ काम करने वाली सभी टेक्नोलॉजी के लिए पोल करना ज़रूरी है.
- डिवाइस के चालू होने पर, एनएफ़सी डिस्कवरी मोड में होना चाहिए. साथ ही, स्क्रीन चालू होनी चाहिए और लॉक-स्क्रीन अनलॉक होनी चाहिए.
- Thinfilm NFC Barcode प्रॉडक्ट के बारकोड और यूआरएल (अगर कोड में बदला गया है) को पढ़ने में सक्षम होना चाहिए.
(ध्यान दें कि ऊपर दिए गए JIS, ISO, और NFC फ़ोरम के स्पेसिफ़िकेशन के लिए, सार्वजनिक तौर पर उपलब्ध लिंक उपलब्ध नहीं हैं.)
Android में, एनएफ़सी होस्ट कार्ड एम्युलेशन (एचसीई) मोड की सुविधा काम करती है.
अगर डिवाइस में, एचसीई (NfCA और/या NfcB के लिए) की सुविधा वाला एनएफ़सी कंट्रोलर चिपसेट शामिल है और ऐप्लिकेशन आईडी (एआईडी) राउटिंग की सुविधा काम करती है, तो:
- [C-2-1]
android.hardware.nfc.hceसुविधा के बारे में जानकारी देना ज़रूरी है. - [C-2-2] Android SDK में बताए गए NFC HCE API के साथ काम करना ज़रूरी है.
अगर डिवाइसों में NFC कंट्रोलर चिपसेट शामिल है, जो NfcF के लिए HCE की सुविधा देता है और तीसरे पक्ष के ऐप्लिकेशन के लिए इस सुविधा को लागू करता है, तो:
- [C-3-1]
android.hardware.nfc.hcefसुविधा के बारे में लगातार जानकारी देना ज़रूरी है. - [C-3-2] Android SDK में बताए गए NfcF कार्ड इम्यूलेशन एपीआई को लागू करना ज़रूरी है.
अगर डिवाइस में, इस सेक्शन में बताई गई सामान्य एनएफ़सी की सुविधा शामिल है और रीडर/राइटर की भूमिका में MIFARE टेक्नोलॉजी (MIFARE Classic, MIFARE Ultralight, MIFARE Classic पर NDEF) काम करती है, तो:
- [C-4-1] Android SDK के दस्तावेज़ में बताए गए Android API लागू करने ज़रूरी हैं.
- [C-4-2]
android.content.pm.PackageManager.hasSystemFeature() तरीके से,com.nxp.mifareसुविधा के बारे में बताना ज़रूरी है. ध्यान दें कि यह Android की स्टैंडर्ड सुविधा नहीं है. इसलिए, यहandroid.content.pm.PackageManagerक्लास में कॉन्स्टेंट के तौर पर नहीं दिखती.
7.4.5. नेटवर्क की कम से कम क्षमता
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] डिवाइस में, एक या उससे ज़्यादा तरह के डेटा नेटवर्किंग की सुविधा होनी चाहिए. खास तौर पर, डिवाइस में कम से कम एक ऐसा डेटा स्टैंडर्ड होना चाहिए जो 200Kbit/sec या इससे ज़्यादा की स्पीड से डेटा ट्रांसफ़र कर सके. इस ज़रूरी शर्त को पूरा करने वाली टेक्नोलॉजी के उदाहरणों में EDGE, HSPA, EV-DO, 802.11g, Ethernet, Bluetooth PAN वगैरह शामिल हैं.
- [C-0-2] इसमें IPv6 नेटवर्किंग स्टैक शामिल होना चाहिए. साथ ही, मैनेज किए गए एपीआई (जैसे,
java.net.Socketऔरjava.net.URLConnection) और नेटिव एपीआई (जैसे,AF_INET6सॉकेट) का इस्तेमाल करके, IPv6 कम्यूनिकेशन की सुविधा होनी चाहिए. - [C-0-3] IPv6 को डिफ़ॉल्ट रूप से चालू करना ज़रूरी है.
- यह पक्का करना ज़रूरी है कि आईपीवी6 कम्यूनिकेशन, आईपीवी4 की तरह ही भरोसेमंद हो. उदाहरण के लिए.
- [C-0-4] यह ज़रूरी है कि डिवाइस, डॉज़ मोड में होने पर भी IPv6 से कनेक्ट रहे.
- [C-0-5] दर सीमित करने की वजह से, डिवाइस को आईपीवी6 के साथ काम करने वाले किसी भी ऐसे नेटवर्क पर आईपीवी6 कनेक्टिविटी नहीं खोनी चाहिए जो आरए लाइफ़टाइम के तौर पर कम से कम 180 सेकंड का इस्तेमाल करता है.
- जब फ़िज़िकल नेटवर्किंग स्टैंडर्ड (जैसे, ईथरनेट) प्राइमरी डेटा कनेक्शन हो, तब कम से कम एक सामान्य वायरलेस डेटा स्टैंडर्ड, जैसे कि 802.11 (वाई-फ़ाई) के लिए भी सहायता शामिल होनी चाहिए
- डेटा कनेक्टिविटी के एक से ज़्यादा तरीके लागू कर सकता है.
IPv6 के लिए ज़रूरी सहायता का लेवल, नेटवर्क टाइप पर निर्भर करता है. इसके बारे में यहां बताया गया है:
अगर डिवाइसों में वाई-फ़ाई नेटवर्क का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] यह ज़रूरी है कि वाई-फ़ाई पर ड्यूअल-स्टैक और सिर्फ़ IPv6 ऑपरेशन काम करे.
अगर डिवाइस में ईथरनेट नेटवर्क का इस्तेमाल किया जा सकता है, तो:
- [C-2-1] ज़रूरी है कि यह इथरनेट पर ड्यूअल-स्टैक ऑपरेशन के साथ काम करता हो.
अगर डिवाइस में सेल्युलर डेटा का इस्तेमाल किया जा सकता है, तो:
- [C-3-1] जब कोई डिवाइस एक साथ एक से ज़्यादा नेटवर्क (जैसे, वाई-फ़ाई और मोबाइल डेटा) से कनेक्ट होता है, तो उसे हर नेटवर्क पर एक साथ इन ज़रूरी शर्तों को पूरा करना होगा.
- मोबाइल डेटा पर IPv6 ऑपरेशन (सिर्फ़ IPv6 और डुअल-स्टैक) काम करना चाहिए.
7.4.6. सिंक करने की सुविधा की सेटिंग
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] मास्टर ऑटो-सिंक सेटिंग डिफ़ॉल्ट रूप से चालू होनी चाहिए, ताकि
getMasterSyncAutomatically()तरीके से “true” वैल्यू मिले.
7.4.7. डेटा बचाने की सेटिंग
अगर डिवाइस में मीटर वाला कनेक्शन शामिल है, तो ये ज़रूरी हैं:
- [SR] डेटा सेवर मोड उपलब्ध कराने का सुझाव दिया जाता है.
अगर डिवाइसों में डेटा बचाने वाला मोड उपलब्ध है, तो:
- [C-1-1]
ConnectivityManagerक्लास में मौजूद सभी एपीआई के साथ काम करना ज़रूरी है. इसके बारे में एसडीके के दस्तावेज़ में बताया गया है - [C-1-2] सेटिंग में, ऐसा यूज़र इंटरफ़ेस उपलब्ध कराना ज़रूरी है जो
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGSइंटेंट को हैंडल करता हो. इससे उपयोगकर्ता, अनुमति वाली सूची में ऐप्लिकेशन जोड़ सकेंगे या सूची से ऐप्लिकेशन हटा सकेंगे.
अगर डिवाइसों में डेटा सेवर मोड की सुविधा उपलब्ध नहीं है, तो:
- [C-2-1]
ConnectivityManager.getRestrictBackgroundStatus()के लिए,RESTRICT_BACKGROUND_STATUS_DISABLEDवैल्यू रिटर्न होनी चाहिए - [C-2-2]
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGEDको ब्रॉडकास्ट नहीं करना चाहिए. - [C-2-3] में ऐसी गतिविधि होनी चाहिए जो
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGSइंटेंट को हैंडल करती हो. हालांकि, इसे नो-ऑप के तौर पर लागू किया जा सकता है.
7.5. कैमरे
अगर डिवाइसों में कम से कम एक कैमरा शामिल है, तो:
- [C-1-1]
android.hardware.camera.anyफ़ीचर फ़्लैग के बारे में एलान करना ज़रूरी है. - [C-1-2] किसी ऐप्लिकेशन के लिए, डिवाइस पर सबसे ज़्यादा रिज़ॉल्यूशन वाले कैमरा सेंसर से ली गई इमेज के साइज़ के बराबर, तीन RGBA_8888 बिटमैप एक साथ असाइन करना ज़रूरी है. ऐसा तब होना चाहिए, जब कैमरा बुनियादी तौर पर प्रीव्यू करने और फ़ोटो कैप्चर करने के लिए खुला हो.
7.5.1. रियर कैमरा
पीछे की ओर वाला कैमरा, डिवाइस के डिसप्ले के दूसरी तरफ़ होता है. इसका मतलब है कि यह डिवाइस के पीछे के सीन की इमेज लेता है. यह पारंपरिक कैमरे की तरह काम करता है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें पीछे की ओर कैमरा होना चाहिए.
अगर डिवाइसों में कम से कम एक पीछे की ओर वाला कैमरा शामिल है, तो:
- [C-1-1]
android.hardware.cameraऔरandroid.hardware.camera.anyफ़ीचर फ़्लैग की जानकारी देना ज़रूरी है. - [C-1-2] इसका रिज़ॉल्यूशन कम से कम 2 मेगापिक्सल होना चाहिए.
- कैमरा ड्राइवर में, हार्डवेयर ऑटो-फ़ोकस या सॉफ़्टवेयर ऑटो-फ़ोकस की सुविधा होनी चाहिए. यह सुविधा, ऐप्लिकेशन सॉफ़्टवेयर के लिए पारदर्शी होनी चाहिए.
- इसमें फ़िक्स्ड-फ़ोकस या ईडॉफ़ (एक्सटेंडेड डेप्थ ऑफ़ फ़ील्ड) हार्डवेयर हो सकता है.
- इसमें फ़्लैश शामिल हो सकता है.
अगर कैमरे में फ़्लैश की सुविधा है, तो:
- [C-2-1] जब तक ऐप्लिकेशन,
Camera.Parametersऑब्जेक्ट केFLASH_MODE_AUTOयाFLASH_MODE_ONएट्रिब्यूट को चालू करके फ़्लैश को साफ़ तौर पर चालू न करे, तब तक कैमरा प्रीव्यू की सुविधा परandroid.hardware.Camera.PreviewCallbackइंस्टेंस रजिस्टर होने के दौरान फ़्लैश लैंप चालू नहीं होना चाहिए. ध्यान दें कि यह पाबंदी, डिवाइस में पहले से मौजूद सिस्टम कैमरा ऐप्लिकेशन पर लागू नहीं होती. यह सिर्फ़Camera.PreviewCallbackका इस्तेमाल करने वाले तीसरे पक्ष के ऐप्लिकेशन पर लागू होती है.
7.5.2. सामने वाला कैमरा
सामने की ओर लगा कैमरा, डिवाइस की स्क्रीन वाली साइड पर होता है. आम तौर पर, इसका इस्तेमाल उपयोगकर्ता की इमेज लेने के लिए किया जाता है. जैसे, वीडियो कॉन्फ़्रेंसिंग और इसी तरह के अन्य ऐप्लिकेशन के लिए.
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें सामने की ओर कैमरा हो सकता है.
अगर डिवाइसों में कम से कम एक फ़्रंट-फ़ेसिंग कैमरा शामिल है, तो:
- [C-1-1]
android.hardware.camera.anyऔरandroid.hardware.camera.frontफ़ीचर फ़्लैग की जानकारी देना ज़रूरी है. - [C-1-2] का रिज़ॉल्यूशन कम से कम वीजीए (640x480 पिक्सल) होना चाहिए.
- [C-1-3] Camera API के लिए, फ़्रंट कैमरे को डिफ़ॉल्ट कैमरे के तौर पर इस्तेमाल नहीं किया जाना चाहिए. साथ ही, एपीआई को इस तरह कॉन्फ़िगर नहीं किया जाना चाहिए कि फ़्रंट कैमरे को डिफ़ॉल्ट रियर कैमरे के तौर पर माना जाए. भले ही, डिवाइस पर सिर्फ़ एक कैमरा हो.
- [C-1-4] जब मौजूदा ऐप्लिकेशन ने
android.hardware.Camera.setDisplayOrientation()तरीके का इस्तेमाल करके, कैमरे के डिसप्ले को घुमाने का अनुरोध किया हो, तब कैमरे की झलक को ऐप्लिकेशन के स्क्रीन की दिशा के हिसाब से, हॉरिज़ॉन्टल तौर पर मिरर किया जाना चाहिए. इसके उलट, अगर मौजूदा ऐप्लिकेशन,android.hardware.Camera.setDisplayOrientation()तरीके को कॉल करके कैमरा डिसप्ले को घुमाने का अनुरोध नहीं करता है, तो झलक को डिवाइस के डिफ़ॉल्ट हॉरिज़ॉन्टल ऐक्सिस के साथ मिरर किया जाना चाहिए. - [C-1-5] फ़ाइनल कैप्चर की गई इमेज या वीडियो स्ट्रीम, ऐप्लिकेशन के कॉल बैक या मीडिया स्टोरेज में सेव की गई इमेज या वीडियो स्ट्रीम से मिलती-जुलती नहीं होनी चाहिए.
- [C-1-6] पोस्टव्यू में दिखने वाली इमेज, कैमरा प्रीव्यू इमेज स्ट्रीम में दिखने वाली इमेज की तरह ही दिखनी चाहिए.
- इसमें सेक्शन 7.5.1 में बताई गई, पीछे की ओर लगे कैमरे के लिए उपलब्ध सुविधाएं (जैसे, ऑटो-फ़ोकस, फ़्लैश वगैरह) शामिल हो सकती हैं.
अगर डिवाइसों को उपयोगकर्ता घुमा सकता है (जैसे, ऐक्सिलरोमीटर की मदद से अपने-आप या उपयोगकर्ता के इनपुट से मैन्युअल तरीके से):
- [C-2-1] डिवाइस के मौजूदा ओरिएंटेशन के हिसाब से, कैमरे की झलक को हॉरिज़ॉन्टल तौर पर मिरर किया जाना चाहिए.
7.5.3. बाहरी कैमरा
डिवाइस में सेट किए गए सिस्टम के लिए:
- इसमें, ऐसे बाहरी कैमरे के लिए सहायता शामिल हो सकती है जो हमेशा कनेक्ट नहीं होता है.
अगर डिवाइस में बाहरी कैमरे का इस्तेमाल किया जा सकता है, तो:
- [C-1-1] प्लैटफ़ॉर्म के फ़ीचर फ़्लैग
android.hardware.camera.externalऔरandroid.hardware camera.anyके बारे में एलान करना ज़रूरी है. - [C-1-2] अगर बाहरी कैमरा यूएसबी पोर्ट से कनेक्ट होता है, तो यह ज़रूरी है कि वह यूएसबी वीडियो क्लास (यूवीसी 1.0 या इससे ज़्यादा) के साथ काम करता हो.
- इसमें MJPEG जैसे वीडियो कंप्रेस करने के तरीके इस्तेमाल किए जा सकते हैं, ताकि अच्छी क्वालिटी वाली अनकोड की गई स्ट्रीम (जैसे कि रॉ या अलग-अलग कंप्रेस की गई पिक्चर स्ट्रीम) को ट्रांसफ़र किया जा सके.
- एक से ज़्यादा कैमरे इस्तेमाल किए जा सकते हैं.
- कैमरे के आधार पर वीडियो एन्कोडिंग की सुविधा काम कर सकती है.
अगर कैमरे की मदद से वीडियो एन्कोड करने की सुविधा काम करती है, तो:
- [C-2-1] डिवाइस में एक साथ अनकोड की गई / MJPEG स्ट्रीम (QVGA या इससे ज़्यादा रिज़ॉल्यूशन) को ऐक्सेस किया जा सकता हो.
7.5.4. कैमरा API का व्यवहार
Android में, कैमरे को ऐक्सेस करने के लिए दो एपीआई पैकेज शामिल हैं. नया android.hardware.camera2 API, ऐप्लिकेशन को कैमरे का लोअर-लेवल कंट्रोल देता है. इसमें ज़ीरो-कॉपी बर्स्ट/स्ट्रीमिंग फ़्लो और एक्सपोज़र, गेन, व्हाइट बैलेंस गेन, कलर कन्वर्ज़न, नॉइज़ कम करना, शार्पनिंग वगैरह के फ़्रेम-दर-फ़्रेम कंट्रोल शामिल हैं.
Android 5.0 में, पुराने एपीआई पैकेज android.hardware.Camera को 'अब काम नहीं करता' के तौर पर मार्क किया गया है. हालांकि, यह अब भी ऐप्लिकेशन के इस्तेमाल के लिए उपलब्ध होना चाहिए. Android डिवाइसों में, इस सेक्शन और Android SDK में बताए गए तरीके से, एपीआई का इस्तेमाल जारी रहना चाहिए.
डिवाइसों को, कैमरे से जुड़े एपीआई के लिए यहां बताए गए व्यवहारों को लागू करना होगा. ऐसा सभी उपलब्ध कैमरों के लिए करना होगा. डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] जब किसी ऐप्लिकेशन ने कभी
android.hardware.Camera.Parameters.setPreviewFormat(int)को कॉल नहीं किया हो, तब ऐप्लिकेशन कॉलबैक को दिए गए झलक वाले डेटा के लिए,android.hardware.PixelFormat.YCbCr_420_SPका इस्तेमाल करना ज़रूरी है. - [C-0-2] जब कोई ऐप्लिकेशन
android.hardware.Camera.PreviewCallbackइंस्टेंस रजिस्टर करता है और सिस्टमonPreviewFrame()तरीके को कॉल करता है और पूर्वावलोकन फ़ॉर्मैट YCbCr_420_SP होता है, तोonPreviewFrame()में पास किया गया बाइट[] में मौजूद डेटा, NV21 एन्कोडिंग फ़ॉर्मैट में होना चाहिए. इसका मतलब है कि NV21 डिफ़ॉल्ट फ़ॉर्मैट होना चाहिए. - [C-0-3]
android.hardware.Cameraके लिए, सामने और पीछे वाले, दोनों कैमरों की झलक दिखाने के लिए, YV12 फ़ॉर्मैट (android.graphics.ImageFormat.YV12कॉन्स्टेंट के तौर पर दिखाया गया है) का इस्तेमाल करना ज़रूरी है. (हार्डवेयर वीडियो एन्कोडर और कैमरा, किसी भी नेटिव पिक्सल फ़ॉर्मैट का इस्तेमाल कर सकते हैं. हालांकि, डिवाइस पर YV12 में बदलने की सुविधा होनी चाहिए.) - [C-0-4]
android.hardware.camera2के लिए,android.media.ImageReaderAPI के ज़रिए आउटपुट के तौर परandroid.hardware.ImageFormat.YUV_420_888औरandroid.hardware.ImageFormat.JPEGफ़ॉर्मैट के साथ काम करना ज़रूरी है. - [C-0-5] डिवाइस में हार्डवेयर ऑटोफ़ोकस या अन्य सुविधाएं शामिल हैं या नहीं, इससे कोई फ़र्क़ नहीं पड़ता. हालांकि, Android SDK के दस्तावेज़ में शामिल पूरा Camera API लागू करना ज़रूरी है. उदाहरण के लिए, जिन कैमरों में ऑटोफ़ोकस की सुविधा नहीं होती उन्हें भी रजिस्टर किए गए सभी
android.hardware.Camera.AutoFocusCallbackइंस्टेंस को कॉल करना होगा. भले ही, यह सुविधा ऑटोफ़ोकस न करने वाले कैमरे के लिए काम की न हो. ध्यान दें कि यह सुविधा, सामने की ओर लगे कैमरों पर भी लागू होती है. उदाहरण के लिए, भले ही सामने की ओर लगे ज़्यादातर कैमरे ऑटोफ़ोकस की सुविधा के साथ काम न करते हों, लेकिन एपीआई कॉलबैक को अब भी बताए गए तरीके से “नकली” होना चाहिए. - [C-0-6]
android.hardware.Camera.Parametersक्लास में कॉन्स्टेंट के तौर पर तय किए गए हर पैरामीटर के नाम को पहचानना और उसका पालन करना ज़रूरी है. इसके उलट, डिवाइसों कोandroid.hardware.Camera.setParameters()तरीके से पास किए गए स्ट्रिंग कॉन्स्टेंट को स्वीकार नहीं करना चाहिए या उनकी पहचान नहीं करनी चाहिए. हालांकि,android.hardware.Camera.Parametersपर कॉन्स्टेंट के तौर पर दस्तावेज़ में दिए गए स्ट्रिंग कॉन्स्टेंट को स्वीकार किया जा सकता है. इसका मतलब है कि अगर हार्डवेयर अनुमति देता है, तो डिवाइसों पर लागू किए गए सभी स्टैंडर्ड कैमरा पैरामीटर काम करने चाहिए. साथ ही, कस्टम कैमरा पैरामीटर टाइप काम नहीं करने चाहिए. उदाहरण के लिए, जिन डिवाइसों में हाई डाइनैमिक रेंज (एचडीआर) इमेजिंग तकनीकों का इस्तेमाल करके इमेज कैप्चर करने की सुविधा होती है उनमें कैमरा पैरामीटरCamera.SCENE_MODE_HDRकाम करना ज़रूरी है. - [C-0-7] Android SDK में बताए गए तरीके के मुताबिक,
android.info.supportedHardwareLevelप्रॉपर्टी के साथ सहायता के सही लेवल की जानकारी देना ज़रूरी है. साथ ही, फ़्रेमवर्क के सही फ़ीचर फ़्लैग की जानकारी देना ज़रूरी है. - [C-0-8]
android.request.availableCapabilitiesप्रॉपर्टी के ज़रिए,android.hardware.camera2की अलग-अलग कैमरा क्षमताओं के बारे में एलान करना ज़रूरी है. साथ ही, सही फ़ीचर फ़्लैग के बारे में एलान करना भी ज़रूरी है. अगर इससे जुड़े किसी भी कैमरा डिवाइस पर यह सुविधा काम करती है, तो फ़ीचर फ़्लैग को तय करना ज़रूरी है. - [C-0-9] जब भी कैमरा से कोई नई फ़ोटो ली जाती है और उसे मीडिया स्टोर में जोड़ा जाता है, तब
Camera.ACTION_NEW_PICTUREइंटेंट को ब्रॉडकास्ट करना ज़रूरी है. - [C-0-10] जब भी कैमरा कोई नया वीडियो रिकॉर्ड करता है और मीडिया स्टोर में फ़ोटो की एंट्री जोड़ दी जाती है, तब
Camera.ACTION_NEW_VIDEOइंटेंट को ब्रॉडकास्ट करना ज़रूरी है.
7.5.5. कैमरे का ओरिएंटेशन
अगर डिवाइस में सामने या पीछे की ओर कैमरा लगा है, तो:
- [C-1-1] कैमरे को इस तरह से ओरिएंट किया जाना चाहिए कि कैमरे का लंबा डाइमेंशन, स्क्रीन के लंबे डाइमेंशन के साथ अलाइन हो. इसका मतलब है कि डिवाइस को लैंडस्केप ओरिएंटेशन में रखने पर, कैमरे से लैंडस्केप ओरिएंटेशन में ही इमेज कैप्चर होनी चाहिए. इससे कोई फ़र्क़ नहीं पड़ता कि डिवाइस का ओरिएंटेशन कैसा है. इसका मतलब है कि यह लैंडस्केप-प्राइमरी और पोर्ट्रेट-प्राइमरी, दोनों तरह के डिवाइसों पर लागू होता है.
7.6. डिवाइस की मेमोरी और स्टोरेज
7.6.1. कम से कम मेमोरी और स्टोरेज
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] इसमें डाउनलोड मैनेजर शामिल होना चाहिए. ऐप्लिकेशन इसका इस्तेमाल, डेटा फ़ाइलें डाउनलोड करने के लिए कर सकते हैं. साथ ही, इनमें कम से कम 100 एमबी साइज़ की अलग-अलग फ़ाइलें डाउनलोड करने की सुविधा होनी चाहिए. ये फ़ाइलें, डिफ़ॉल्ट “कैश” लोकेशन पर डाउनलोड होनी चाहिए.
7.6.2. ऐप्लिकेशन के लिए शेयर किया गया स्टोरेज
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] डिवाइस में ऐसा स्टोरेज होना चाहिए जिसे ऐप्लिकेशन के साथ शेयर किया जा सके. इसे अक्सर “शेयर किया गया बाहरी स्टोरेज”, "ऐप्लिकेशन के साथ शेयर किया गया स्टोरेज" या Linux पाथ "/sdcard" के तौर पर भी जाना जाता है.
- [C-0-2] इसे डिफ़ॉल्ट रूप से माउंट किए गए शेयर किए गए स्टोरेज के साथ कॉन्फ़िगर किया जाना चाहिए.दूसरे शब्दों में कहें, तो “आउट ऑफ़ द बॉक्स” कॉन्फ़िगर किया जाना चाहिए. भले ही, स्टोरेज को डिवाइस के स्टोरेज कॉम्पोनेंट या हटाने लायक स्टोरेज मीडियम (जैसे, सिक्योर डिजिटल कार्ड स्लॉट) पर लागू किया गया हो.
- [C-0-3] ऐप्लिकेशन को शेयर किए गए स्टोरेज को सीधे तौर पर Linux पाथ
sdcardपर माउंट करना होगा. इसके अलावा,sdcardसे लेकर माउंट पॉइंट तक Linux सिंबॉलिक लिंक शामिल करना होगा. - [C-0-4] SDK में बताए गए तरीके के मुताबिक, इस शेयर की गई मेमोरी पर
android.permission.WRITE_EXTERNAL_STORAGEअनुमति लागू करना ज़रूरी है. इसके अलावा, शेयर किए गए स्टोरेज में डेटा लिखने की अनुमति, उस ऐप्लिकेशन के पास होनी चाहिए जिसे यह अनुमति मिली है.
डिवाइस में सेट किए गए सिस्टम, ऊपर दी गई ज़रूरी शर्तों को इनमें से किसी एक तरीके से पूरा कर सकते हैं:
- उपयोगकर्ता के लिए उपलब्ध रिमूवेबल स्टोरेज, जैसे कि सिक्योर डिजिटल (एसडी) कार्ड स्लॉट.
- Android ओपन सोर्स प्रोजेक्ट (एओएसपी) में लागू की गई इंटरनल (नॉन-रीमूवेबल) स्टोरेज का एक हिस्सा.
अगर डिवाइस, ऊपर दी गई ज़रूरी शर्तों को पूरा करने के लिए, हटाने योग्य स्टोरेज का इस्तेमाल करते हैं, तो:
- [C-1-1] अगर स्लॉट में कोई स्टोरेज मीडियम नहीं डाला गया है, तो डिवाइस में एक सूचना (टोस्ट) या पॉप-अप यूज़र इंटरफ़ेस दिखाना ज़रूरी है. इससे उपयोगकर्ता को चेतावनी दी जा सके.
- [C-1-2] इसमें FAT फ़ॉर्मैट वाला स्टोरेज मीडियम (जैसे कि एसडी कार्ड) शामिल होना चाहिए. इसके अलावा, बॉक्स और खरीदारी के समय उपलब्ध अन्य सामान पर यह जानकारी दिखनी चाहिए कि स्टोरेज मीडियम को अलग से खरीदना होगा.
अगर डिवाइस, ऊपर दी गई ज़रूरी शर्तों को पूरा करने के लिए, न हटाई जा सकने वाली स्टोरेज का इस्तेमाल करते हैं, तो:
- संगठन में काम करने वालों के साथ ऐप्लिकेशन शेयर करने की सुविधा के लिए, इंटरनल ऐप्लिकेशन के शेयर किए गए स्टोरेज के एओएसपी वर्शन का इस्तेमाल करना चाहिए.
- स्टोरेज स्पेस को ऐप्लिकेशन के निजी डेटा के साथ शेयर कर सकता है.
अगर डिवाइस में शेयर किए गए स्टोरेज के कई पाथ शामिल हैं (जैसे, एसडी कार्ड का स्लॉट और डिवाइस का स्टोरेज), तो:
- [C-2-1] सिर्फ़ पहले से इंस्टॉल किए गए और खास अधिकारों वाले Android ऐप्लिकेशन को, सेकंडरी बाहरी स्टोरेज में डेटा लिखने की
WRITE_EXTERNAL_STORAGEअनुमति देनी होगी. हालांकि, ऐसा तब नहीं करना होगा, जब वे अपने पैकेज से जुड़ी डायरेक्ट्री में डेटा लिख रहे हों याACTION_OPEN_DOCUMENT_TREEइंटेंट को ट्रिगर करने पर मिलेURIमें डेटा लिख रहे हों.
अगर डिवाइस में यूएसबी पोर्ट है और वह यूएसबी पेरिफ़रल मोड के साथ काम करता है, तो:
- [C-3-1] होस्ट कंप्यूटर से, ऐप्लिकेशन के शेयर किए गए स्टोरेज में मौजूद डेटा को ऐक्सेस करने का तरीका उपलब्ध कराना ज़रूरी है.
- Android की मीडिया स्कैनर सेवा और
android.provider.MediaStoreके ज़रिए, दोनों स्टोरेज पाथ से कॉन्टेंट को साफ़ तौर पर दिखाना चाहिए. - इस ज़रूरी शर्त को पूरा करने के लिए, यूएसबी मास स्टोरेज का इस्तेमाल किया जा सकता है. हालांकि, मीडिया ट्रांसफ़र प्रोटोकॉल का इस्तेमाल करना चाहिए.
अगर डिवाइस में यूएसबी पोर्ट है, जिसमें यूएसबी पेरिफ़रल मोड है और मीडिया ट्रांसफ़र प्रोटोकॉल काम करता है, तो:
- यह रेफ़रंस Android MTP होस्ट, Android File Transfer के साथ काम करना चाहिए.
- इसे यूएसबी डिवाइस क्लास 0x00 की रिपोर्ट देनी चाहिए.
- 'एमटीपी' के यूएसबी इंटरफ़ेस का नाम रिपोर्ट करना चाहिए.
7.6.3. एडॉप्टेबल स्टोरेज
अगर डिवाइस को टीवी की तरह एक जगह पर नहीं रखा जाता है, तो डिवाइस को लागू करने के ये तरीके हैं:
- [SR] यह सुझाव दिया जाता है कि अडॉप्टेबल स्टोरेज को लंबे समय तक इस्तेमाल करने के लिए, किसी ऐसी जगह पर रखा जाए जहां वह सुरक्षित रहे. ऐसा इसलिए, क्योंकि गलती से स्टोरेज को डिस्कनेक्ट करने पर, डेटा मिट सकता है या खराब हो सकता है.
अगर हटाने लायक स्टोरेज डिवाइस का पोर्ट, लंबे समय तक एक ही जगह पर रहता है, जैसे कि बैटरी कंपार्टमेंट या अन्य सुरक्षात्मक कवर के अंदर, तो डिवाइस के लिए ये ज़रूरी शर्तें लागू होती हैं:
- [SR] एडॉप्टेबल स्टोरेज को लागू करने का सुझाव दिया जाता है.
7.7. यूएसबी
अगर डिवाइसों में यूएसबी पोर्ट है, तो:
- इसमें यूएसबी पेरिफ़ेरल मोड और यूएसबी होस्ट मोड काम करना चाहिए.
7.7.1. यूएसबी पेरिफ़ेरल मोड
अगर डिवाइस में, पेरिफ़ेरल मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [C-1-1] पोर्ट को ऐसे यूएसबी होस्ट से कनेक्ट किया जा सकता हो जिसमें स्टैंडर्ड टाइप-ए या टाइप-सी यूएसबी पोर्ट हो.
- [C-1-2]
android.os.Build.SERIALके ज़रिए, यूएसबी स्टैंडर्ड डिवाइस डिस्क्रिप्टर मेंiSerialNumberकी सही वैल्यू रिपोर्ट करना ज़रूरी है. - [C-1-3] टाइप-सी रजिस्टर के स्टैंडर्ड के मुताबिक, 1.5A और 3.0A चार्जर का पता लगाना ज़रूरी है. साथ ही, अगर वे टाइप-सी यूएसबी के साथ काम करते हैं, तो विज्ञापन में हुए बदलावों का पता लगाना ज़रूरी है.
- [SR] पोर्ट में माइक्रो-बी, माइक्रो-एबी या टाइप-सी यूएसबी फ़ॉर्म फ़ैक्टर का इस्तेमाल किया जाना चाहिए. हमारा सुझाव है कि मौजूदा और नए Android डिवाइसों पर ये ज़रूरी शर्तें पूरी की जाएं, ताकि उन्हें आने वाले समय में प्लैटफ़ॉर्म के नए वर्शन पर अपग्रेड किया जा सके.
- [एसआर] पोर्ट को डिवाइस के निचले हिस्से में होना चाहिए (नैचुरल ओरिएंटेशन के हिसाब से) या सभी ऐप्लिकेशन (होम स्क्रीन भी शामिल है) के लिए सॉफ़्टवेयर स्क्रीन रोटेशन की सुविधा चालू होनी चाहिए, ताकि डिवाइस को पोर्ट के साथ नीचे की ओर रखने पर डिसप्ले सही तरीके से दिखे. हमारा सुझाव है कि मौजूदा और नए Android डिवाइसों पर ये ज़रूरी शर्तें पूरी की जाएं, ताकि उन्हें प्लैटफ़ॉर्म के आने वाले वर्शन में अपग्रेड किया जा सके.
- [एसआर] यूएसबी बैटरी चार्जिंग स्पेसिफ़िकेशन, रिविज़न 1.2 में बताए गए तरीके के मुताबिक, एचएस चिरप और ट्रैफ़िक के दौरान 1.5 A करंट को सपोर्ट करने की सुविधा लागू करनी चाहिए. हमारा सुझाव है कि मौजूदा और नए Android डिवाइसों पर ये ज़रूरी शर्तें पूरी की जाएं, ताकि उन्हें आने वाले समय में प्लैटफ़ॉर्म के नए वर्शन पर अपग्रेड किया जा सके.
- [SR] हमारा सुझाव है कि मालिकाना हक वाली चार्जिंग की ऐसी तकनीकों का इस्तेमाल न करें जो Vbus वोल्टेज को डिफ़ॉल्ट लेवल से ज़्यादा बढ़ा देती हैं या सिंक/सोर्स की भूमिकाओं में बदलाव करती हैं. ऐसा इसलिए, क्योंकि इससे उन चार्जर या डिवाइसों के साथ इंटरऑपरेबिलिटी की समस्याएं हो सकती हैं जो यूएसबी पावर डिलीवरी की स्टैंडर्ड तकनीकों के साथ काम करते हैं. हालांकि, इसे "बेहद ज़रूरी" बताया गया है, लेकिन आने वाले समय में Android के वर्शन में, हम सभी टाइप-सी डिवाइसों के लिए यह ज़रूरी कर सकते हैं कि वे स्टैंडर्ड टाइप-सी चार्जर के साथ पूरी तरह से काम करें.
- [SR] यह सुझाव दिया जाता है कि डिवाइस में डेटा और पावर रोल स्वैपिंग के लिए पावर डिलीवरी की सुविधा काम करे. इसके लिए, डिवाइस में टाइप-सी यूएसबी और यूएसबी होस्ट मोड की सुविधा होनी चाहिए.
- इसमें ज़्यादा वोल्टेज वाली चार्जिंग के लिए, पावर डिलीवरी की सुविधा होनी चाहिए. साथ ही, डिसप्ले आउट जैसे वैकल्पिक मोड के लिए भी सहायता उपलब्ध होनी चाहिए.
- Android Open Accessory (AOA) API और स्पेसिफ़िकेशन को लागू करना चाहिए. इसके बारे में Android SDK के दस्तावेज़ में बताया गया है.
अगर डिवाइस में यूएसबी पोर्ट शामिल है और उसमें एओए स्पेसिफ़िकेशन लागू किया गया है, तो:
- [C-2-1] यह ज़रूरी है कि हार्डवेयर की सुविधा
android.hardware.usb.accessoryके साथ काम करने का एलान किया गया हो. - [C-2-2] यूएसबी मास स्टोरेज क्लास में, यूएसबी मास स्टोरेज के इंटरफ़ेस के ब्यौरे
iInterfaceस्ट्रिंग के आखिर में "android" स्ट्रिंग शामिल होनी चाहिए
7.7.2. यूएसबी होस्ट मोड
अगर डिवाइस में होस्ट मोड के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [C-1-1] Android SDK में दिए गए दस्तावेज़ के मुताबिक, Android USB होस्ट एपीआई को लागू करना ज़रूरी है. साथ ही, हार्डवेयर की सुविधा
android.hardware.usb.hostके लिए सहायता उपलब्ध कराने की जानकारी देना ज़रूरी है. - [C-1-2] MUST implement support to connect standard USB peripherals, in other words, they MUST either:
- डिवाइस में टाइप सी पोर्ट हो या डिवाइस के साथ ऐसी केबल दी गई हों जो डिवाइस के मालिकाना हक वाले पोर्ट को स्टैंडर्ड यूएसबी टाइप-सी पोर्ट (यूएसबी टाइप-सी डिवाइस) में बदलती हों.
- डिवाइस में टाइप ए पोर्ट हो या डिवाइस के साथ ऐसी केबल दी गई हो जो डिवाइस के मालिकाना हक वाले पोर्ट को स्टैंडर्ड यूएसबी टाइप-ए पोर्ट में बदलती हो.
- डिवाइस में माइक्रो-एबी पोर्ट होना चाहिए. साथ ही, डिवाइस के साथ एक ऐसी केबल भी होनी चाहिए जो स्टैंडर्ड टाइप-ए पोर्ट के साथ काम करती हो.
- [C-1-3] इसे यूएसबी टाइप ए या माइक्रो-एबी पोर्ट को टाइप-सी पोर्ट (रिसेप्टेकल) में बदलने वाले अडैप्टर के साथ शिप नहीं किया जाना चाहिए.
- [SR] Android SDK के दस्तावेज़ में बताए गए तरीके से, यूएसबी ऑडियो क्लास को लागू करने का सुझाव दिया जाता है.
- होस्ट मोड में कनेक्ट किए गए यूएसबी सहायक डिवाइस को चार्ज करने की सुविधा होनी चाहिए. साथ ही, यूएसबी टाइप-सी कनेक्टर के लिए, यूएसबी टाइप-सी केबल और कनेक्टर स्पेसिफ़िकेशन, वर्शन 1.2 के टर्मिनेशन पैरामीटर सेक्शन में बताए गए तरीके के मुताबिक, कम से कम 1.5 ऐंपियर का सोर्स करंट उपलब्ध कराना चाहिए. इसके अलावा, माइक्रो-एबी कनेक्टर के लिए, यूएसबी बैटरी चार्जिंग स्पेसिफ़िकेशन, वर्शन 1.2 में बताए गए तरीके के मुताबिक, चार्जिंग डाउनस्ट्रीम पोर्ट(सीडीपी) के आउटपुट करंट की रेंज का इस्तेमाल करना चाहिए.
- इसमें यूएसबी टाइप-सी स्टैंडर्ड लागू होने चाहिए और यह उनके साथ काम करना चाहिए.
अगर डिवाइस में होस्ट मोड और यूएसबी ऑडियो क्लास के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [C-2-1] यूएसबी एचआईडी क्लास के साथ काम करना ज़रूरी है.
- [C-2-2] यूएसबी एचआईडी यूसेज टेबल और वॉइस कमांड यूसेज रिक्वेस्ट में बताए गए, एचआईडी के इन डेटा फ़ील्ड का पता लगाने और उन्हें
KeyEventकॉन्स्टेंट से मैप करने की सुविधा होनी चाहिए. ये डेटा फ़ील्ड यहां दिए गए हैं:- Usage Page (0xC) Usage ID (0x0CD):
KEYCODE_MEDIA_PLAY_PAUSE - Usage Page (0xC) Usage ID (0x0E9):
KEYCODE_VOLUME_UP - Usage Page (0xC) Usage ID (0x0EA):
KEYCODE_VOLUME_DOWN - इस्तेमाल से जुड़ा पेज (0xC) इस्तेमाल का आईडी (0x0CF):
KEYCODE_VOICE_ASSIST
- Usage Page (0xC) Usage ID (0x0CD):
अगर डिवाइस में होस्ट मोड और स्टोरेज ऐक्सेस फ़्रेमवर्क (एसएएफ़) के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [C-3-1] इसे रिमोट से कनेक्ट किए गए किसी भी एमटीपी (मीडिया ट्रांसफर प्रोटोकॉल) डिवाइस को पहचानना चाहिए. साथ ही,
ACTION_GET_CONTENT,ACTION_OPEN_DOCUMENT, औरACTION_CREATE_DOCUMENTइंटेंट के ज़रिए, डिवाइस के कॉन्टेंट को ऐक्सेस करने की सुविधा देनी चाहिए. .
अगर डिवाइस में होस्ट मोड और यूएसबी टाइप-सी के साथ काम करने वाला यूएसबी पोर्ट शामिल है, तो:
- [C-4-1] यूएसबी टाइप-सी के स्पेसिफ़िकेशन (सेक्शन 4.5.1.3.3) में बताई गई ड्यूअल रोल पोर्ट की सुविधा को लागू करना ज़रूरी है.
- [SR] यह सुझाव दिया जाता है कि DisplayPort काम करे. साथ ही, यह ज़रूरी है कि यूएसबी सुपरस्पीड डेटा रेट काम करे. इसके अलावा, यह सुझाव दिया जाता है कि डेटा और पावर रोल स्वैपिंग के लिए, Power Delivery की सुविधा काम करे.
- [SR] हमारा सुझाव है कि यूएसबी टाइप-सी केबल और कनेक्टर स्पेसिफ़िकेशन के वर्शन 1.2 के अपेंडिक्स A में बताए गए ऑडियो अडैप्टर ऐक्सेसरी मोड का इस्तेमाल न करें.
- डिवाइस के फ़ॉर्म फ़ैक्टर के हिसाब से, Try.* मॉडल लागू करना चाहिए. उदाहरण के लिए, हैंडहेल्ड डिवाइस को Try.SNK मॉडल लागू करना चाहिए.
7.8. ऑडियो
7.8.1. माइक्रोफ़ोन
अगर डिवाइसों में माइक्रोफ़ोन शामिल है, तो:
- [C-1-1]
android.hardware.microphoneसुविधा के कॉन्सटेंट के बारे में बताना ज़रूरी है. - [C-1-2] सेक्शन 5.4 में बताई गई ऑडियो रिकॉर्डिंग की ज़रूरी शर्तों को पूरा करना ज़रूरी है.
- [C-1-3] को सेक्शन 5.6 में बताई गई ऑडियो लेटेंसी की ज़रूरी शर्तों को पूरा करना होगा.
- [SR] सेक्शन 7.8.3 में बताए गए तरीके से, नियर-अल्ट्रासाउंड रिकॉर्डिंग की सुविधा देने का सुझाव दिया जाता है.
अगर डिवाइसों में माइक्रोफ़ोन नहीं है, तो:
- [C-2-1]
android.hardware.microphoneसुविधा के कॉन्स्टेंट की जानकारी नहीं देनी चाहिए. - [C-2-2] सेक्शन 7 के मुताबिक, ऑडियो रिकॉर्डिंग एपीआई को कम से कम नो-ऑप्स के तौर पर लागू करना ज़रूरी है.
7.8.2. ऑडियो आउटपुट
अगर डिवाइसों में स्पीकर या ऑडियो/मल्टीमीडिया आउटपुट पोर्ट शामिल हैं, ताकि ऑडियो आउटपुट पेरिफ़ेरल का इस्तेमाल किया जा सके. जैसे, 4 कंडक्टर वाला 3.5 मि॰मी॰ ऑडियो जैक या यूएसबी ऑडियो क्लास का इस्तेमाल करने वाला यूएसबी होस्ट मोड पोर्ट, तो:
- [C-1-1]
android.hardware.audio.outputसुविधा के कॉन्सटेंट के बारे में बताना ज़रूरी है. - [C-1-2] को सेक्शन 5.5 में बताई गई, ऑडियो चलाने की ज़रूरी शर्तों को पूरा करना होगा.
- [C-1-3] को सेक्शन 5.6 में बताई गई ऑडियो लेटेंसी की ज़रूरी शर्तों को पूरा करना होगा.
- [SR] सेक्शन 7.8.3 में बताए गए तरीके से, नियर-अल्ट्रासाउंड प्लेबैक की सुविधा देने का सुझाव दिया जाता है.
अगर डिवाइसों में स्पीकर या ऑडियो आउटपुट पोर्ट शामिल नहीं है, तो:
- [C-2-1]
android.hardware.audio outputसुविधा की जानकारी नहीं देनी चाहिए. - [C-2-2] ऑडियो आउटपुट से जुड़े एपीआई को कम से कम नो-ऑप के तौर पर लागू करना ज़रूरी है.
इस सेक्शन के लिए, "आउटपुट पोर्ट" एक फ़िज़िकल इंटरफ़ेस होता है. जैसे, 3.5 मि॰मी॰ ऑडियो जैक, एचडीएमआई या यूएसबी ऑडियो क्लास वाला यूएसबी होस्ट मोड पोर्ट. रेडियो पर आधारित प्रोटोकॉल, जैसे कि ब्लूटूथ, वाईफ़ाई या मोबाइल नेटवर्क पर ऑडियो डिवाइस की सुविधा को "आउटपुट पोर्ट" के तौर पर शामिल नहीं किया जा सकता.
7.8.2.1. ऐनालॉग ऑडियो पोर्ट
Android के सभी डिवाइसों पर 3.5 मि॰मी॰ के ऑडियो प्लग का इस्तेमाल करके, हेडसेट और अन्य ऑडियो ऐक्सेसरी इस्तेमाल की जा सकें, इसके लिए ज़रूरी है कि अगर किसी डिवाइस में एक या उससे ज़्यादा ऐनलॉग ऑडियो पोर्ट शामिल हैं, तो कम से कम एक ऑडियो पोर्ट, चार कंडक्टर वाला 3.5 मि॰मी॰ का ऑडियो जैक होना चाहिए.
अगर डिवाइसों में चार कंडक्टर वाला 3.5 मि॰मी॰ का ऑडियो जैक है, तो:
- [C-1-1] इसमें स्टीरियो हेडफ़ोन और माइक्रोफ़ोन वाले स्टीरियो हेडसेट पर ऑडियो चलाने की सुविधा होनी चाहिए.
- [C-1-2] ज़रूरी है कि डिवाइस, CTIA पिन-आउट ऑर्डर वाले टीआरआरएस ऑडियो प्लग के साथ काम करता हो.
- [C-1-3] ऑडियो प्लग पर माइक्रोफ़ोन और ग्राउंड कंडक्टर के बीच, एक जैसे इंपीडेंस की इन तीन रेंज के लिए, कीकोड का पता लगाने और उन्हें मैप करने की सुविधा होनी चाहिए:
-
70 ओम या उससे कम:
KEYCODE_HEADSETHOOK -
210-290 ओम:
KEYCODE_VOLUME_UP -
360-680 ओम:
KEYCODE_VOLUME_DOWN
-
70 ओम या उससे कम:
- [C-1-4] प्लग डालने पर
ACTION_HEADSET_PLUGको ट्रिगर करना ज़रूरी है. हालांकि, ऐसा तब ही होना चाहिए, जब प्लग पर मौजूद सभी संपर्क, जैक पर मौजूद अपने-अपने सेगमेंट को छू रहे हों. - [C-1-5] 32 ओम के स्पीकर इंपीडेंस पर, कम से कम 150mV ± 10% का आउटपुट वोल्टेज देने में सक्षम होना चाहिए.
- [C-1-6] माइक्रोफ़ोन का बायस वोल्टेज 1.8V से 2.9V के बीच होना चाहिए.
- [SR] ऑडियो प्लग पर माइक्रोफ़ोन और ग्राउंड कंडक्टर के बीच, एक जैसे इंपीडेंस की इस रेंज के लिए, कीकोड का पता लगाने और उसे मैप करने का सुझाव दिया जाता है:
-
110-180 ओम:
KEYCODE_VOICE_ASSIST
-
110-180 ओम:
- ऑडियो प्लग के लिए, OMTP पिन-आउट ऑर्डर का इस्तेमाल किया जाना चाहिए.
- इसमें माइक्रोफ़ोन वाले स्टीरियो हेडसेट से ऑडियो रिकॉर्ड करने की सुविधा होनी चाहिए.
अगर डिवाइसों में चार कंडक्टर वाला 3.5 मि॰मी॰ का ऑडियो जैक है और वे माइक्रोफ़ोन के साथ काम करते हैं, तो उन्हें android.intent.action.HEADSET_PLUG को ब्रॉडकास्ट करना होगा. इसमें माइक्रोफ़ोन की अतिरिक्त वैल्यू को 1 के तौर पर सेट करना होगा. ऐसा करने पर:
- [C-2-1] यह ज़रूरी है कि प्लग इन की गई ऑडियो ऐक्सेसरी पर माइक्रोफ़ोन का पता लगाने की सुविधा काम करती हो.
7.8.3. अल्ट्रासाउंड के आस-पास की फ़्रीक्वेंसी
नियर-अल्ट्रासाउंड ऑडियो, 18.5 किलोहर्ट्ज़ से 20 किलोहर्ट्ज़ बैंड होता है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- AudioManager.getProperty एपीआई के ज़रिए, डिवाइस में नियर-अल्ट्रासाउंड ऑडियो की सुविधा के बारे में सही जानकारी देनी होगी. इसके लिए, यह तरीका अपनाएं:
अगर PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND "सही" है, तो VOICE_RECOGNITION और UNPROCESSED ऑडियो सोर्स को ये ज़रूरी शर्तें पूरी करनी होंगी:
- [C-1-1] 18.5 किलोहर्ट्ज़ से 20 किलोहर्ट्ज़ बैंड में माइक्रोफ़ोन की औसत पावर रिस्पॉन्स, 2 किलोहर्ट्ज़ पर रिस्पॉन्स से 15 dB से ज़्यादा कम नहीं होना चाहिए.
- [C-1-2] -26 dBFS पर 19 kHz टोन के लिए, 18.5 kHz से 20 kHz तक माइक्रोफ़ोन का अनवेटेड सिग्नल-टू-नॉइज़ रेशियो 50 dB से कम नहीं होना चाहिए.
अगर PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND "true" है, तो:
- [C-2-1] स्पीकर का 18.5 किलोहर्ट्ज़ से 20 किलोहर्ट्ज़ के बीच का औसत रिस्पॉन्स, 2 किलोहर्ट्ज़ के रिस्पॉन्स से 40 डेसिबल से कम नहीं होना चाहिए.
7.9. वर्चुअल रिएलिटी
Android में एपीआई और सुविधाएं शामिल हैं. इनकी मदद से, "वर्चुअल रिएलिटी" (वीआर) ऐप्लिकेशन बनाए जा सकते हैं. इनमें अच्छी क्वालिटी वाले मोबाइल वीआर ऐप्लिकेशन भी शामिल हैं. डिवाइसों में इन एपीआई और व्यवहारों को सही तरीके से लागू करना ज़रूरी है. इस सेक्शन में इनके बारे में पूरी जानकारी दी गई है.
7.9.1. वर्चुअल रिएलिटी मोड
Android में वीआर मोड की सुविधा उपलब्ध है. यह सुविधा, सूचनाओं को स्टीरियोस्कोपिक तरीके से रेंडर करती है. साथ ही, जब कोई वीआर ऐप्लिकेशन फ़ोकस में होता है, तब यह मोनोकुलर सिस्टम यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट को बंद कर देती है.
7.9.2. वर्चुअल रिएलिटी के लिए हाई परफ़ॉर्मेंस
अगर डिवाइसों पर android.hardware.vr.high_performance फ़ीचर फ़्लैग की मदद से, यह पता चलता है कि उपयोगकर्ता लंबे समय तक हाई परफ़ॉर्मेंस वाले वीआर का इस्तेमाल कर सकते हैं, तो:
- [C-1-1] कम से कम दो फ़िज़िकल कोर होने चाहिए.
- [C-1-2]
android.software.vr.mode featureका एलान करना ज़रूरी है. - [C-1-3] इसमें सस्टेंड परफ़ॉर्मेंस मोड काम करना चाहिए.
- [C-1-4] OpenGL ES 3.2 सपोर्ट करना ज़रूरी है.
- [C-1-5] Vulkan Hardware Level 0 के साथ काम करना ज़रूरी है. साथ ही, Vulkan Hardware Level 1 के साथ काम करना चाहिए.
- [C-1-6]
EGL_KHR_mutable_render_buffer,EGL_ANDROID_front_buffer_auto_refresh,EGL_ANDROID_get_native_client_buffer,EGL_KHR_fence_sync,EGL_KHR_wait_sync,EGL_IMG_context_priority,EGL_EXT_protected_contentको लागू करना ज़रूरी है. साथ ही, उपलब्ध EGL एक्सटेंशन की सूची में एक्सटेंशन दिखाना ज़रूरी है. - [C-1-7] जीपीयू और डिसप्ले को शेयर किए गए फ़्रंट बफ़र को इस तरह से ऐक्सेस करना चाहिए कि दो रेंडर कॉन्टेक्स्ट के साथ 60 फ़्रेम प्रति सेकंड (एफ़पीएस) पर वीआर कॉन्टेंट की बारी-बारी से रेंडरिंग की जा सके. साथ ही, इससे इमेज में कोई गड़बड़ी न दिखे.
- [C-1-8]
GL_EXT_multisampled_render_to_texture,GL_OVR_multiview,GL_OVR_multiview2,GL_OVR_multiview_multisampled_render_to_texture,GL_EXT_protected_texturesको लागू करना ज़रूरी है. साथ ही, उपलब्ध GL एक्सटेंशन की सूची में एक्सटेंशन दिखाना ज़रूरी है. - [C-1-9] NDK में बताए गए तरीके के मुताबिक,
AHardwareBufferफ़्लैगAHARDWAREBUFFER_USAGE_GPU_DATA_BUFFERऔरAHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATAके लिए सहायता लागू करना ज़रूरी है. - [C-1-10] एक से ज़्यादा लेयर वाले
AHardwareBuffersके साथ काम करने की सुविधा लागू करना ज़रूरी है. - [C-1-11] कम से कम 3840x2160@30fps-40Mbps पर H.264 डिकोडिंग की सुविधा होनी चाहिए. यह 1920x1080@30fps-10Mbps के चार इंस्टेंस या 1920x1080@60fps-20Mbps के दो इंस्टेंस के बराबर है.
- [C-1-12] HEVC और VP9 के साथ काम करना ज़रूरी है. साथ ही, कम से कम 1920x1080@30fps-10Mbps को डिकोड करने की क्षमता होनी चाहिए. इसके अलावा, 3840x2160@30fps-20Mbps (1920x1080@30fps-5Mbps के चार इंस्टेंस के बराबर) को डिकोड करने की क्षमता होनी चाहिए.
- [C-1-13] में
HardwarePropertiesManager.getDeviceTemperaturesएपीआई का इस्तेमाल किया जाना चाहिए. साथ ही, त्वचा के तापमान की सटीक वैल्यू दिखानी चाहिए. - [C-1-14] में एक एम्बेड की गई स्क्रीन होनी चाहिए. इसका रिज़ॉल्यूशन कम से कम FullHD(1080p) होना चाहिए. साथ ही, हमारा सुझाव है कि इसका रिज़ॉल्यूशन QuadHD (1440p) या इससे ज़्यादा हो.
- [C-1-15] वीआर मोड में, डिसप्ले कम से कम 60 हर्ट्ज़ पर अपडेट होना चाहिए.
- [C-1-16] ग्रे-टू-ग्रे, व्हाइट-टू-ब्लैक, और ब्लैक-टू-व्हाइट स्विचिंग टाइम पर डिसप्ले की लेटेन्सी, 3 मि॰से॰ से कम या इसके बराबर होनी चाहिए.
- [C-1-17] डिसप्ले में लो-पर्सिस्टेंस मोड काम करना चाहिए. साथ ही, पर्सिस्टेंस 5 मि॰से॰ से कम होना चाहिए. पर्सिस्टेंस का मतलब है कि कोई पिक्सल कितने समय तक रोशनी देता है.
- [C-1-18] इनमें ब्लूटूथ 4.2 और ब्लूटूथ स्मार्ट डेटा लेंथ एक्सटेंशन सेक्शन 7.4.3 काम करना चाहिए.
- [SR] यह सुझाव दिया जाता है कि डिवाइस में
android.hardware.sensor.hifi_sensorsसुविधा काम करे. साथ ही, यह ज़रूरी है कि डिवाइस,android.hardware.hifi_sensorsके लिए जाइरोस्कोप, एक्सलरोमीटर, और मैग्नेटोमीटर से जुड़ी ज़रूरी शर्तों को पूरा करता हो. - यह स्क्रीन पर दिखने वाले ऐप्लिकेशन को एक खास कोर दे सकता है. साथ ही, यह
Process.getExclusiveCoresएपीआई के साथ काम कर सकता है. इससे, स्क्रीन पर दिखने वाले ऐप्लिकेशन के लिए खास तौर पर उपलब्ध सीपीयू कोर की संख्या का पता लगाया जा सकता है.
अगर एक्सक्लूसिव कोर की सुविधा काम करती है, तो कोर:
- [C-2-1] इस पर किसी अन्य यूज़रस्पेस प्रोसेस को चलने की अनुमति नहीं होनी चाहिए. हालांकि, ऐप्लिकेशन के इस्तेमाल किए गए डिवाइस ड्राइवर को चलने की अनुमति दी जा सकती है. साथ ही, ज़रूरत के मुताबिक कुछ कर्नल प्रोसेस को चलने की अनुमति दी जा सकती है.
8. परफ़ॉर्मेंस और पावर
उपयोगकर्ता अनुभव के लिए, परफ़ॉर्मेंस और पावर से जुड़ी कुछ ज़रूरी शर्तें पूरी करना ज़रूरी है. साथ ही, इनसे डेवलपर की उन बुनियादी मान्यताओं पर असर पड़ता है जो वे ऐप्लिकेशन डेवलप करते समय रखते हैं.
8.1. उपयोगकर्ता अनुभव में एकरूपता
अगर ऐप्लिकेशन और गेम के लिए, फ़्रेम रेट और रिस्पॉन्स टाइम को एक जैसा बनाए रखने के लिए कुछ ज़रूरी शर्तें पूरी की जाती हैं, तो असली उपयोगकर्ता को बेहतर यूज़र इंटरफ़ेस दिया जा सकता है. डिवाइस के टाइप के आधार पर, डिवाइस में सेट किए गए सिस्टम के लिए यूज़र इंटरफ़ेस के इंतज़ार के समय और टास्क स्विच करने से जुड़ी ज़रूरी शर्तें हो सकती हैं. इनके बारे में सेक्शन 2 में बताया गया है.
8.2. फ़ाइल I/O ऐक्सेस करने की परफ़ॉर्मेंस
ऐप्लिकेशन के निजी डेटा स्टोरेज (/data पार्टीशन) पर फ़ाइल ऐक्सेस करने की परफ़ॉर्मेंस के लिए, एक सामान्य बेसलाइन उपलब्ध कराने से ऐप्लिकेशन डेवलपर को सही उम्मीद सेट करने में मदद मिलती है. इससे उन्हें अपने सॉफ़्टवेयर को डिज़ाइन करने में मदद मिलती है. डिवाइस के टाइप के हिसाब से, डिवाइस में सेट किए गए सिस्टम के लिए, दूसरे सेक्शन में बताई गई कुछ ज़रूरी शर्तें पूरी करना ज़रूरी हो सकता है. ये शर्तें, पढ़ने और लिखने से जुड़ी इन कार्रवाइयों के लिए हैं:
- सीक्वेंशियल राइट परफ़ॉर्मेंस. इसे 10 एमबी के राइट बफ़र का इस्तेमाल करके, 256 एमबी की फ़ाइल लिखने के आधार पर मापा जाता है.
- रैंडम राइट परफ़ॉर्मेंस. इसे 4 केबी के राइट बफ़र का इस्तेमाल करके, 256 एमबी की फ़ाइल लिखने के आधार पर मापा जाता है.
- सीक्वेंशियल रीड परफ़ॉर्मेंस. इसे 10 एमबी के राइट बफ़र का इस्तेमाल करके, 256 एमबी की फ़ाइल को पढ़ने के आधार पर मापा जाता है.
- रैंडम रीड परफ़ॉर्मेंस. इसे 4 केबी के राइट बफ़र का इस्तेमाल करके, 256 एमबी की फ़ाइल को पढ़ने के आधार पर मापा जाता है.
8.3. बैटरी सेव करने वाले मोड
Android में, बैटरी के इस्तेमाल को ऑप्टिमाइज़ करने के लिए, ऐप्लिकेशन स्टैंडबाय और डोज़ मोड शामिल हैं. [SR] इन मोड से छूट पाने वाले सभी ऐप्लिकेशन को असली उपयोगकर्ता के लिए उपलब्ध कराने का सुझाव दिया जाता है. [SR] इन बैटरी सेवर मोड के ट्रिगर करने, रखरखाव, और वेकअप एल्गोरिदम के साथ-साथ, ग्लोबल सिस्टम सेटिंग के इस्तेमाल के लिए यह सुझाव दिया जाता है कि वे Android Open Source Project से अलग न हों.
बैटरी बचाने वाले मोड के अलावा, Android डिवाइस में सेट किए गए सिस्टम, स्लीपिंग पावर स्टेट के चार में से किसी एक या सभी को लागू कर सकते हैं. इन्हें ऐडवांस कॉन्फ़िगरेशन ऐंड पावर इंटरफ़ेस (एसीपीआई) के तहत तय किया गया है.
अगर डिवाइस सिस्टम, ACPI के हिसाब से S3 और S4 पावर स्टेट लागू करते हैं, तो:
- [C-1-1] लिड बंद करने पर, डिवाइस को सिर्फ़ तब इन स्थितियों में जाना चाहिए, जब लिड डिवाइस का हिस्सा हो.
8.4. पावर की खपत का हिसाब रखने की सुविधा
ऊर्जा की खपत का ज़्यादा सटीक हिसाब और रिपोर्टिंग से, ऐप्लिकेशन डेवलपर को इंसेंटिव और ऐसे टूल मिलते हैं जिनसे ऐप्लिकेशन में ऊर्जा के इस्तेमाल के पैटर्न को ऑप्टिमाइज़ किया जा सकता है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [SR] हर कॉम्पोनेंट के लिए, पावर प्रोफ़ाइल देने का सुझाव दिया जाता है. इससे हर हार्डवेयर कॉम्पोनेंट के लिए, करंट की खपत की वैल्यू और समय के साथ कॉम्पोनेंट की वजह से तेज़ी से बैटरी खर्च होने की अनुमानित जानकारी मिलती है. यह जानकारी, Android ओपन सोर्स प्रोजेक्ट की साइट पर मौजूद है.
- [SR] बिजली की खपत की सभी वैल्यू को मिलीऐंपियर घंटे (mAh) में रिपोर्ट करने का सुझाव दिया जाता है.
- [SR] हर प्रोसेस के यूआईडी के हिसाब से सीपीयू की पावर खपत की जानकारी देने का सुझाव दिया जाता है. Android Open Source Project,
uid_cputimeकर्नेल मॉड्यूल को लागू करके इस ज़रूरी शर्त को पूरा करता है. - [SR] हमारा सुझाव है कि ऐप्लिकेशन डेवलपर को,
adb shell dumpsys batterystatsशेल कमांड के ज़रिए बैटरी के इस्तेमाल की जानकारी उपलब्ध कराई जाए. - अगर हार्डवेयर कॉम्पोनेंट के पावर इस्तेमाल को किसी ऐप्लिकेशन से नहीं जोड़ा जा सकता, तो इसे हार्डवेयर कॉम्पोनेंट से ही जोड़ा जाना चाहिए.
8.5. लगातार अच्छी परफ़ॉर्मेंस
ज़्यादा परफ़ॉर्मेंस वाले और लंबे समय तक चलने वाले ऐप्लिकेशन की परफ़ॉर्मेंस में काफ़ी उतार-चढ़ाव हो सकता है. ऐसा बैकग्राउंड में चल रहे अन्य ऐप्लिकेशन या तापमान की सीमा की वजह से सीपीयू थ्रॉटलिंग की वजह से हो सकता है. Android में प्रोग्रामैटिक इंटरफ़ेस शामिल होते हैं, ताकि जब डिवाइस में ज़रूरी क्षमता हो, तो सबसे ऊपर दिखने वाला फ़ोरग्राउंड ऐप्लिकेशन, सिस्टम से अनुरोध कर सके कि वह इन उतार-चढ़ावों को ठीक करने के लिए संसाधनों के बंटवारे को ऑप्टिमाइज़ करे.
डिवाइस में सेट किए गए सिस्टम के लिए:
-
[C-0-1]
PowerManager.isSustainedPerformanceModeSupported()एपीआई तरीके का इस्तेमाल करके, परफ़ॉर्मेंस मोड को बनाए रखने की सुविधा के बारे में सटीक जानकारी देना ज़रूरी है. -
इसमें लगातार परफ़ॉर्मेंस मोड काम करना चाहिए.
अगर डिवाइस, परफ़ॉर्मेंस मोड को बनाए रखने की सुविधा के साथ काम करते हैं, तो:
- [C-1-1] जब ऐप्लिकेशन अनुरोध करता है, तो उसे कम से कम 30 मिनट तक, टॉप फ़ोरग्राउंड ऐप्लिकेशन के लिए एक जैसा परफ़ॉर्मेंस लेवल देना ज़रूरी है.
- [C-1-2]
Window.setSustainedPerformanceMode()एपीआई और इससे जुड़े अन्य एपीआई का पालन करना ज़रूरी है.
अगर डिवाइसों में दो या उससे ज़्यादा सीपीयू कोर शामिल हैं, तो:
- कम से कम एक ऐसा कोर उपलब्ध कराना चाहिए जिसे सबसे ऊपर दिखने वाला ऐप्लिकेशन रिज़र्व कर सके.
अगर डिवाइस में, सबसे ऊपर दिखने वाले फ़ोरग्राउंड ऐप्लिकेशन के लिए एक खास कोर रिज़र्व करने की सुविधा काम करती है, तो:
- [C-2-1]
Process.getExclusiveCores()एपीआई के ज़रिए, एक्सक्लूसिव कोर के आईडी नंबर की जानकारी देनी होगी. इन कोर को टॉप फ़ोरग्राउंड ऐप्लिकेशन के लिए रिज़र्व किया जा सकता है. - [C-2-2] ऐप्लिकेशन को एक्सक्लूसिव कोर पर चलाने के लिए इस्तेमाल किए जाने वाले डिवाइस ड्राइवर के अलावा, किसी भी यूज़र स्पेस प्रोसेस को अनुमति नहीं देनी चाहिए. हालांकि, ज़रूरत के मुताबिक कुछ कर्नल प्रोसेस को चलाने की अनुमति दी जा सकती है.
अगर डिवाइसों में एक्सक्लूसिव कोर की सुविधा काम नहीं करती है, तो:
- [C-3-1]
Process.getExclusiveCores()एपीआई तरीके से, खाली सूची को वापस लाना ज़रूरी है.
9. सुरक्षा मॉडल के साथ काम करने की सुविधा
डिवाइस में सेट किए गए सिस्टम के लिए:
-
[C-0-1] Android डेवलपर दस्तावेज़ में मौजूद एपीआई में, Android प्लैटफ़ॉर्म के सिक्योरिटी मॉडल के मुताबिक सिक्योरिटी मॉडल लागू करना ज़रूरी है. इसके बारे में सुरक्षा और अनुमतियों से जुड़े रेफ़रंस दस्तावेज़ में बताया गया है.
-
[C-0-2] में, तीसरे पक्ष/अधिकारियों से कोई अतिरिक्त अनुमति/सर्टिफ़िकेट लिए बिना, खुद के हस्ताक्षर वाले ऐप्लिकेशन इंस्टॉल करने की सुविधा होनी चाहिए. खास तौर पर, यह ज़रूरी है कि जिन डिवाइसों पर यह सुविधा काम करती है वे यहां दिए गए सुरक्षा के तरीकों के साथ काम करें.
9.1. अनुमतियां
डिवाइस में सेट किए गए सिस्टम के लिए:
-
[C-0-1] Android डेवलपर के दस्तावेज़ में बताए गए Android के अनुमतियों वाले मॉडल के साथ काम करना ज़रूरी है. खास तौर पर, उन्हें एसडीके के दस्तावेज़ में बताई गई हर अनुमति को लागू करना होगा. किसी भी अनुमति को छोड़ा, बदला या अनदेखा नहीं किया जा सकता.
-
ज़्यादा अनुमतियां जोड़ सकता है. हालांकि, नई अनुमति के आईडी स्ट्रिंग,
android.\*नेमस्पेस में नहीं होने चाहिए. -
[C-0-2]
PROTECTION_FLAG_PRIVILEGEDकेprotectionLevelवाली अनुमतियां, सिर्फ़ उन ऐप्लिकेशन को दी जानी चाहिए जो सिस्टम इमेज के खास पाथ में पहले से लोड हैं. साथ ही, ये अनुमतियां हर ऐप्लिकेशन के लिए, साफ़ तौर पर अनुमति दी गई अनुमतियों के सबसेट में होनी चाहिए. AOSP, इस ज़रूरी शर्त को पूरा करता है. इसके लिए, वहetc/permissions/पाथ में मौजूद फ़ाइलों से, हर ऐप्लिकेशन के लिए अनुमति दी गई अनुमतियों को पढ़ता है और उनका पालन करता है. साथ ही,system/priv-appपाथ को खास पाथ के तौर पर इस्तेमाल करता है.
खतरनाक लेवल की अनुमतियां, रनटाइम अनुमतियां होती हैं. targetSdkVersion > 22 वाले ऐप्लिकेशन, रनटाइम के दौरान अनुमतियों का अनुरोध करते हैं.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-3] उपयोगकर्ता को एक खास इंटरफ़ेस दिखाना ज़रूरी है, ताकि वह यह तय कर सके कि रनटाइम के दौरान मांगी गई अनुमतियां देनी हैं या नहीं. साथ ही, उपयोगकर्ता को रनटाइम की अनुमतियां मैनेज करने के लिए भी एक इंटरफ़ेस उपलब्ध कराना ज़रूरी है.
- [C-0-4] दोनों यूज़र इंटरफ़ेस को लागू करने का सिर्फ़ एक तरीका होना चाहिए.
- [C-0-5] पहले से इंस्टॉल किए गए ऐप्लिकेशन को रनटाइम की कोई भी अनुमति तब तक नहीं देनी चाहिए, जब तक कि:
- ऐप्लिकेशन के इस डेटा का इस्तेमाल करने से पहले, उपयोगकर्ता की सहमति ली जा सकती है
- रनटाइम की अनुमतियां, इंटेंट पैटर्न से जुड़ी होती हैं. इसके लिए, पहले से इंस्टॉल किए गए ऐप्लिकेशन को डिफ़ॉल्ट हैंडलर के तौर पर सेट किया जाता है
अगर डिवाइसों में पहले से इंस्टॉल किया गया कोई ऐप्लिकेशन शामिल है या तीसरे पक्ष के ऐप्लिकेशन को इस्तेमाल के आंकड़े ऐक्सेस करने की अनुमति देनी है, तो:
- [एसआर]
android.permission.PACKAGE_USAGE_STATSअनुमति का एलान करने वाले ऐप्लिकेशन के लिए,android.settings.ACTION_USAGE_ACCESS_SETTINGSइंटेंट के जवाब में, इस्तेमाल से जुड़े आंकड़े ऐक्सेस करने की अनुमति देने या वापस लेने के लिए, उपयोगकर्ताओं को आसानी से उपलब्ध होने वाला तरीका उपलब्ध कराने का सुझाव दिया जाता है.
अगर डिवाइस बनाने वाली कंपनियां, पहले से इंस्टॉल किए गए ऐप्लिकेशन के साथ-साथ किसी भी ऐप्लिकेशन को इस्तेमाल के आंकड़े ऐक्सेस करने की अनुमति नहीं देना चाहती हैं, तो:
- [C-1-1] में अब भी एक ऐसी गतिविधि होनी चाहिए जो
android.settings.ACTION_USAGE_ACCESS_SETTINGSइंटेंट पैटर्न को हैंडल करती हो. हालांकि, इसे no-op के तौर पर लागू किया जाना चाहिए. इसका मतलब है कि इसका व्यवहार वैसा ही होना चाहिए जैसा तब होता है, जब उपयोगकर्ता को ऐक्सेस देने से मना कर दिया जाता है.
9.2. यूआईडी और अलग-अलग प्रोसेस के लिए टेक्नोलॉजी
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] Android ऐप्लिकेशन के सैंडबॉक्स मॉडल के साथ काम करना ज़रूरी है. इसमें हर ऐप्लिकेशन, यूनीक Unixstyle UID के तौर पर और अलग प्रोसेस में चलता है.
- [C-0-2] एक ही Linux यूज़र आईडी के तौर पर कई ऐप्लिकेशन चलाने की सुविधा होनी चाहिए. हालांकि, इसके लिए यह ज़रूरी है कि ऐप्लिकेशन पर सही तरीके से हस्ताक्षर किए गए हों और उन्हें सही तरीके से बनाया गया हो. इसके बारे में सुरक्षा और अनुमतियों के बारे में जानकारी देने वाले दस्तावेज़ में बताया गया है.
9.3. फ़ाइल सिस्टम से जुड़ी अनुमतियां
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] सुरक्षा और अनुमतियों के बारे में जानकारी में बताए गए Android के फ़ाइल ऐक्सेस करने की अनुमतियों वाले मॉडल के साथ काम करना ज़रूरी है.
9.4. वैकल्पिक एक्ज़ीक्यूशन एनवायरमेंट
डिवाइसों में Android की सुरक्षा और अनुमति से जुड़े मॉडल को एक जैसा रखना ज़रूरी है. भले ही, उनमें ऐसे रनटाइम एनवायरमेंट शामिल हों जो Dalvik Executable Format या नेटिव कोड के अलावा, किसी अन्य सॉफ़्टवेयर या टेक्नोलॉजी का इस्तेमाल करके ऐप्लिकेशन को एक्ज़ीक्यूट करते हों. दूसरे शब्दों में:
-
[C-0-1] वैकल्पिक रनटाइम, Android ऐप्लिकेशन होने चाहिए. साथ ही, उन्हें Android के स्टैंडर्ड सिक्योरिटी मॉडल का पालन करना चाहिए. इसके बारे में सेक्शन 9 में बताया गया है.
-
[C-0-2] वैकल्पिक रनटाइम को उन संसाधनों का ऐक्सेस नहीं दिया जाना चाहिए जिन्हें उन अनुमतियों से सुरक्षित किया गया है जिनके लिए रनटाइम की
AndroidManifest.xmlफ़ाइल में <uses-permission> मेकेनिज़्म के ज़रिए अनुरोध नहीं किया गया है. -
[C-0-3] अन्य रनटाइम को, ऐप्लिकेशन को ऐसी सुविधाओं का इस्तेमाल करने की अनुमति नहीं देनी चाहिए जिन्हें Android की अनुमतियों से सुरक्षित किया गया है और जो सिर्फ़ सिस्टम ऐप्लिकेशन के लिए उपलब्ध हैं.
-
[C-0-4] वैकल्पिक रनटाइम को Android सैंडबॉक्स मॉडल का पालन करना होगा. साथ ही, वैकल्पिक रनटाइम का इस्तेमाल करने वाले इंस्टॉल किए गए ऐप्लिकेशन, डिवाइस पर इंस्टॉल किए गए किसी अन्य ऐप्लिकेशन के सैंडबॉक्स का फिर से इस्तेमाल नहीं कर सकते. हालांकि, वे शेयर किए गए उपयोगकर्ता आईडी और साइनिंग सर्टिफ़िकेट के स्टैंडर्ड Android तरीकों का इस्तेमाल कर सकते हैं.
-
[C-0-5] अन्य Android ऐप्लिकेशन से जुड़े सैंडबॉक्स को, वैकल्पिक रनटाइम के साथ लॉन्च नहीं किया जाना चाहिए. साथ ही, उन्हें सैंडबॉक्स का ऐक्सेस नहीं देना चाहिए और न ही उनसे ऐक्सेस लेना चाहिए.
-
[C-0-6] वैकल्पिक रनटाइम को सुपरयूज़र (रूट) या किसी अन्य उपयोगकर्ता आईडी के विशेषाधिकारों के साथ लॉन्च नहीं किया जाना चाहिए. साथ ही, उन्हें ये विशेषाधिकार नहीं दिए जाने चाहिए और न ही वे अन्य ऐप्लिकेशन को ये विशेषाधिकार दे सकते हैं.
-
[C-0-7] जब डिवाइस के सिस्टम इमेज में, वैकल्पिक रनटाइम की
.apkफ़ाइलें शामिल की जाती हैं, तो उन पर ऐसी कुंजी से हस्ताक्षर किया जाना चाहिए जो डिवाइस के सिस्टम इमेज में शामिल किए गए अन्य ऐप्लिकेशन पर हस्ताक्षर करने के लिए इस्तेमाल की गई कुंजी से अलग हो. -
[C-0-8] ऐप्लिकेशन इंस्टॉल करते समय, वैकल्पिक रनटाइम को उन Android अनुमतियों के लिए उपयोगकर्ता की सहमति लेनी होगी जिनका इस्तेमाल ऐप्लिकेशन करता है.
-
[C-0-9] जब किसी ऐप्लिकेशन को किसी डिवाइस के ऐसे संसाधन का इस्तेमाल करना होता है जिसके लिए Android की अनुमति ज़रूरी है (जैसे, कैमरा, जीपीएस वगैरह), तो रनटाइम को उपयोगकर्ता को यह सूचना देनी होगी कि ऐप्लिकेशन उस संसाधन को ऐक्सेस कर पाएगा.
-
[C-0-10] जब रनटाइम एनवायरमेंट, ऐप्लिकेशन की क्षमताओं को इस तरह से रिकॉर्ड नहीं करता है, तो रनटाइम एनवायरमेंट को उस रनटाइम का इस्तेमाल करके किसी भी ऐप्लिकेशन को इंस्टॉल करते समय, रनटाइम के पास मौजूद सभी अनुमतियों को सूची में शामिल करना होगा.
-
वैकल्पिक रनटाइम को,
PackageManagerके ज़रिए ऐप्लिकेशन इंस्टॉल करने चाहिए. साथ ही, उन्हें अलग-अलग Android सैंडबॉक्स (Linux उपयोगकर्ता आईडी वगैरह) में इंस्टॉल करना चाहिए. -
वैकल्पिक रनटाइम, Android का एक ऐसा सैंडबॉक्स उपलब्ध करा सकते हैं जिसे वैकल्पिक रनटाइम का इस्तेमाल करने वाले सभी ऐप्लिकेशन शेयर करते हैं.
9.5. एक डिवाइस पर कई लोगों के काम करने की सुविधा
Android में कई उपयोगकर्ताओं के लिए सहायता शामिल है. साथ ही, यह उपयोगकर्ताओं को पूरी तरह से अलग रखने की सुविधा देता है.
- डिवाइसों में, डिवाइस के एक से ज़्यादा उपयोगकर्ताओं के लिए सुविधा चालू की जा सकती है. हालांकि, अगर वे प्राइमरी बाहरी स्टोरेज के लिए हटाए जा सकने वाले मीडिया का इस्तेमाल करते हैं, तो उन्हें यह सुविधा चालू नहीं करनी चाहिए.
अगर डिवाइसों पर एक से ज़्यादा उपयोगकर्ता हैं, तो:
- [C-1-1] डिवाइस के एक से ज़्यादा उपयोगकर्ताओं के लिए सहायता से जुड़ी इन ज़रूरी शर्तों को पूरा करना ज़रूरी है.
- [C-1-2] हर उपयोगकर्ता के लिए, एपीआई में Android प्लैटफ़ॉर्म के सुरक्षा मॉडल के मुताबिक सुरक्षा मॉडल लागू करना ज़रूरी है. इसके बारे में सुरक्षा और अनुमतियों के रेफ़रंस दस्तावेज़ में बताया गया है.
- [C-1-3] हर उपयोगकर्ता इंस्टेंस के लिए, ऐप्लिकेशन के शेयर किए गए स्टोरेज (इसे
/sdcardभी कहा जाता है) की अलग और आइसोलेटेड डायरेक्ट्री होनी चाहिए. - [C-1-4] यह पक्का करना ज़रूरी है कि किसी उपयोगकर्ता के मालिकाना हक वाले और उसकी ओर से चलाए जा रहे ऐप्लिकेशन, किसी दूसरे उपयोगकर्ता के मालिकाना हक वाली फ़ाइलों को न तो सूची में शामिल कर सकें, न ही उन्हें पढ़ सकें, और न ही उनमें बदलाव कर सकें. भले ही, दोनों उपयोगकर्ताओं का डेटा एक ही वॉल्यूम या फ़ाइल सिस्टम पर सेव किया गया हो.
- [C-1-5] अगर डिवाइस में बाहरी स्टोरेज के लिए एसडी कार्ड का इस्तेमाल किया जाता है, तो मल्टीयूज़र मोड चालू होने पर एसडी कार्ड के कॉन्टेंट को एन्क्रिप्ट (सुरक्षित) करना ज़रूरी है. इसके लिए, ऐसी कुंजी का इस्तेमाल करना होगा जिसे सिर्फ़ सिस्टम ऐक्सेस कर सकता है. साथ ही, यह कुंजी सिर्फ़ ऐसे मीडिया पर सेव की गई हो जिसे हटाया नहीं जा सकता. इससे होस्ट पीसी पर मीडिया को पढ़ा नहीं जा सकेगा. इसलिए, डिवाइसों को एमटीपी या इसी तरह के किसी सिस्टम पर स्विच करना होगा, ताकि होस्ट पीसी को मौजूदा उपयोगकर्ता के डेटा का ऐक्सेस मिल सके.
अगर डिवाइसों पर एक से ज़्यादा उपयोगकर्ता मौजूद हैं और उन्होंने android.hardware.telephony सुविधा के फ़्लैग का एलान नहीं किया है, तो:
- [C-2-1] डिवाइस में प्रतिबंधित प्रोफ़ाइलें बनाने की सुविधा होनी चाहिए. इस सुविधा की मदद से, डिवाइस के मालिक अन्य उपयोगकर्ताओं को मैनेज कर सकते हैं. साथ ही, यह तय कर सकते हैं कि वे डिवाइस पर क्या-क्या कर सकते हैं. पाबंदी वाली प्रोफ़ाइलों की मदद से, डिवाइस के मालिक अन्य उपयोगकर्ताओं के लिए अलग-अलग एनवायरमेंट को तुरंत सेट अप कर सकते हैं. साथ ही, उन एनवायरमेंट में उपलब्ध ऐप्लिकेशन के लिए, ज़्यादा बारीकी से पाबंदियां मैनेज कर सकते हैं.
अगर डिवाइसों पर एक से ज़्यादा उपयोगकर्ता हैं और उन्होंने android.hardware.telephony फ़ीचर फ़्लैग का एलान किया है, तो:
- [C-3-1] इसमें प्रतिबंधित प्रोफ़ाइलें इस्तेमाल करने की सुविधा नहीं होनी चाहिए. हालांकि, इसमें एओएसपी के कंट्रोल लागू होने चाहिए, ताकि अन्य उपयोगकर्ताओं को वॉइस कॉल और एसएमएस ऐक्सेस करने की सुविधा चालू /बंद की जा सके.
9.6. प्रीमियम एसएमएस की चेतावनी
Android में, लोगों को किसी भी आउटगोइंग प्रीमियम एसएमएस मैसेज के बारे में चेतावनी देने की सुविधा शामिल है. प्रीमियम एसएमएस, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के साथ रजिस्टर की गई किसी सेवा को भेजे जाने वाले टेक्स्ट मैसेज होते हैं. इसके लिए, उपयोगकर्ता को शुल्क देना पड़ सकता है.
अगर डिवाइस में सेट किए गए सिस्टम में android.hardware.telephony का इस्तेमाल किया जाता है, तो:
- [C-1-1] डिवाइस में मौजूद
/data/misc/sms/codes.xmlफ़ाइल में तय किए गए रेगुलर एक्सप्रेशन से पहचाने गए नंबरों पर एसएमएस भेजने से पहले, उपयोगकर्ताओं को चेतावनी देनी होगी. अपस्ट्रीम Android ओपन सोर्स प्रोजेक्ट, इस ज़रूरी शर्त को पूरा करने वाला एक तरीका उपलब्ध कराता है.
9.7. कर्नेल की सुरक्षा से जुड़ी सुविधाएं
Android सैंडबॉक्स में ऐसी सुविधाएं शामिल होती हैं जो Security-Enhanced Linux (SELinux) के ज़रूरी ऐक्सेस कंट्रोल (एमएसी) सिस्टम, seccomp सैंडबॉक्सिंग, और Linux कर्नल में मौजूद अन्य सुरक्षा सुविधाओं का इस्तेमाल करती हैं. डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] मौजूदा ऐप्लिकेशन के साथ काम करने की सुविधा को बनाए रखना ज़रूरी है. भले ही, Android फ़्रेमवर्क के नीचे SELinux या कोई अन्य सुरक्षा सुविधा लागू की गई हो.
- [C-0-2] सुरक्षा से जुड़े उल्लंघन का पता चलने पर, यूज़र इंटरफ़ेस (यूआई) नहीं दिखना चाहिए. साथ ही, Android फ़्रेमवर्क के नीचे लागू की गई सुरक्षा सुविधा से, उल्लंघन को ब्लॉक किया जाना चाहिए. हालांकि, सुरक्षा से जुड़े उल्लंघन को ब्लॉक न किए जाने पर, यूज़र इंटरफ़ेस (यूआई) दिख सकता है. इससे, उल्लंघन का फ़ायदा उठाया जा सकता है.
- [C-0-3] Android फ़्रेमवर्क के नीचे लागू की गई SELinux या किसी अन्य सुरक्षा सुविधा को, उपयोगकर्ता या ऐप्लिकेशन डेवलपर के लिए कॉन्फ़िगर करने की अनुमति नहीं होनी चाहिए.
- [C-0-4] किसी ऐसे ऐप्लिकेशन को अनुमति नहीं देनी चाहिए जो एपीआई (जैसे कि डिवाइस एडमिनिस्ट्रेशन एपीआई) के ज़रिए किसी दूसरे ऐप्लिकेशन पर असर डाल सकता है. साथ ही, उसे ऐसी नीति कॉन्फ़िगर करने की अनुमति नहीं देनी चाहिए जो कंपैटिबिलिटी से जुड़ी समस्या पैदा करती हो.
- [C-0-5] मीडिया फ़्रेमवर्क को कई प्रोसेस में बांटना ज़रूरी है, ताकि Android Open Source Project की साइट पर बताए गए तरीके से, हर प्रोसेस के लिए ऐक्सेस दिया जा सके.
- [C-0-6] कर्नेल ऐप्लिकेशन सैंडबॉक्सिंग की सुविधा लागू करना ज़रूरी है. इससे मल्टीथ्रेड प्रोग्राम से, कॉन्फ़िगर की जा सकने वाली नीति का इस्तेमाल करके सिस्टम कॉल को फ़िल्टर किया जा सकता है. अपस्ट्रीम Android ओपन सोर्स प्रोजेक्ट, इस ज़रूरी शर्त को पूरा करता है. इसके लिए, वह थ्रेडग्रुप सिंक्रनाइज़ेशन (टीएसवाईएनसी) के साथ सेस्कॉम्प-बीपीएफ़ को चालू करता है. इसके बारे में source.android.com के कर्नल कॉन्फ़िगरेशन सेक्शन में बताया गया है.
कर्नल की सुरक्षा और खुद की सुरक्षा करने की सुविधाएं, Android की सुरक्षा के लिए ज़रूरी हैं. डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-7] कर्नेल स्टैक बफ़र ओवरफ़्लो से सुरक्षा देने वाले तरीके लागू करना ज़रूरी है. इस तरह के मेकेनिज़्म के उदाहरण
CC_STACKPROTECTOR_REGULARऔरCONFIG_CC_STACKPROTECTOR_STRONGहैं. - [C-0-8] कर्नल मेमोरी के लिए, सुरक्षा से जुड़ी सख्त शर्तों को पूरा करना ज़रूरी है.जैसे, एक्ज़ीक्यूटेबल कोड सिर्फ़ पढ़ा जा सकता है, सिर्फ़ पढ़े जा सकने वाले डेटा को न तो एक्ज़ीक्यूट किया जा सकता है और न ही लिखा जा सकता है. साथ ही, लिखे जा सकने वाले डेटा को एक्ज़ीक्यूट नहीं किया जा सकता (जैसे,
CONFIG_DEBUG_RODATAयाCONFIG_STRICT_KERNEL_RWX). - [SR] यह सुझाव दिया जाता है कि कर्नेल डेटा को सिर्फ़ शुरुआत में लिखा जाए.साथ ही, शुरुआत के बाद उसे सिर्फ़ पढ़ने के लिए मार्क किया जाए. उदाहरण के लिए,
__ro_after_init. - [SR} यूज़र-स्पेस और कर्नल-स्पेस के बीच कॉपी किए गए ऑब्जेक्ट के साइज़ की स्टैटिक और डाइनैमिक बाउंड की जांच करने का सुझाव दिया जाता है. जैसे,
CONFIG_HARDENED_USERCOPY. - [SR] कर्नेल में काम करते समय, उपयोगकर्ता-स्पेस मेमोरी को कभी भी एक्ज़ीक्यूट न करने का सुझाव दिया जाता है. उदाहरण के लिए, हार्डवेयर पीएक्सएन या
CONFIG_CPU_SW_DOMAIN_PANयाCONFIG_ARM64_SW_TTBR0_PANके ज़रिए इम्यूलेट किया गया. - [SR] हमारा सुझाव है कि कर्नल में, यूज़र-स्पेस मेमोरी को कभी भी न पढ़ें या न लिखें. ऐसा सिर्फ़ सामान्य usercopy ऐक्सेस एपीआई (जैसे कि हार्डवेयर पैन या
CONFIG_CPU_SW_DOMAIN_PANयाCONFIG_ARM64_SW_TTBR0_PANके ज़रिए इम्यूलेट किया गया) के बाहर किया जाना चाहिए. - [SR] कर्नेल कोड और मेमोरी के लेआउट को रैंडमाइज़ करने का सुझाव दिया जाता है.साथ ही, ऐसे एक्सपोज़र से बचने का सुझाव दिया जाता है जिनसे रैंडमाइज़ेशन से समझौता हो सकता है. उदाहरण के लिए,
/chosen/kaslr-seed Device Tree nodeयाEFI_RNG_PROTOCOLके ज़रिए बूटलोडर एंट्रॉपी के साथCONFIG_RANDOMIZE_BASE.
अगर डिवाइस में Linux कर्नल का इस्तेमाल किया जाता है, तो:
- [C-1-1] SELinux को लागू करना ज़रूरी है.
- [C-1-2] SELinux को ग्लोबल एनफ़ोर्सिंग मोड पर सेट करना ज़रूरी है.
- [C-1-3] सभी डोमेन को एनफ़ोर्सिंग मोड में कॉन्फ़िगर करना ज़रूरी है. अनुमति वाले मोड के किसी भी डोमेन का इस्तेमाल नहीं किया जा सकता. इनमें किसी डिवाइस/वेंडर के लिए खास तौर पर बनाए गए डोमेन भी शामिल हैं.
- [C-1-4] यह ज़रूरी है कि सिस्टम/sepolicy फ़ोल्डर में मौजूद neverallow नियमों में बदलाव न किया गया हो, उन्हें हटाया न गया हो या बदला न गया हो. यह फ़ोल्डर, अपस्ट्रीम Android Open Source Project (AOSP) में दिया गया है. साथ ही, यह भी ज़रूरी है कि नीति में मौजूद सभी neverallow नियमों का पालन किया गया हो. ऐसा AOSP SELinux डोमेन और डिवाइस/वेंडर के हिसाब से बने डोमेन, दोनों के लिए ज़रूरी है.
- उन्हें Android Open Source Project के अपस्ट्रीम के system/sepolicy फ़ोल्डर में दी गई डिफ़ॉल्ट SELinux नीति को बनाए रखना चाहिए. साथ ही, अपने डिवाइस के हिसाब से कॉन्फ़िगरेशन के लिए, इस नीति में सिर्फ़ कुछ और चीज़ें जोड़नी चाहिए.
अगर डिवाइस में Linux के अलावा किसी दूसरे कर्नल का इस्तेमाल किया जाता है, तो:
- [C-2-1] ज़रूरी है कि SELinux के बराबर का मैंडेटरी ऐक्सेस कंट्रोल सिस्टम इस्तेमाल किया जाए.
9.8. निजता
9.8.1. इस्तेमाल का इतिहास
Android, उपयोगकर्ता की पसंद का इतिहास सेव करता है. साथ ही, UsageStatsManager की मदद से इस इतिहास को मैनेज करता है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] को उपयोगकर्ता के इस तरह के इतिहास को सेव करने की अवधि तय करनी होगी.
- [SR] AOSP में डिफ़ॉल्ट रूप से कॉन्फ़िगर किए गए 14 दिनों के डेटा को सेव करके रखने की अवधि को बनाए रखने का सुझाव दिया जाता है.
9.8.2. रिकॉर्डिंग के दौरान
अगर डिवाइसों में ऐसी सुविधा शामिल है जो स्क्रीन पर दिखने वाले कॉन्टेंट को कैप्चर करती है और/या डिवाइस पर चलने वाली ऑडियो स्ट्रीम को रिकॉर्ड करती है, तो:
- [C-1-1] जब यह सुविधा चालू हो और डेटा कैप्चर/रिकॉर्ड किया जा रहा हो, तब उपयोगकर्ता को लगातार सूचना मिलनी चाहिए.
अगर डिवाइसों में ऐसा कॉम्पोनेंट शामिल है जो बॉक्स से बाहर ही चालू हो जाता है और उपयोगकर्ता के कॉन्टेक्स्ट के बारे में काम की जानकारी पाने के लिए, आस-पास की आवाज़ रिकॉर्ड कर सकता है, तो:
- [C-2-1] रिकॉर्ड किए गए रॉ ऑडियो या किसी ऐसे फ़ॉर्मैट को उपयोगकर्ता के डिवाइस पर परसिस्टेंट स्टोरेज में सेव नहीं किया जाना चाहिए या डिवाइस से बाहर नहीं भेजा जाना चाहिए जिसे वापस मूल ऑडियो या उसके जैसा ऑडियो में बदला जा सकता हो. ऐसा सिर्फ़ उपयोगकर्ता की सहमति के साथ किया जा सकता है.
9.8.3. कनेक्टिविटी
अगर डिवाइस में यूएसबी पोर्ट है और वह यूएसबी पेरिफ़रल मोड के साथ काम करता है, तो:
- [C-1-1] यूएसबी पोर्ट के ज़रिए शेयर किए गए स्टोरेज के कॉन्टेंट को ऐक्सेस करने की अनुमति देने से पहले, उपयोगकर्ता की सहमति मांगने वाला यूज़र इंटरफ़ेस (यूआई) दिखाना ज़रूरी है.
9.8.4. नेटवर्क ट्रैफ़िक
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] सिस्टम के भरोसेमंद सर्टिफ़िकेट देने वाली संस्था (सीए) के स्टोर के लिए, उसी रूट सर्टिफ़िकेट को पहले से इंस्टॉल करना होगा जो अपस्ट्रीम Android ओपन सोर्स प्रोजेक्ट में दिया गया है.
- [C-0-2] डिवाइस को खाली उपयोगकर्ता रूट सीए स्टोर के साथ शिप किया जाना चाहिए.
- [C-0-3] जब कोई उपयोगकर्ता रूट सीए जोड़ता है, तो उसे एक चेतावनी दिखानी चाहिए. इसमें यह बताया जाना चाहिए कि नेटवर्क ट्रैफ़िक की निगरानी की जा सकती है.
अगर डिवाइस का ट्रैफ़िक वीपीएन से होकर जाता है, तो डिवाइस के लिए लागू की गई सेटिंग:
- [C-1-1] उपयोगकर्ता को चेतावनी दिखनी चाहिए, जिसमें इनमें से कोई एक बात बताई गई हो:
- उस नेटवर्क ट्रैफ़िक की निगरानी की जा सकती है.
- वह नेटवर्क ट्रैफ़िक, वीपीएन की सुविधा देने वाले किसी खास वीपीएन ऐप्लिकेशन से होकर गुज़र रहा है.
अगर डिवाइसों में ऐसा सिस्टम मौजूद है जो प्रॉक्सी सर्वर या वीपीएन गेटवे के ज़रिए नेटवर्क डेटा ट्रैफ़िक को रूट करता है, तो:android.permission.CONTROL_VPN
- [C-2-1] उस वीपीएन को चालू करने से पहले, उपयोगकर्ता की सहमति लेना ज़रूरी है. हालांकि, अगर डिवाइस नीति कंट्रोलर ने
DevicePolicyManager.setAlwaysOnVpnPackage()के ज़रिए वीपीएन चालू किया है, तो उपयोगकर्ता की सहमति लेने की ज़रूरत नहीं है. हालांकि, उसे इसकी सूचना देना ज़रूरी है.
9.9. डेटा स्टोरेज एन्क्रिप्शन
अगर डिवाइस में सुरक्षित लॉक स्क्रीन की सुविधा काम करती है, जैसा कि सेक्शन 9.11.1 में बताया गया है, तो:
- [C-1-1] डिवाइस में ऐप्लिकेशन के निजी डेटा (
/data partition) और ऐप्लिकेशन के शेयर किए गए स्टोरेज पार्टिशन (/sdcard partition) के डेटा को एन्क्रिप्ट (सुरक्षित) करने की सुविधा होनी चाहिए. ऐसा तब होना चाहिए, जब ऐप्लिकेशन डिवाइस का स्थायी और हटाया न जा सकने वाला हिस्सा हो.
अगर डिवाइसों पर, 9.11.1 सेक्शन में बताई गई सुरक्षित लॉक स्क्रीन की सुविधा काम करती है और वे 50 एमबी/सेकंड से ज़्यादा की क्रिप्टो परफ़ॉर्मेंस के साथ, ऐडवांस एन्क्रिप्शन स्टैंडर्ड (एईएस) का इस्तेमाल करके डेटा स्टोरेज को एन्क्रिप्ट (सुरक्षित) करने की सुविधा देते हैं, तो:
-
[C-2-1] जब उपयोगकर्ता डिवाइस को पहली बार सेटअप कर लेता है, तब डेटा स्टोरेज एन्क्रिप्शन की सुविधा डिफ़ॉल्ट रूप से चालू होनी चाहिए. अगर डिवाइसों को पहले से ही Android के किसी पुराने वर्शन पर लॉन्च किया गया है और उसमें डिफ़ॉल्ट रूप से एन्क्रिप्शन की सुविधा बंद है, तो सिस्टम सॉफ़्टवेयर को अपडेट करके, डिवाइस इस ज़रूरी शर्त को पूरा नहीं कर सकता. इसलिए, हो सकता है कि उसे इस शर्त से छूट मिल जाए.
-
उसे डेटा स्टोरेज को एन्क्रिप्ट करने की ऊपर दी गई ज़रूरी शर्तों को पूरा करना चाहिए. इसके लिए, अलग-अलग फ़ाइलों को अलग-अलग तरीकों से एन्क्रिप्ट करने का तरीका (एफ़बीई) लागू करना होगा.
9.9.1. डायरेक्ट बूट
डिवाइस में सेट किए गए सिस्टम के लिए:
-
[C-0-1] भले ही, डिवाइस स्टोरेज एन्क्रिप्शन के साथ काम न करते हों, लेकिन उनमें डायरेक्ट बूट मोड एपीआई लागू करना ज़रूरी है.
-
[C-0-2]
ACTION_LOCKED_BOOT_COMPLETEDऔरACTION_USER_UNLOCKEDइंटेंट को ब्रॉडकास्ट करना ज़रूरी है. इससे डायरेक्ट बूट की सुविधा वाले ऐप्लिकेशन को यह पता चलता है कि उपयोगकर्ता के लिए, डिवाइस एन्क्रिप्ट (डीई) और क्रेडेंशियल एन्क्रिप्ट (सीई) किए गए स्टोरेज उपलब्ध हैं.
9.9.2. अलग-अलग फ़ाइलों को अलग-अलग तरीकों से एन्क्रिप्ट करने का तरीका
अगर डिवाइस में FBE की सुविधा काम करती है, तो:
- [C-1-1] डिवाइस को बूट अप करने के लिए, उपयोगकर्ता से क्रेडेंशियल नहीं मांगे जाने चाहिए. साथ ही,
ACTION_LOCKED_BOOT_COMPLETEDमैसेज ब्रॉडकास्ट होने के बाद, डायरेक्ट बूट की सुविधा वाले ऐप्लिकेशन को डिवाइस के एन्क्रिप्ट (डीई) किए गए स्टोरेज को ऐक्सेस करने की अनुमति दी जानी चाहिए. - [C-1-2] उपयोगकर्ता के डिवाइस को अनलॉक करने के बाद ही, क्रेडेंशियल एन्क्रिप्ट (सीई) किए गए स्टोरेज को ऐक्सेस करने की अनुमति मिलनी चाहिए. इसके लिए, उपयोगकर्ता को अपने क्रेडेंशियल (जैसे, पासकोड, पिन, पैटर्न या फ़िंगरप्रिंट) देने होंगे और
ACTION_USER_UNLOCKEDमैसेज ब्रॉडकास्ट किया जाएगा. - [C-1-3] उपयोगकर्ता के दिए गए क्रेडेंशियल के बिना, सीई से सुरक्षित स्टोरेज को अनलॉक करने का कोई तरीका नहीं देना चाहिए.
- [C-1-4] वेरिफ़ाइड बूट की सुविधा काम करनी चाहिए. साथ ही, यह पक्का करना चाहिए कि DE कुंजियां, क्रिप्टोग्राफ़िक तरीके से डिवाइस के हार्डवेयर रूट ऑफ़ ट्रस्ट से जुड़ी हों.
- [C-1-5] XTS मोड में, 256 बिट की कुंजी की लंबाई के साथ AES का इस्तेमाल करके, फ़ाइल के कॉन्टेंट को एन्क्रिप्ट (सुरक्षित) करने की सुविधा होनी चाहिए.
-
[C-1-6] फ़ाइल के नाम को एन्क्रिप्ट करने के लिए, AES का इस्तेमाल किया जाना चाहिए. साथ ही, सीबीसी-सीटीएस मोड में 256-बिट की कुंजी का इस्तेमाल किया जाना चाहिए.
-
सीई और डीई स्टोरेज एरिया को सुरक्षित रखने वाले पासकोड:
-
[C-1-7] इसे क्रिप्टोग्राफ़िक तरीके से, हार्डवेयर से सुरक्षित कुंजी या डेटा वाले कीस्टोर से बाइंड किया जाना चाहिए.
- [C-1-8] CE कुंजियों को उपयोगकर्ता की लॉक स्क्रीन के क्रेडेंशियल से बाइंड किया जाना चाहिए.
- [C-1-9] अगर उपयोगकर्ता ने लॉक स्क्रीन के क्रेडेंशियल नहीं दिए हैं, तो सीई कुंजियों को डिफ़ॉल्ट पासकोड से बाइंड किया जाना चाहिए.
-
[C-1-10] यूनीक और अलग होनी चाहिए. दूसरे शब्दों में, किसी भी उपयोगकर्ता की CE या DE कुंजी, किसी अन्य उपयोगकर्ता की CE या DE कुंजियों से मेल नहीं खानी चाहिए.
-
[C-1-11] डिफ़ॉल्ट रूप से, ज़रूरी तौर पर इस्तेमाल किए जाने वाले सिफ़र, कुंजी की लंबाई, और मोड का इस्तेमाल करना चाहिए.
-
प्रीलोड किए गए ज़रूरी ऐप्लिकेशन (जैसे, अलार्म, फ़ोन, Messenger) को डायरेक्ट बूट के बारे में जानकारी होनी चाहिए.
- फ़ाइल के कॉन्टेंट और फ़ाइल के नाम को एन्क्रिप्ट (सुरक्षित) करने के लिए, अन्य सिफ़र, कुंजी की लंबाई, और मोड इस्तेमाल किए जा सकते हैं.
अपस्ट्रीम Android Open Source प्रोजेक्ट, Linux कर्नेल ext4 एन्क्रिप्शन सुविधा के आधार पर इस सुविधा को लागू करने का पसंदीदा तरीका उपलब्ध कराता है.
9.9.3. पूरी डिस्क को एन्क्रिप्ट (सुरक्षित) करना
अगर डिवाइस में पूरी डिस्क को सुरक्षित रखने (एफ़डीई) की सुविधा काम करती है, तो:
- [C-1-1] AES का इस्तेमाल 128-बिट (या इससे ज़्यादा) की कुंजी के साथ किया जाना चाहिए. साथ ही, स्टोरेज के लिए डिज़ाइन किए गए मोड का इस्तेमाल किया जाना चाहिए. उदाहरण के लिए, AES-XTS, AES-CBC-ESSIV.
- [C-1-2] एन्क्रिप्शन की को रैप करने के लिए, डिफ़ॉल्ट पासकोड का इस्तेमाल करना ज़रूरी है. साथ ही, एन्क्रिप्ट किए बिना किसी भी समय एन्क्रिप्शन की को स्टोरेज में नहीं लिखना चाहिए.
- [C-1-3] उपयोगकर्ता को एन्क्रिप्शन कुंजी को एईएस एन्क्रिप्ट करने की सुविधा मिलनी चाहिए.हालांकि, अगर एन्क्रिप्शन कुंजी का इस्तेमाल किया जा रहा है, तो ऐसा नहीं किया जा सकता. साथ ही, लॉक स्क्रीन के क्रेडेंशियल को धीरे-धीरे स्ट्रेच करने वाले एल्गोरिदम (जैसे, PBKDF2 या scrypt) का इस्तेमाल करके स्ट्रेच किया जाना चाहिए.
- [C-1-4] अगर उपयोगकर्ता ने लॉक स्क्रीन के क्रेडेंशियल नहीं दिए हैं या एन्क्रिप्शन के लिए पासकोड के इस्तेमाल को बंद कर दिया है और डिवाइस में हार्डवेयर की मदद से सुरक्षित किया गया कीस्टोर मौजूद है, तो ऊपर दिया गया डिफ़ॉल्ट पासवर्ड स्ट्रेचिंग एल्गोरिदम, उस कीस्टोर से क्रिप्टोग्राफ़िक रूप से जुड़ा होना चाहिए.
- [C-1-5] एन्क्रिप्शन कुंजी को डिवाइस से बाहर नहीं भेजना चाहिए. भले ही, उसे उपयोगकर्ता के पासकोड और/या हार्डवेयर से जुड़ी कुंजी के साथ रैप किया गया हो.
अपस्ट्रीम Android Open Source प्रोजेक्ट, इस सुविधा को लागू करने का सबसे अच्छा तरीका बताता है. यह Linux कर्नल की dm-crypt सुविधा पर आधारित है.
9.10. डिवाइस इंटिग्रिटी
नीचे दी गई ज़रूरी शर्तों से, डिवाइस की इंटिग्रिटी की स्थिति के बारे में पारदर्शिता बनी रहती है. डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] सिस्टम एपीआई के
PersistentDataBlockManager.getFlashLockState()तरीके का इस्तेमाल करके, यह सही तरीके से रिपोर्ट करना ज़रूरी है कि बूटलोडर की स्थिति, सिस्टम इमेज को फ़्लैश करने की अनुमति देती है या नहीं.FLASH_LOCK_UNKNOWNस्थिति, Android के पुराने वर्शन से अपग्रेड करने वाले डिवाइसों के लिए रिज़र्व की गई है. ऐसा इसलिए, क्योंकि इस नए सिस्टम एपीआई तरीके का इस्तेमाल पुराने वर्शन में नहीं किया जा सकता था.
वेरिफ़ाइड बूट एक ऐसी सुविधा है जो डिवाइस के सॉफ़्टवेयर की सुरक्षा की गारंटी देती है. अगर किसी डिवाइस पर यह सुविधा काम करती है, तो:
- [C-1-1] प्लैटफ़ॉर्म के फ़ीचर फ़्लैग
android.software.verified_bootके बारे में एलान करना ज़रूरी है. - [C-1-2] हर बूट सीक्वेंस पर पुष्टि की जानी चाहिए.
- [C-1-3] पुष्टि की प्रोसेस, हार्डवेयर की ऐसी कुंजी से शुरू होनी चाहिए जिसे बदला नहीं जा सकता. यह कुंजी, रूट ऑफ़ ट्रस्ट होती है. साथ ही, यह प्रोसेस सिस्टम पार्टीशन तक पूरी होनी चाहिए.
- [C-1-4] अगले चरण में कोड को लागू करने से पहले, पुष्टि के हर चरण को लागू करना होगा. इससे अगले चरण में मौजूद सभी बाइट की पुष्टि की जा सकेगी और यह पता लगाया जा सकेगा कि वे सही हैं या नहीं.
- [C-1-5] हैशिंग एल्गोरिदम (SHA-256) और सार्वजनिक पासकोड के साइज़ (RSA-2048) के लिए, NIST की मौजूदा सलाह के मुताबिक पुष्टि करने वाले एल्गोरिदम का इस्तेमाल करना ज़रूरी है.
- [C-1-6] सिस्टम की पुष्टि न होने पर, बूटिंग पूरी करने की अनुमति नहीं दी जानी चाहिए. हालांकि, अगर उपयोगकर्ता बूटिंग जारी रखने की सहमति देता है, तो ऐसा किया जा सकता है. इस मामले में, पुष्टि न किए गए किसी भी स्टोरेज ब्लॉक के डेटा का इस्तेमाल नहीं किया जाना चाहिए.
- [C-1-7] डिवाइस पर पुष्टि किए गए पार्टीशन में बदलाव करने की अनुमति नहीं देनी चाहिए. ऐसा तब तक नहीं किया जाना चाहिए, जब तक उपयोगकर्ता ने बूट लोडर को साफ़ तौर पर अनलॉक न किया हो.
- [SR] अगर डिवाइस में कई अलग-अलग चिप हैं (जैसे कि रेडियो, खास इमेज प्रोसेसर), तो हमारा सुझाव है कि बूट होने पर हर स्टेज की पुष्टि करने के लिए, उन चिप में से हर एक की बूट प्रोसेस की पुष्टि की जाए.
- [SR] बूटलोडर के अनलॉक होने पर, छेड़छाड़ से सुरक्षित स्टोरेज का इस्तेमाल करने का सुझाव दिया जाता है. टैंपर-एविडेंट स्टोरेज का मतलब है कि बूट लोडर यह पता लगा सकता है कि एचएलओएस (हाई लेवल ऑपरेटिंग सिस्टम) में स्टोरेज के साथ छेड़छाड़ की गई है या नहीं.
- [SR] डिवाइस का इस्तेमाल करते समय, उपयोगकर्ता को सूचना देने का सुझाव दिया जाता है. साथ ही, बूट लोडर लॉक मोड से बूट लोडर अनलॉक मोड में ट्रांज़िशन की अनुमति देने से पहले, पुष्टि करना ज़रूरी है.
- [SR] एचएलओएस (जैसे, बूट, सिस्टम पार्टिशन) के लिए रोलबैक सुरक्षा लागू करने का सुझाव दिया जाता है. साथ ही, ओएस के कम से कम ज़रूरी वर्शन का पता लगाने के लिए इस्तेमाल किए गए मेटाडेटा को सेव करने के लिए, ऐसे स्टोरेज का इस्तेमाल करने का सुझाव दिया जाता है जिसमें छेड़छाड़ का पता लगाया जा सके.
- उसे ऐसे किसी भी कॉम्पोनेंट के लिए रोलबैक सुरक्षा लागू करनी चाहिए जिसमें फ़र्मवेयर लगातार काम करता रहता है. जैसे, मॉडेम, कैमरा. साथ ही, उसे ऐसे स्टोरेज का इस्तेमाल करना चाहिए जिसमें छेड़छाड़ का पता चल सके. इस स्टोरेज में, कम से कम अनुमत वर्शन का पता लगाने के लिए इस्तेमाल किया गया मेटाडेटा सेव किया जाता है.
अपस्ट्रीम Android ओपन सोर्स प्रोजेक्ट, external/avb/ रिपॉज़िटरी में इस सुविधा को लागू करने का सबसे सही तरीका बताता है. इसे Android को लोड करने के लिए इस्तेमाल किए जाने वाले बूट लोडर में इंटिग्रेट किया जा सकता है.
ऐडवांस एन्क्रिप्शन स्टैंडर्ड (एईएस) की क्रिप्टोग्राफ़िक परफ़ॉर्मेंस 50 MiB/सेकंड से ज़्यादा वाले डिवाइसों के लिए:
- [C-2-1] डिवाइस इंटिग्रिटी के लिए, वेरिफ़ाइड बूट की सुविधा उपलब्ध होनी चाहिए.
अगर Android के पुराने वर्शन पर, ‘वेरिफ़ाइड बूट’ सुविधा के बिना ही कोई डिवाइस लॉन्च कर दिया गया है, तो सिस्टम सॉफ़्टवेयर को अपडेट करके उस डिवाइस पर यह सुविधा नहीं जोड़ी जा सकती. इसलिए, ऐसे डिवाइसों को इस ज़रूरी शर्त से छूट दी गई है.
9.11. कुंजियां और क्रेडेंशियल
Android Keystore System की मदद से, ऐप्लिकेशन डेवलपर क्रिप्टोग्राफ़िक पासकोड को किसी कंटेनर में सेव कर सकते हैं. साथ ही, KeyChain API या Keystore API के ज़रिए, क्रिप्टोग्राफ़िक कार्रवाइयों में उनका इस्तेमाल कर सकते हैं. डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] कम से कम 8,192 से ज़्यादा कुंजियां इंपोर्ट करने की अनुमति होनी चाहिए.
- [C-0-2] लॉक स्क्रीन पर पुष्टि करने की कोशिशों पर दर की सीमा लागू होनी चाहिए. साथ ही, इसमें एक्सपोनेंशियल बैकऑफ़ एल्गोरिदम होना चाहिए. अगर 150 बार कोशिश करने के बाद भी पुष्टि नहीं हो पाती है, तो हर बार कोशिश करने के बीच कम से कम 24 घंटे का अंतर होना चाहिए.
- जनरेट की जा सकने वाली कुंजियों की संख्या को सीमित नहीं करना चाहिए
अगर डिवाइस में सुरक्षित लॉक स्क्रीन की सुविधा काम करती है, तो:
- [C-1-1] सुरक्षित हार्डवेयर के साथ कीस्टोर लागू करने की सुविधा का बैक अप लेना ज़रूरी है.
- [C-1-2] इसमें RSA, AES, ECDSA, और HMAC क्रिप्टोग्राफ़िक एल्गोरिदम के साथ-साथ MD5, SHA1, और SHA-2 फ़ैमिली हैश फ़ंक्शन लागू होने चाहिए. इससे Android Keystore सिस्टम के साथ काम करने वाले एल्गोरिदम को, कर्नल और उससे ऊपर चलने वाले कोड से सुरक्षित तरीके से अलग किए गए क्षेत्र में सही तरीके से काम करने में मदद मिलती है. सुरक्षित आइसोलेशन को उन सभी संभावित तरीकों को ब्लॉक करना होगा जिनसे कर्नेल या यूज़रस्पेस कोड, आइसोलेट किए गए एनवायरमेंट की इंटरनल स्थिति को ऐक्सेस कर सकता है. इसमें डीएमए भी शामिल है. अपस्ट्रीम Android Open Source Project (AOSP), Trusty को लागू करके इस ज़रूरी शर्त को पूरा करता है. हालांकि, ARM TrustZone पर आधारित कोई अन्य समाधान या तीसरे पक्ष की ओर से समीक्षा किया गया, हाइपरवाइज़र पर आधारित आइसोलेशन को सुरक्षित तरीके से लागू करने का तरीका भी इस्तेमाल किया जा सकता है.
- [C-1-3] लॉक स्क्रीन की पुष्टि, आइसोलेटेड एक्ज़ीक्यूशन एनवायरमेंट में ही की जानी चाहिए. साथ ही, पुष्टि हो जाने के बाद ही, पुष्टि से जुड़ी कुंजियों का इस्तेमाल करने की अनुमति दी जानी चाहिए. अपस्ट्रीम Android ओपन सोर्स प्रोजेक्ट, Gatekeeper हार्डवेयर ऐब्स्ट्रैक्शन लेयर (HAL) और Trusty उपलब्ध कराता है. इनका इस्तेमाल इस ज़रूरी शर्त को पूरा करने के लिए किया जा सकता है.
- [C-1-4] इसमें कुंजी की पुष्टि करने की सुविधा काम करनी चाहिए. इसमें पुष्टि करने के लिए इस्तेमाल की जाने वाली हस्ताक्षर कुंजी को सुरक्षित हार्डवेयर से सुरक्षित किया जाता है और हस्ताक्षर करने की प्रोसेस सुरक्षित हार्डवेयर में की जाती है. अटेस्टेशन साइनिंग की को ज़्यादा से ज़्यादा डिवाइसों के साथ शेयर किया जाना चाहिए, ताकि इन कुंजियों का इस्तेमाल डिवाइस आइडेंटिफ़ायर के तौर पर न किया जा सके. इस ज़रूरी शर्त को पूरा करने का एक तरीका यह है कि जब तक किसी एसकेयू की कम से कम 1,00,000 यूनिट नहीं बन जातीं, तब तक एक ही पुष्टि करने वाली कुंजी शेयर की जाए. अगर किसी एसकेयू की 1,00,000 से ज़्यादा इकाइयां बनाई जाती हैं, तो हर 1,00,000 इकाइयों के लिए अलग-अलग कुंजी का इस्तेमाल किया जा सकता है.
ध्यान दें कि अगर किसी डिवाइस को पहले से ही Android के पुराने वर्शन पर लॉन्च किया गया है, तो उसे हार्डवेयर-बैक्ड कीस्टोर की सुविधा देने और कुंजी की पुष्टि करने की सुविधा देने की ज़रूरत नहीं है. हालांकि, ऐसा तब तक है, जब तक वह android.hardware.fingerprint सुविधा का एलान नहीं करता. इस सुविधा के लिए, हार्डवेयर-बैक्ड कीस्टोर की ज़रूरत होती है.
9.11.1. सुरक्षित लॉक स्क्रीन
अगर डिवाइसों में सुरक्षित लॉक स्क्रीन की सुविधा है और उनमें एक या उससे ज़्यादा ट्रस्ट एजेंट शामिल हैं, जो TrustAgentService System API को लागू करते हैं, तो:
- [C-1-1] सेटिंग और लॉक स्क्रीन के यूज़र इंटरफ़ेस में, उपयोगकर्ता को उन स्थितियों के बारे में बताना ज़रूरी है जिनमें स्क्रीन अपने-आप लॉक होने की सुविधा को कुछ समय के लिए बंद कर दिया जाता है या भरोसेमंद एजेंट की मदद से स्क्रीन को अनलॉक किया जा सकता है. AOSP, "अपने-आप लॉक होने की सेटिंग" और "पावर बटन से तुरंत लॉक होने की सेटिंग" मेन्यू के लिए टेक्स्ट की जानकारी दिखाता है. साथ ही, लॉक स्क्रीन पर अलग से दिखने वाला आइकॉन दिखाता है. इससे, ज़रूरी शर्तें पूरी होती हैं.
- [C-1-2]
DevicePolicyManagerक्लास में मौजूद सभी भरोसेमंद एजेंट एपीआई का पालन करना होगा और उन्हें पूरी तरह से लागू करना होगा. जैसे,KEYGUARD_DISABLE_TRUST_AGENTSकॉन्स्टेंट. - [C-1-3]
TrustAgentService.addEscrowToken()फ़ंक्शन को ऐसे डिवाइस पर पूरी तरह से लागू नहीं किया जाना चाहिए जिसका इस्तेमाल मुख्य निजी डिवाइस के तौर पर किया जाता है.जैसे, हैंडहेल्ड डिवाइस. हालाँकि, इस फ़ंक्शन को आम तौर पर शेयर किए जाने वाले डिवाइसों पर पूरी तरह से लागू किया जा सकता है. - [C-1-4]
TrustAgentService.addEscrowToken()को डिवाइस पर टोकन सेव करने से पहले, उन्हें एन्क्रिप्ट (सुरक्षित) करना होगा. - [C-1-5] डिवाइस पर एन्क्रिप्शन कुंजी सेव नहीं की जानी चाहिए.
- [C-1-6] डेटा स्टोरेज को डिक्रिप्ट करने के लिए, एस्क्रो टोकन चालू करने से पहले, उपयोगकर्ता को सुरक्षा से जुड़ी समस्याओं के बारे में बताना ज़रूरी है.
अगर डिवाइसों में, लॉक स्क्रीन को अनलॉक करने के लिए पुष्टि करने के तरीके जोड़े जाते हैं या उनमें बदलाव किया जाता है, तो पुष्टि करने के ऐसे तरीके को स्क्रीन लॉक करने का सुरक्षित तरीका माना जाएगा. इसके लिए, उन्हें:
- [C-2-1] यह उपयोगकर्ता की पुष्टि करने का तरीका होना चाहिए. इसके बारे में कुंजी के इस्तेमाल के लिए, उपयोगकर्ता की पुष्टि करना ज़रूरी है में बताया गया है.
- [C-2-2] जब उपयोगकर्ता सुरक्षित लॉक स्क्रीन को अनलॉक करता है, तब तीसरे पक्ष के डेवलपर ऐप्लिकेशन के लिए सभी कुंजियां अनलॉक होनी चाहिए. उदाहरण के लिए, सभी कुंजियां तीसरे पक्ष के डेवलपर ऐप्लिकेशन के लिए, ज़रूरी एपीआई के ज़रिए उपलब्ध होनी चाहिए. जैसे,
createConfirmDeviceCredentialIntentऔरsetUserAuthenticationRequired.
अगर डिवाइसों में, लॉक स्क्रीन को अनलॉक करने के लिए पुष्टि करने के तरीकों को जोड़ा या उनमें बदलाव किया जाता है, तो पुष्टि करने के ऐसे तरीके को स्क्रीन लॉक करने का सुरक्षित तरीका माना जाएगा. हालांकि, इसके लिए ज़रूरी है कि:
- [C-3-1] इनपुट की सबसे छोटी मान्य लंबाई की एंट्रॉपी, 10 बिट से ज़्यादा होनी चाहिए.
- [C-3-2] सभी संभावित इनपुट की ज़्यादा से ज़्यादा एंट्रॉपी 18 बिट से ज़्यादा होनी चाहिए.
- [C-3-3] यह ज़रूरी है कि AOSP में लागू किए गए और उपलब्ध कराए गए, पुष्टि करने के किसी भी मौजूदा तरीके (पिन, पैटर्न, पासवर्ड) को न बदला जाए.
- [C-3-4] इस सुविधा को तब बंद किया जाना चाहिए, जब डिवाइस नीति कंट्रोलर (डीपीसी) ऐप्लिकेशन ने
DevicePolicyManager.setPasswordQuality()तरीके से, पासवर्ड की क्वालिटी से जुड़ी नीति को सेट किया हो. साथ ही, क्वालिटी कॉन्स्टेंटPASSWORD_QUALITY_SOMETHINGसे ज़्यादा पाबंदी वाला कॉन्स्टेंट सेट किया हो.
अगर डिवाइसों पर, लॉक स्क्रीन को अनलॉक करने के लिए पुष्टि करने के तरीकों को जोड़ा या बदला जाता है, तो यह पुष्टि किसी फ़िज़िकल टोकन या जगह के आधार पर की जाती है. ऐसे में, पुष्टि करने के इस तरीके को स्क्रीन लॉक करने का सुरक्षित तरीका माना जाएगा. इसके लिए, इन शर्तों को पूरा करना होगा:
- [C-4-1] डिवाइस में पुष्टि करने के मुख्य तरीकों में से किसी एक का इस्तेमाल करने के लिए, फ़ॉल-बैक मैकेनिज़्म होना चाहिए. यह मैकेनिज़्म, किसी जाने-पहचाने सीक्रेट पर आधारित हो और सुरक्षित लॉक स्क्रीन के तौर पर इस्तेमाल किए जाने की ज़रूरी शर्तों को पूरा करता हो.
- [C-4-2] इसे बंद किया जाना चाहिए. साथ ही, डिवाइस नीति कंट्रोलर (डीपीसी) ऐप्लिकेशन के
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS)याDevicePolicyManager.setPasswordQuality()तरीके से नीति सेट करने पर, सिर्फ़ मुख्य पुष्टि करने वाले तरीके से स्क्रीन को अनलॉक करने की अनुमति दी जानी चाहिए. साथ ही,PASSWORD_QUALITY_UNSPECIFIEDसे ज़्यादा पाबंदियों वाला क्वालिटी कॉन्स्टेंट इस्तेमाल किया जाना चाहिए. - [C-4-3] उपयोगकर्ता को कम से कम हर 72 घंटे में एक बार, पुष्टि करने के मुख्य तरीके (जैसे, पिन, पैटर्न, पासवर्ड) का इस्तेमाल करने के लिए कहा जाना चाहिए.
अगर डिवाइसों पर, बायोमेट्रिक डेटा के आधार पर लॉक स्क्रीन को अनलॉक करने के लिए पुष्टि करने के तरीके जोड़े जाते हैं या उनमें बदलाव किया जाता है, तो पुष्टि करने के ऐसे तरीके को स्क्रीन लॉक करने का सुरक्षित तरीका माना जाएगा. इसके लिए, उन्हें:
- [C-5-1] डिवाइस में पुष्टि करने के मुख्य तरीकों में से किसी एक का इस्तेमाल करने के लिए, फ़ॉल-बैक मैकेनिज़्म होना चाहिए. यह मैकेनिज़्म, किसी ऐसे सीक्रेट पर आधारित होना चाहिए जिसके बारे में उपयोगकर्ता को पता हो. साथ ही, यह सुरक्षित लॉक स्क्रीन के तौर पर इस्तेमाल किए जाने की ज़रूरी शर्तों को पूरा करता हो.
- [C-5-2] डिवाइस नीति कंट्रोलर (डीपीसी) ऐप्लिकेशन के
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_FINGERPRINT)तरीके को कॉल करके, keguard सुविधा की नीति सेट करने पर, इसे बंद किया जाना चाहिए. साथ ही, स्क्रीन को अनलॉक करने के लिए सिर्फ़ मुख्य पुष्टि करने की अनुमति दी जानी चाहिए. - [C-5-3] इसमें फ़िंगरप्रिंट सेंसर के लिए, सेक्शन 7.3.10 में बताए गए फ़ॉल्स ऐक्सेप्टेंस रेट (एफ़एआर) के बराबर या उससे कम एफ़एआर होना चाहिए. अगर ऐसा नहीं है, तो इसे बंद कर देना चाहिए. साथ ही, डिवाइस पॉलिसी कंट्रोलर (डीपीसी) ऐप्लिकेशन के
DevicePolicyManager.setPasswordQuality()तरीके से,PASSWORD_QUALITY_BIOMETRIC_WEAKसे ज़्यादा पाबंदी वाले क्वालिटी कॉन्स्टेंट के साथ पासवर्ड क्वालिटी की नीति सेट करने पर, स्क्रीन को अनलॉक करने के लिए सिर्फ़ प्राइमरी ऑथेंटिकेशन की अनुमति देनी चाहिए. - [C-5-4] उपयोगकर्ता को कम से कम हर 72 घंटे में एक बार या इससे कम समय में, पुष्टि करने के मुख्य तरीके (जैसे, पिन, पैटर्न, पासवर्ड) का इस्तेमाल करने के लिए कहा जाना चाहिए.
अगर डिवाइसों में, लॉक स्क्रीन को अनलॉक करने के लिए पुष्टि करने के तरीके जोड़े या बदले जाते हैं और पुष्टि करने के ऐसे तरीके का इस्तेमाल कीगार्ड को अनलॉक करने के लिए किया जाएगा, लेकिन इसे सुरक्षित लॉक स्क्रीन के तौर पर नहीं माना जाएगा, तो:
- [C-6-1]
KeyguardManager.isKeyguardSecure()औरKeyguardManager.isDeviceSecure(), दोनों तरीकों के लिएfalseवैल्यू वापस मिलनी चाहिए. - [C-6-2] जब डिवाइस नीति कंट्रोलर (डीपीसी) ऐप्लिकेशन ने
DevicePolicyManager.setPasswordQuality()तरीके से,PASSWORD_QUALITY_UNSPECIFIEDसे ज़्यादा पाबंदी वाले क्वालिटी कॉन्स्टेंट के साथ पासवर्ड की क्वालिटी की नीति सेट की हो, तब इसे बंद किया जाना चाहिए. - [C-6-3] यह ज़रूरी है कि
DevicePolicyManager.setPasswordExpirationTimeout()की ओर से सेट किए गए, पासवर्ड की समयसीमा खत्म होने के टाइमर को रीसेट न किया जाए. - [C-6-4] अगर ऐप्लिकेशन ने
KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)) को कॉल किया है, तो उसे कीस्टोर के ऐक्सेस की पुष्टि नहीं करनी चाहिए.
9.12. डेटा हटाना
डिवाइस में सेट किए गए सभी सिस्टम के लिए:
- [C-0-1] उपयोगकर्ताओं को "फ़ैक्ट्री डेटा रीसेट" करने का तरीका उपलब्ध कराना ज़रूरी है.
- [C-0-2] को उपयोगकर्ता के जनरेट किए गए सभी डेटा को मिटाना होगा. इसका मतलब है कि इन इवेंट को छोड़कर, सभी इवेंट का डेटा देखा जा सकता है:
- सिस्टम इमेज
- सिस्टम इमेज के लिए ज़रूरी ऑपरेटिंग सिस्टम की कोई भी फ़ाइल
- [C-0-3] डेटा को इस तरह से मिटाना होगा कि वह NIST SP800-88 जैसे इंडस्ट्री स्टैंडर्ड के मुताबिक हो.
- [C-0-4] जब मुख्य उपयोगकर्ता का डिवाइस नीति कंट्रोलर ऐप्लिकेशन,
DevicePolicyManager.wipeData()एपीआई को कॉल करता है, तब ऊपर दी गई "फ़ैक्ट्री डेटा रीसेट" प्रोसेस को ट्रिगर करना ज़रूरी है. - ऐसा हो सकता है कि यह डिवाइस, डेटा को तेज़ी से मिटाने का विकल्प दे. हालांकि, इससे सिर्फ़ लॉजिकल डेटा मिटाया जाता है.
9.13. सुरक्षित बूट मोड
Android में सेफ़ बूट मोड की सुविधा मिलती है. इसकी मदद से उपयोगकर्ता, ऐसे मोड में बूट अप कर सकते हैं जहां सिर्फ़ पहले से इंस्टॉल किए गए सिस्टम ऐप्लिकेशन को चलाने की अनुमति होती है. साथ ही, तीसरे पक्ष के सभी ऐप्लिकेशन बंद हो जाते हैं. इस मोड को "सेफ़ बूट मोड" कहा जाता है. इससे उपयोगकर्ता को तीसरे पक्ष के ऐसे ऐप्लिकेशन अनइंस्टॉल करने की सुविधा मिलती है जो नुकसान पहुंचा सकते हैं.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [SR] सुरक्षित बूट मोड लागू करने का सुझाव दिया जाता है.
अगर डिवाइस में सेफ़ बूट मोड लागू किया जाता है, तो:
-
[C-1-1] उपयोगकर्ता को सुरक्षित बूट मोड में जाने का विकल्प इस तरह से देना होगा कि डिवाइस पर इंस्टॉल किए गए तीसरे पक्ष के ऐप्लिकेशन, इसमें कोई रुकावट न डालें. हालांकि, अगर तीसरे पक्ष का ऐप्लिकेशन, डिवाइस नीति कंट्रोलर है और उसने
UserManager.DISALLOW_SAFE_BOOTफ़्लैग को सही के तौर पर सेट किया है, तो वह रुकावट डाल सकता है. -
[C-1-2] उपयोगकर्ता को सुरक्षित मोड में, तीसरे पक्ष के किसी भी ऐप्लिकेशन को अनइंस्टॉल करने की सुविधा मिलनी चाहिए.
-
उपयोगकर्ता को बूट मेन्यू से सुरक्षित बूट मोड में जाने का विकल्प देना चाहिए. इसके लिए, सामान्य बूट से अलग वर्कफ़्लो का इस्तेमाल करना चाहिए.
9.14. ऑटोमोटिव वाहन सिस्टम आइसोलेशन
Android Automotive डिवाइसों से यह उम्मीद की जाती है कि वे व्हीकल एचएएल का इस्तेमाल करके, वाहन के ज़रूरी सबसिस्टम के साथ डेटा शेयर करें. साथ ही, सीएएन बस जैसे वाहन के नेटवर्क पर मैसेज भेजें और पाएं.
डेटा एक्सचेंज को सुरक्षित किया जा सकता है. इसके लिए, Android फ़्रेमवर्क लेयर के नीचे सुरक्षा से जुड़ी सुविधाएं लागू करें. इससे इन सबसिस्टम के साथ नुकसान पहुंचाने वाले या अनजाने में होने वाले इंटरैक्शन को रोका जा सकता है.
10. सॉफ़्टवेयर कंपैटिबिलिटी टेस्टिंग
डिवाइसों को लागू करने के लिए, इस सेक्शन में बताए गए सभी टेस्ट पास करना ज़रूरी है. हालांकि, ध्यान दें कि कोई भी सॉफ़्टवेयर टेस्ट पैकेज पूरी तरह से भरोसेमंद नहीं होता. इस वजह से, डिवाइस बनाने वाली कंपनियों को सफ़ारिश की जाती है कि वे Android ओपन सोर्स प्रोजेक्ट से उपलब्ध Android के रेफ़रंस और पसंदीदा वर्शन में कम से कम बदलाव करें. इससे ऐसी गड़बड़ियां होने का जोखिम कम हो जाएगा जिनकी वजह से, डिवाइसों के साथ काम न करने की समस्याएं होती हैं. इन समस्याओं को ठीक करने के लिए, डिवाइसों को फिर से अपडेट करना पड़ सकता है.
10.1. Compatibility Test Suite
डिवाइस में सेट किए गए सिस्टम के लिए:
-
[C-0-1] डिवाइस पर शिपिंग के लिए उपलब्ध फ़ाइनल सॉफ़्टवेयर का इस्तेमाल करके, Android Open Source Project से उपलब्ध Android Compatibility Test Suite (CTS) को पास करना ज़रूरी है.
-
[C-0-2] यह पक्का करना ज़रूरी है कि सीटीएस में अस्पष्टता होने पर, यह सुविधा काम करे. साथ ही, रेफ़रंस सोर्स कोड के कुछ हिस्सों को फिर से लागू करने पर भी यह सुविधा काम करे.
CTS को किसी असली डिवाइस पर चलाने के लिए डिज़ाइन किया गया है. किसी भी सॉफ़्टवेयर की तरह, CTS में भी बग हो सकते हैं. सीटीएस को इस कंपैटिबिलिटी डेफ़िनिशन से अलग वर्शन किया जाएगा. साथ ही, Android 8.0 के लिए सीटीएस के कई वर्शन रिलीज़ किए जा सकते हैं.
डिवाइस में सेट किए गए सिस्टम के लिए:
-
[C-0-3] डिवाइस का सॉफ़्टवेयर तैयार होने के समय, CTS का सबसे नया वर्शन पास करना ज़रूरी है.
-
Android Open Source ट्री में, रेफ़रंस के तौर पर दिए गए कोड का ज़्यादा से ज़्यादा इस्तेमाल करना चाहिए.
10.2. सीटीएस की पुष्टि करने वाला टूल
CTS Verifier, Compatibility Test Suite में शामिल होता है. इसे किसी व्यक्ति को चलाना होता है, ताकि उन सुविधाओं की जांच की जा सके जिनकी जांच ऑटोमेटेड सिस्टम नहीं कर सकता. जैसे, कैमरे और सेंसर का सही तरीके से काम करना.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-1] CTS verifier में, लागू होने वाले सभी मामलों को सही तरीके से लागू करना ज़रूरी है.
CTS Verifier में कई तरह के हार्डवेयर के लिए टेस्ट होते हैं. इनमें कुछ ऐसे हार्डवेयर भी शामिल हैं जिनका इस्तेमाल करना ज़रूरी नहीं है.
डिवाइस में सेट किए गए सिस्टम के लिए:
- [C-0-2] यह ज़रूरी है कि डिवाइस में मौजूद हार्डवेयर के लिए, सभी टेस्ट पास किए गए हों. उदाहरण के लिए, अगर किसी डिवाइस में एक्सलरोमीटर है, तो यह ज़रूरी है कि वह CTS Verifier में एक्सलरोमीटर के टेस्ट केस को सही तरीके से पूरा करे.
इस कंपैटबिलिटी डेफ़िनिशन डॉक्यूमेंट में, जिन सुविधाओं को 'ज़रूरी नहीं' के तौर पर मार्क किया गया है उनके टेस्ट केस छोड़े जा सकते हैं.
- [C-0-2] ऊपर बताए गए तरीके से, हर डिवाइस और हर बिल्ड पर CTS Verifier को सही तरीके से चलाना ज़रूरी है. हालांकि, कई बिल्ड एक जैसे होते हैं. इसलिए, डिवाइस बनाने वाली कंपनियों को उन बिल्ड पर CTS Verifier चलाने की ज़रूरत नहीं होती जिनमें मामूली अंतर होता है. खास तौर पर, डिवाइस में लागू किए गए ऐसे सिस्टम जिनमें CTS Verifier टेस्ट पास करने वाले सिस्टम से सिर्फ़ शामिल की गई भाषाओं, ब्रैंडिंग वगैरह का अंतर होता है वे CTS Verifier टेस्ट को छोड़ सकते हैं.
11. अपडेट किया जा सकने वाला सॉफ़्टवेयर
- [C-0-1] डिवाइस में, सिस्टम सॉफ़्टवेयर को पूरी तरह से बदलने का तरीका शामिल होना चाहिए. यह ज़रूरी नहीं है कि अपग्रेड “लाइव” हों. इसका मतलब है कि डिवाइस को रीस्टार्ट करना पड़ सकता है.
किसी भी तरीके का इस्तेमाल किया जा सकता है. हालांकि, यह ज़रूरी है कि इससे डिवाइस पर पहले से इंस्टॉल किए गए पूरे सॉफ़्टवेयर को बदला जा सके. उदाहरण के लिए, इनमें से किसी भी तरीके से इस ज़रूरी शर्त को पूरा किया जा सकता है:
- “ओवर-द-एयर (ओटीए)” डाउनलोड की सुविधा, जिसमें रीबूट करके ऑफ़लाइन अपडेट किया जा सकता है.
- होस्ट पीसी से यूएसबी के ज़रिए “टेथर्ड” अपडेट.
-
“ऑफ़लाइन” अपडेट, रीबूट करके और हटाने लायक स्टोरेज डिवाइस पर मौजूद फ़ाइल से अपडेट करके किए जाते हैं.
-
[C-0-2] अपडेट करने के लिए इस्तेमाल किए जाने वाले तरीके में, उपयोगकर्ता के डेटा को मिटाए बिना अपडेट करने की सुविधा होनी चाहिए. इसका मतलब है कि अपडेट करने के तरीके से, ऐप्लिकेशन के निजी डेटा और ऐप्लिकेशन के शेयर किए गए डेटा को सुरक्षित रखना ज़रूरी है. ध्यान दें कि अपस्ट्रीम Android सॉफ़्टवेयर में, अपडेट करने का एक ऐसा तरीका शामिल होता है जो इस ज़रूरी शर्त को पूरा करता है.
अगर डिवाइस में, बिना किसी शुल्क के डेटा कनेक्शन की सुविधा शामिल है, जैसे कि 802.11 या ब्लूटूथ पीएएन (पर्सनल एरिया नेटवर्क) प्रोफ़ाइल, तो:
- [C-1-1] में, रीबूट करके ऑफ़लाइन अपडेट करने के साथ-साथ, ओटीए डाउनलोड करने की सुविधा होनी चाहिए.
Android 6.0 और उसके बाद के वर्शन के साथ लॉन्च होने वाले डिवाइसों के लिए, अपडेट करने के तरीके में यह पुष्टि करने की सुविधा होनी चाहिए कि सिस्टम इमेज, ओटीए के बाद उम्मीद के मुताबिक बाइनरी के तौर पर एक जैसी है. Android 5.1 से, अपस्ट्रीम Android Open Source Project में ब्लॉक-आधारित ओटीए लागू करने की सुविधा जोड़ी गई है. इससे यह ज़रूरी शर्त पूरी होती है.
साथ ही, डिवाइसों में A/B सिस्टम अपडेट की सुविधा होनी चाहिए. AOSP, बूट कंट्रोल HAL का इस्तेमाल करके इस सुविधा को लागू करता है.
अगर डिवाइस के रिलीज़ होने के बाद, उसके लागू करने में कोई गड़बड़ी मिलती है, लेकिन वह गड़बड़ी प्रॉडक्ट के जीवनकाल के दौरान मिलती है. साथ ही, Android Compatibility Team के साथ सलाह-मशवरे के बाद यह तय किया जाता है कि इससे तीसरे पक्ष के ऐप्लिकेशन पर असर पड़ेगा, तो:
- [C-2-1] डिवाइस बनाने वाली कंपनी को, उपलब्ध सॉफ़्टवेयर अपडेट के ज़रिए गड़बड़ी को ठीक करना होगा. इस अपडेट को, ऊपर बताए गए तरीके के मुताबिक लागू किया जा सकता है.
Android में ऐसी सुविधाएं शामिल होती हैं जिनकी मदद से, डिवाइस के मालिक के ऐप्लिकेशन (अगर मौजूद है) को सिस्टम अपडेट इंस्टॉल करने की सुविधा को कंट्रोल करने की अनुमति मिलती है. अगर डिवाइसों के लिए सिस्टम अपडेट सबसिस्टम, android.software.device_admin की जानकारी देता है, तो:
- [C-3-1] SystemUpdatePolicy क्लास में बताए गए व्यवहार को लागू करना ज़रूरी है.
12. दस्तावेज़ में हुए बदलावों का लॉग
इस रिलीज़ में, कंपैटबिलिटी डेफ़िनिशन में किए गए बदलावों की खास जानकारी के लिए:
व्यक्तियों से जुड़े सेक्शन में हुए बदलावों की खास जानकारी के लिए:
- शुरुआती जानकारी
- डिवाइस टाइप
- सॉफ़्टवेयर
- ऐप्लिकेशन पैकेजिंग
- मल्टीमीडिया
- डेवलपर टूल और विकल्प
- हार्डवेयर के साथ काम करने की सुविधा
- परफ़ॉर्मेंस और पावर
- सुरक्षा मॉडल
- सॉफ़्टवेयर की कंपैटिबिलिटी की जांच करना
- अपडेट किया जा सकने वाला सॉफ़्टवेयर
- दस्तावेज़ में हुए बदलावों का लॉग
- हमसे संपर्क करें
12.1. बदलावों का लॉग देखने से जुड़े सुझाव
बदलावों को इस तरह मार्क किया गया है:
-
सीडीडी
साथ काम करने से जुड़ी ज़रूरी शर्तों में अहम बदलाव. -
दस्तावेज़
कॉस्मेटिक या बिल्ड से जुड़े बदलाव.
बेहतर तरीके से देखने के लिए, अपने बदलाव के लॉग वाले यूआरएल में pretty=full और no-merges यूआरएल पैरामीटर जोड़ें.
13. हमसे संपर्क करें
android-compatibility फ़ोरम में शामिल होकर, साफ़ तौर पर जानकारी देने का अनुरोध किया जा सकता है. इसके अलावा, ऐसी कोई भी समस्या बताई जा सकती है जिसके बारे में दस्तावेज़ में जानकारी नहीं दी गई है.