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 एपीआई कॉल की सीमाओं को डीबग करना
Android 11 में, ऐप्लिकेशन के लिए डीबग करने की सुविधा उपलब्ध है. इससे, JobScheduler एपीआई के उन संभावित अनुरोधों की पहचान की जा सकती है जो तय की गई सीमा से ज़्यादा हैं.
डेवलपर इस सुविधा का इस्तेमाल करके, परफ़ॉर्मेंस से जुड़ी संभावित समस्याओं का पता लगा सकते हैं. जिन ऐप्लिकेशन के लिए debuggable मेनिफ़ेस्ट एट्रिब्यूट को 'सही है' पर सेट किया गया है उनके लिए, अनुरोध संख्या सीमित करने की तय सीमा से ज़्यादा बार JobScheduler एपीआई को शुरू करने पर, RESULT_FAILURE दिखेगा.
ये सीमाएं इस तरह से सेट की गई हैं कि सही तरीके से इस्तेमाल करने पर कोई असर न पड़े.
फ़ाइल डिस्क्रिप्टर सैनिटाइज़र (fdsan)
Android 10 में fdsan (फ़ाइल डिस्क्रिप्टर सैनिटाइज़र) को शामिल किया गया.
fdsan, फ़ाइल डिस्क्रिप्टर के मालिकाना हक के गलत इस्तेमाल का पता लगाता है. जैसे, बंद करने के बाद इस्तेमाल करना और दो बार बंद करना. Android 11 में, fdsan का डिफ़ॉल्ट मोड बदल रहा है. fdsan अब गड़बड़ी का पता चलने पर बंद हो जाता है. पहले, गड़बड़ी का पता चलने पर चेतावनी लॉग की जाती थी और प्रोसेस जारी रहती थी. अगर आपको अपने ऐप्लिकेशन में fdsan की वजह से क्रैश होने की समस्या दिख रही है, तो fdsan documentation देखें.
गैर-एसडीके इंटरफ़ेस से जुड़ी पाबंदियां
Android 11 में, पाबंदी वाले गैर-एसडीके इंटरफ़ेस की अपडेट की गई सूचियां शामिल हैं. ये सूचियां, Android डेवलपर के साथ मिलकर काम करने और हाल ही में हुई इंटरनल टेस्टिंग के आधार पर बनाई गई हैं. हम यह पक्का करते हैं कि गैर-एसडीके इंटरफ़ेस को प्रतिबंधित करने से पहले, सार्वजनिक विकल्प उपलब्ध हों.
अगर आपका ऐप्लिकेशन Android 11 को टारगेट नहीं करता है, तो हो सकता है कि इनमें से कुछ बदलावों का असर आप पर तुरंत न पड़े. हालांकि, फ़िलहाल कुछ गैर-एसडीके इंटरफ़ेस (आपके ऐप्लिकेशन के टारगेट एपीआई लेवल के हिसाब से) इस्तेमाल किए जा सकते हैं. हालांकि, किसी भी गैर-एसडीके तरीके या फ़ील्ड का इस्तेमाल करने से, आपके ऐप्लिकेशन के काम न करने का जोखिम हमेशा ज़्यादा होता है.
अगर आपको पक्का नहीं है कि आपका ऐप्लिकेशन, गैर-एसडीके इंटरफ़ेस का इस्तेमाल करता है या नहीं, तो यह पता लगाने के लिए अपने ऐप्लिकेशन की जांच करें. अगर आपका ऐप्लिकेशन, गैर-एसडीके इंटरफ़ेस पर निर्भर करता है, तो आपको एसडीके के विकल्पों पर माइग्रेट करने की योजना बनानी चाहिए. हालांकि, हम समझते हैं कि कुछ ऐप्लिकेशन के पास, गैर-एसडीके इंटरफ़ेस इस्तेमाल करने के लिए मान्य वजहें होती हैं. अगर आपको अपने ऐप्लिकेशन में किसी सुविधा के लिए, गैर-एसडीके इंटरफ़ेस के इस्तेमाल का कोई विकल्प नहीं मिल रहा है, तो आपको नया सार्वजनिक एपीआई का अनुरोध करना चाहिए.
Android के इस वर्शन में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 11 में गैर-एसडीके इंटरफ़ेस से जुड़ी पाबंदियों के बारे में अपडेट देखें. आम तौर पर, गैर-एसडीके इंटरफ़ेस के बारे में ज़्यादा जानने के लिए, गैर-एसडीके इंटरफ़ेस पर पाबंदियां देखें.
Maps v1 की शेयर की गई लाइब्रेरी को हटा दिया गया है
Android 11 में, Maps की शेयर की गई लाइब्रेरी का वर्शन 1 पूरी तरह से हटा दिया गया है. इस लाइब्रेरी को पहले ही बंद कर दिया गया था. साथ ही, Android 10 वाले डिवाइसों पर मौजूद ऐप्लिकेशन के लिए, यह काम करना बंद कर चुकी है. Android 9 (एपीआई लेवल 28) या इससे पहले के वर्शन वाले डिवाइसों के लिए, जो ऐप्लिकेशन पहले इस शेयर की गई लाइब्रेरी पर निर्भर थे उन्हें अब Android के लिए Maps SDK का इस्तेमाल करना चाहिए.
अन्य ऐप्लिकेशन के साथ इंटरैक्शन
कॉन्टेंट यूआरआई शेयर करना
अगर आपका ऐप्लिकेशन किसी दूसरे ऐप्लिकेशन के साथ कॉन्टेंट यूआरआई शेयर करता है, तो इंटेंट को यूआरआई ऐक्सेस करने की अनुमतियां देनी होंगी. इसके लिए, इनमें से कम से कम एक इंटेंट फ़्लैग सेट करना होगा:
FLAG_GRANT_READ_URI_PERMISSION
और
FLAG_GRANT_WRITE_URI_PERMISSION.
इस तरह, अगर दूसरा ऐप्लिकेशन Android 11 को टारगेट करता है, तो वह अब भी कॉन्टेंट यूआरआई को ऐक्सेस कर सकता है. आपके ऐप्लिकेशन में इंटेंट फ़्लैग शामिल होने चाहिए. भले ही, कॉन्टेंट यूआरआई ऐसे कॉन्टेंट देने वाले से जुड़ा हो जिस पर आपके ऐप्लिकेशन का मालिकाना हक नहीं है.
अगर आपके ऐप्लिकेशन के पास कॉन्टेंट यूआरआई से जुड़े कॉन्टेंट देने वाले का मालिकाना हक है, तो पुष्टि करें कि कॉन्टेंट देने वाले को एक्सपोर्ट न किया गया हो. हम पहले से ही सुरक्षा के इस सबसे सही तरीके का सुझाव देते हैं.
लाइब्रेरी लोड हो रही है
ऐब्सलूट पाथ के साथ आईसीयू की सामान्य लाइब्रेरी लोड करना
एपीआई लेवल 28 और इससे पहले के वर्शन को टारगेट करने वाले ऐप्लिकेशन, ऐब्सलूट पाथ "/system/lib/libicuuc.so" के साथ libicuuc को लोड करने के लिए, dlopen(3) का इस्तेमाल नहीं कर सकते. उन ऐप्लिकेशन के लिए,
dlopen("/system/lib/libicuuc.so", ...) एक खाली हैंडल दिखाएगा.
इसके बजाय, लाइब्रेरी लोड करने के लिए, कृपया लाइब्रेरी के नाम को फ़ाइल नाम के तौर पर इस्तेमाल करें. उदाहरण के लिए, dlopen("libicuuc.so", ...).