ऐप्लिकेशन के व्यवहार में बदलाव: सभी ऐप्लिकेशन

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

Android 11 को टारगेट करने वाले ऐप्लिकेशन पर असर डालने वाले बदलावों की सूची भी ज़रूर देखें.

निजता

Android 11 में, उपयोगकर्ता की निजता को बेहतर बनाने के लिए कई बदलाव किए गए हैं और कुछ पाबंदियां लगाई गई हैं. इनमें ये शामिल हैं:

  • एक बार के लिए अनुमति: इससे लोगों को जगह की जानकारी, माइक्रोफ़ोन, और कैमरे को ऐक्सेस करने की अनुमति कुछ समय के लिए देने का विकल्प मिलता है.
  • अनुमति मांगने वाला डायलॉग दिखना: किसी अनुमति को बार-बार अस्वीकार करने का मतलब है कि "फिर से न पूछें."
  • डेटा ऐक्सेस की ऑडिटिंग: इससे आपको यह जानकारी मिलती है कि आपका ऐप्लिकेशन, निजी डेटा को कहां-कहां ऐक्सेस करता है. यह जानकारी, आपके ऐप्लिकेशन के कोड और उससे जुड़ी लाइब्रेरी के कोड, दोनों के लिए मिलती है.
  • सिस्टम अलर्ट विंडो की अनुमतियां: कुछ कैटगरी के ऐप्लिकेशन को अनुरोध करने पर, SYSTEM_ALERT_WINDOW अनुमति अपने-आप मिल जाती है. इसके अलावा, ACTION_MANAGE_OVERLAY_PERMISSION इंटेंट ऐक्शन वाले इंटेंट, उपयोगकर्ताओं को हमेशा सिस्टम सेटिंग की स्क्रीन पर ले जाते हैं.
  • स्थायी सिम आइडेंटिफ़ायर: Android 11 और इसके बाद के वर्शन वाले डिवाइसों पर, getIccId() तरीके से रीसेट न किए जा सकने वाले ICCID को ऐक्सेस करने पर पाबंदी है. यह तरीका, खाली स्ट्रिंग दिखाता है. डिवाइस में इंस्टॉल किए गए सिम की खास पहचान करने के लिए, getSubscriptionId() तरीके का इस्तेमाल करें. सदस्यता आईडी, इंस्टॉल किए गए सिम की पहचान करने के लिए इंडेक्स वैल्यू (1 से शुरू) देता है. इसमें फ़िज़िकल और इलेक्ट्रॉनिक सिम शामिल हैं. यह आइडेंटिफ़ायर, किसी सिम के लिए एक जैसा रहता है. हालांकि, अगर डिवाइस को फ़ैक्ट्री रीसेट किया जाता है, तो यह बदल जाता है.

ज़्यादा जानने के लिए, निजता पेज देखें.

एक्सपोज़र नोटिफ़िकेशन

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

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

सुरक्षा

एसएसएल सॉकेट, डिफ़ॉल्ट रूप से Conscrypt SSL इंजन का इस्तेमाल करते हैं

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 API जोड़े गए हैं, ताकि आपके ऐप्लिकेशन में नई सुविधाएं जोड़ी जा सकें. सुविधाएं जोड़ते समय उनकी जांच करने के लिए, Android SDK एम्युलेटर की नई सुविधाओं का इस्तेमाल किया जा सकता है. नई सुविधा, Emulator के वर्शन 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 डेवलपर के साथ मिलकर काम करने और हाल ही में हुई इंटरनल टेस्टिंग के आधार पर बनाई गई हैं. हम यह पक्का करते हैं कि गैर-एसडीके इंटरफ़ेस को प्रतिबंधित करने से पहले, सार्वजनिक विकल्प उपलब्ध हों.

अगर आपका ऐप्लिकेशन Android 11 को टारगेट नहीं करता है, तो हो सकता है कि इनमें से कुछ बदलावों का असर आप पर तुरंत न पड़े. हालांकि, फ़िलहाल कुछ नॉन-एसडीके इंटरफ़ेस (आपके ऐप्लिकेशन के टारगेट एपीआई लेवल के हिसाब से) इस्तेमाल किए जा सकते हैं. हालांकि, किसी भी नॉन-एसडीके तरीके या फ़ील्ड का इस्तेमाल करने से, आपके ऐप्लिकेशन के काम न करने का जोखिम हमेशा ज़्यादा होता है.

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

Android के इस वर्शन में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 11 में नॉन-एसडीके इंटरफ़ेस से जुड़ी पाबंदियों के अपडेट लेख पढ़ें. SDK टूल के बाहर के इंटरफ़ेस के बारे में ज़्यादा जानने के लिए, SDK टूल के बाहर के इंटरफ़ेस पर पाबंदियां लेख पढ़ें.

Maps v1 की शेयर की गई लाइब्रेरी हटा दी गई है

Android 11 में, Maps की शेयर की गई लाइब्रेरी के V1 को पूरी तरह से हटा दिया गया है. इस लाइब्रेरी को पहले ही बंद कर दिया गया था. साथ ही, Android 10 में ऐप्लिकेशन के लिए इसका इस्तेमाल बंद कर दिया गया था. Android 9 (एपीआई लेवल 28) या इससे पहले के वर्शन पर काम करने वाले डिवाइसों के लिए, जो ऐप्लिकेशन पहले इस शेयर की गई लाइब्रेरी पर निर्भर थे उन्हें अब Android के लिए Maps SDK का इस्तेमाल करना चाहिए.

अन्य ऐप्लिकेशन के साथ इंटरैक्शन

कॉन्टेंट यूआरआई शेयर करना

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

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

लाइब्रेरी लोड हो रही है

पूरे पाथ के साथ ICU की सामान्य लाइब्रेरी लोड हो रही है

एपीआई लेवल 28 और इससे पहले के वर्शन को टारगेट करने वाले ऐप्लिकेशन, dlopen(3) का इस्तेमाल करके libicuuc को लोड नहीं कर सकते. इसके लिए, ऐब्सलूट पाथ "/system/lib/libicuuc.so" का इस्तेमाल करना होगा. इन ऐप्लिकेशन के लिए, dlopen("/system/lib/libicuuc.so", ...) एक नल हैंडल दिखाएगा.

इसके बजाय, लाइब्रेरी को लोड करने के लिए, कृपया लाइब्रेरी के नाम का इस्तेमाल फ़ाइल नाम के तौर पर करें. उदाहरण के लिए, dlopen("libicuuc.so", ...).