Android 11 प्लैटफ़ॉर्म में, ऐप्लिकेशन के काम करने के तरीके में कुछ बदलाव किए गए हैं. इन बदलावों का असर आपके ऐप्लिकेशन पर पड़ सकता है. ऐप्लिकेशन के काम करने के तरीके में ये बदलाव, Android 11 पर चलने वाले सभी ऐप्लिकेशन पर लागू होते हैं. भले ही, वे targetSdkVersion
के हिसाब से हों या नहीं. आपको अपने ऐप्लिकेशन की जांच करनी चाहिए. इसके बाद, ज़रूरत पड़ने पर उसमें बदलाव करना चाहिए, ताकि ये सुविधाएं सही तरीके से काम कर सकें.
ऐप्लिकेशन के काम करने के तरीके में हुए उन बदलावों की सूची भी देखना न भूलें जिनका असर सिर्फ़ Android 11 को टारगेट करने वाले ऐप्लिकेशन पर पड़ता है.
निजता
Android 11 में उपयोगकर्ता की निजता को बेहतर बनाने के लिए, कुछ बदलाव और पाबंदियां शामिल की गई हैं. इनमें ये शामिल हैं:
- एक बार के लिए अनुमतियां: इससे उपयोगकर्ताओं को, जगह की जानकारी, माइक्रोफ़ोन, और कैमरे की अनुमतियों को कुछ समय के लिए ऐक्सेस करने का विकल्प मिलता है.
- अनुमति के लिए डायलॉग बॉक्स दिखना: किसी अनुमति के लिए बार-बार 'अनुमति नहीं दें' का विकल्प चुनने का मतलब है कि "फिर से न पूछें".
- डेटा ऐक्सेस की ऑडिटिंग: इससे आपको यह जानकारी मिलती है कि आपका ऐप्लिकेशन, निजी डेटा को कहां ऐक्सेस करता है. यह जानकारी, ऐप्लिकेशन के कोड और उस पर निर्भर लाइब्रेरी के कोड, दोनों से मिलती है.
- सिस्टम सूचना विंडो की अनुमतियां: कुछ खास कैटगरी के ऐप्लिकेशन को अनुरोध करने पर,
SYSTEM_ALERT_WINDOW
अनुमति अपने-आप मिल जाती है. साथ ही, जिन इंटेंट मेंACTION_MANAGE_OVERLAY_PERMISSION
इंटेंट ऐक्शन शामिल होता है वे उपयोगकर्ताओं को हमेशा सिस्टम सेटिंग की स्क्रीन पर ले जाते हैं. - स्थायी सिम आइडेंटिफ़ायर:
Android 11 और उसके बाद के वर्शन पर,
getIccId()
के तरीके से, रीसेट नहीं किए जा सकने वाले आईसीसीआईडी को ऐक्सेस करने पर पाबंदी है. यह तरीका, नॉल स्ट्रिंग के बजाय खाली स्ट्रिंग दिखाता है. डिवाइस में इंस्टॉल किए गए सिम की खास पहचान करने के लिए,getSubscriptionId()
के बजाय किसी दूसरे तरीके का इस्तेमाल करें. सदस्यता आईडी, इंस्टॉल किए गए सिम की खास पहचान करने के लिए इंडेक्स वैल्यू (1 से शुरू) देता है. इसमें फ़िज़िकल और इलेक्ट्रॉनिक, दोनों तरह के सिम शामिल हैं. जब तक डिवाइस को फ़ैक्ट्री सेटिंग पर रीसेट नहीं किया जाता, तब तक किसी सिम के लिए इस आइडेंटिफ़ायर की वैल्यू में कोई बदलाव नहीं होता.
ज़्यादा जानने के लिए, निजता पेज देखें.
एक्सपोज़र नोटिफ़िकेशन
Android 11, प्लैटफ़ॉर्म को एक्सपोज़र नोटिफ़िकेशन सिस्टम को ध्यान में रखकर अपडेट करता है. उपयोगकर्ता अब Android 11 पर, डिवाइस की जगह की जानकारी वाली सेटिंग चालू किए बिना भी, एक्सपोज़र नोटिफ़िकेशन ऐप्लिकेशन चला सकते हैं. यह सिर्फ़ एक्सपोज़र नोटिफ़िकेशन सिस्टम के लिए है. इसे इस तरह से डिज़ाइन किया गया है कि इसका इस्तेमाल करने वाले ऐप्लिकेशन, ब्लूटूथ स्कैनिंग की मदद से डिवाइस की जगह की जानकारी का पता नहीं लगा सकते.
उपयोगकर्ता की निजता को बनाए रखने के लिए, अब भी अन्य सभी ऐप्लिकेशन के लिए ब्लूटूथ स्कैनिंग की अनुमति नहीं है. हालांकि, डिवाइस की जगह की जानकारी की सेटिंग चालू होने और उपयोगकर्ता की अनुमति मिलने पर, ऐप्लिकेशन ब्लूटूथ स्कैनिंग कर सकते हैं. ज़्यादा जानकारी के लिए, एक्सपोज़र नोटिफ़िकेशन के बारे में अपडेट वाली हमारी पोस्ट पढ़ें.
सुरक्षा
एसएसएल सॉकेट, डिफ़ॉल्ट रूप से Conscrypt एसएसएल इंजन का इस्तेमाल करते हैं
Android में डिफ़ॉल्ट रूप से लागू SSLSocket
, Conscrypt पर आधारित है.
Android 11 के बाद, यह सुविधा अंदरूनी तौर पर, Conscrypt के SSLEngine
के ऊपर बनाई गई है.
Scudo Hardened Allocator
Android 11, हेप के लिए जगह तय करने के लिए, अंदरूनी तौर पर Scudo Hardened Allocator का इस्तेमाल करता है. Scudo, मेमोरी की सुरक्षा से जुड़े कुछ उल्लंघनों का पता लगा सकता है और उन्हें कम कर सकता है. अगर आपको क्रैश की नेटिव रिपोर्ट में, Scudo से जुड़े क्रैश (उदाहरण के लिए, Scudo ERROR:
) दिख रहे हैं, तो Scudo से जुड़ी समस्या हल करने के लिए दस्तावेज़ देखें.
ऐप्लिकेशन के इस्तेमाल के आंकड़े
उपयोगकर्ताओं की बेहतर सुरक्षा के लिए, Android 11 हर उपयोगकर्ता के ऐप्लिकेशन इस्तेमाल से जुड़े आंकड़ों को क्रेडेंशियल से एन्क्रिप्ट किए गए स्टोरेज में सेव करता है. इसलिए,
न तो सिस्टम और न ही कोई ऐप्लिकेशन उस डेटा को ऐक्सेस कर सकता है, जब तक कि
isUserUnlocked()
true
न दिखाए. ऐसा इनमें से किसी एक स्थिति के बाद होता है:
- सिस्टम के स्टार्टअप होने के बाद, उपयोगकर्ता अपने डिवाइस को पहली बार अनलॉक करता है.
- उपयोगकर्ता, डिवाइस पर अपने खाते पर स्विच करता है.
अगर आपका ऐप्लिकेशन पहले से ही UsageStatsManager
के किसी इंस्टेंस से बंधा है, तो देख लें कि उपयोगकर्ता के डिवाइस को अनलॉक करने के बाद, इस ऑब्जेक्ट के मैथड को कॉल किया जाए.
ऐसा न होने पर, एपीआई अब कोई वैल्यू नहीं दिखाता या खाली वैल्यू दिखाता है.
5G के लिए एम्युलेटर की सुविधा
Android 11 में 5G एपीआई जोड़े गए हैं, ताकि आपके ऐप्लिकेशन में बेहतर सुविधाएं जोड़ी जा सकें. सुविधाओं को जोड़ते समय उनकी जांच करने के लिए, Android SDK टूल के एमुलेटर की नई सुविधाओं का इस्तेमाल किया जा सकता है. यह नई सुविधा, इम्यूलेटर के वर्शन 30.0.22 में जोड़ी गई थी. 5G नेटवर्क सेटिंग चुनने पर, TelephonyDisplayInfo
को OVERRIDE_NETWORK_TYPE_NR_NSA
पर सेट कर दिया जाता है. साथ ही, अनुमानित बैंडविड्थ में बदलाव होता है. साथ ही, आपको यह पुष्टि करने के लिए मेज़रमेंट सेट करने की अनुमति मिलती है कि आपका ऐप्लिकेशन NET_CAPABILITY_TEMPORARILY_NOT_METERED
के स्टेटस में होने वाले बदलावों के हिसाब से सही तरीके से काम कर रहा है या नहीं.
परफ़ॉर्मेंस और डीबग करना
JobScheduler API कॉल की सीमाओं को डीबग करना
Android 11 में, ऐप्लिकेशन के लिए डीबग करने की सुविधा उपलब्ध है. इससे, JobScheduler
एपीआई के ऐसे अनुरोधों की पहचान की जा सकती है जो तय दर से ज़्यादा हैं.
डेवलपर इस सुविधा का इस्तेमाल करके, परफ़ॉर्मेंस से जुड़ी संभावित समस्याओं का पता लगा सकते हैं. जिन ऐप्लिकेशन के debuggable
मेनिफ़ेस्ट एट्रिब्यूट की वैल्यू 'सही है' पर सेट है उनके लिए, JobScheduler
एपीआई को तय सीमा से ज़्यादा बार कॉल करने पर RESULT_FAILURE
दिखेगा.
सीमाएं इस तरह से सेट की जाती हैं कि इस्तेमाल के सही उदाहरणों पर कोई असर न पड़े.
फ़ाइल डिस्क्रिप्टर सैनिटाइज़र (fdsan)
Android 10 में fdsan
(फ़ाइल डिस्क्रिप्टर सैनिटाइज़र) की सुविधा जोड़ी गई है.
fdsan
, फ़ाइल डिस्क्रिप्टर के मालिकाना हक को गलत तरीके से इस्तेमाल करने का पता लगाता है. जैसे, बंद करने के बाद इस्तेमाल करना और दो बार बंद करना. Android 11 में, fdsan
के लिए डिफ़ॉल्ट मोड बदल रहा है. fdsan
अब गड़बड़ी का पता चलने पर प्रोसेस को बंद कर देता है. पहले, चेतावनी को लॉग करके प्रोसेस जारी रखी जाती थी. अगर आपको अपने ऐप्लिकेशन में fdsan
की वजह से क्रैश दिख रहे हैं, तो fdsan documentation
देखें.
SDK टूल में उपलब्ध नहीं होने वाले इंटरफ़ेस से जुड़ी पाबंदियां
Android 11 में, पाबंदी वाले ऐसे इंटरफ़ेस की अपडेट की गई सूचियां शामिल हैं जो एसडीके के दायरे में नहीं आते. ये सूचियां, Android डेवलपर के साथ मिलकर की गई जांच और नई इंटरनल जांच के आधार पर बनाई गई हैं. जब भी मुमकिन हो, हम यह पक्का करते हैं कि SDK टूल के बाहर के इंटरफ़ेस पर पाबंदी लगाने से पहले, सार्वजनिक विकल्प उपलब्ध हों.
अगर आपका ऐप्लिकेशन Android 11 को टारगेट नहीं करता है, तो हो सकता है कि इनमें से कुछ बदलावों का असर आप पर तुरंत न पड़े. हालांकि, फ़िलहाल कुछ ऐसे इंटरफ़ेस इस्तेमाल किए जा सकते हैं जो SDK टूल के नहीं हैं. यह इस बात पर निर्भर करता है कि आपके ऐप्लिकेशन का टारगेट एपीआई लेवल क्या है. हालांकि, SDK टूल के अलावा किसी भी दूसरे तरीके या फ़ील्ड का इस्तेमाल करने पर, आपके ऐप्लिकेशन के काम न करने का खतरा हमेशा बना रहता है.
अगर आपको नहीं पता कि आपका ऐप्लिकेशन, SDK टूल के बाहर के इंटरफ़ेस का इस्तेमाल करता है या नहीं, तो इस बारे में जानने के लिए अपने ऐप्लिकेशन की जांच करें. अगर आपका ऐप्लिकेशन, SDK टूल के अलावा किसी दूसरे इंटरफ़ेस पर निर्भर करता है, तो आपको SDK टूल के विकल्पों पर माइग्रेट करने की योजना बनानी चाहिए. हालांकि, हम समझते हैं कि कुछ ऐप्लिकेशन में, गैर-SDK इंटरफ़ेस का इस्तेमाल करने के लिए मान्य उदाहरण हैं. अगर आपको अपने ऐप्लिकेशन में किसी सुविधा के लिए, SDK टूल के अलावा किसी दूसरे इंटरफ़ेस का इस्तेमाल करने का विकल्प नहीं मिल रहा है, तो आपको नए सार्वजनिक एपीआई का अनुरोध करना चाहिए.
Android के इस वर्शन में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 11 में, SDK टूल के अलावा अन्य इंटरफ़ेस से जुड़ी पाबंदियों में हुए अपडेट देखें. आम तौर पर, SDK टूल के बाहर के इंटरफ़ेस के बारे में ज़्यादा जानने के लिए, SDK टूल के बाहर के इंटरफ़ेस पर लगी पाबंदियां देखें.
Maps v1 की शेयर की गई लाइब्रेरी हटा दी गई
Maps की शेयर की गई लाइब्रेरी के वर्शन 1 को Android 11 से पूरी तरह हटा दिया गया है. इस लाइब्रेरी का इस्तेमाल पहले बंद कर दिया गया था. साथ ही, Android 10 में ऐप्लिकेशन के लिए, इसका इस्तेमाल करना बंद कर दिया गया था. जिन ऐप्लिकेशन ने पहले Android 9 (एपीआई लेवल 28) या इससे पहले के वर्शन वाले डिवाइसों के लिए, इस शेयर की गई लाइब्रेरी का इस्तेमाल किया था उन्हें अब Android के लिए Maps SDK का इस्तेमाल करना चाहिए.
दूसरे ऐप्लिकेशन के साथ इंटरैक्शन
कॉन्टेंट यूआरआई शेयर करना
अगर आपका ऐप्लिकेशन किसी दूसरे ऐप्लिकेशन के साथ कॉन्टेंट यूआरआई शेयर करता है, तो इंटेंट को इनमें से कम से कम एक इंटेंट फ़्लैग सेट करके, यूआरआई को ऐक्सेस करने की अनुमतियां देनी होंगी:
FLAG_GRANT_READ_URI_PERMISSION
और
FLAG_GRANT_WRITE_URI_PERMISSION
.
इस तरह, अगर कोई दूसरा ऐप्लिकेशन Android 11 को टारगेट करता है, तो वह अब भी कॉन्टेंट का यूआरआई ऐक्सेस कर सकता है. आपके ऐप्लिकेशन में इंटेंट फ़्लैग शामिल होने चाहिए. भले ही, कॉन्टेंट यूआरआई किसी ऐसे कॉन्टेंट उपलब्ध कराने वाली कंपनी से जुड़ा हो जिसका मालिकाना हक आपके ऐप्लिकेशन के पास न हो.
अगर आपके ऐप्लिकेशन के पास कॉन्टेंट यूआरआई से जुड़े कॉन्टेंट प्रोवाइडर का मालिकाना हक है, तो पुष्टि करें कि कॉन्टेंट प्रोवाइडर को एक्सपोर्ट न किया गया हो. हम पहले से ही सुरक्षा के लिए, इस सबसे सही तरीके का सुझाव देते हैं.
लाइब्रेरी लोड हो रही है
पूर्ण पाथ के साथ ICU की सामान्य लाइब्रेरी लोड करना
एपीआई लेवल 28 और इससे पहले के वर्शन को टारगेट करने वाले ऐप्लिकेशन, "/system/lib/libicuuc.so" के पूर्ण पाथ के साथ libicuuc
को लोड करने के लिए, dlopen(3)
का इस्तेमाल नहीं कर सकते. उन ऐप्लिकेशन के लिए,
dlopen("/system/lib/libicuuc.so", ...)
कोई हैंडल नहीं दिखाएगा.
इसके बजाय, लाइब्रेरी को लोड करने के लिए, कृपया फ़ाइल के नाम के तौर पर लाइब्रेरी का नाम इस्तेमाल करें. उदाहरण के लिए, dlopen("libicuuc.so", ...)
.