व्यवहार में बदलाव: Android 11 को टारगेट करने वाले ऐप्लिकेशन

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

ऐप्लिकेशन के काम करने के तरीके में हुए उन बदलावों की सूची भी देखना न भूलें जिनका असर Android 11 पर चल रहे सभी ऐप्लिकेशन पर पड़ता है.

निजता

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

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

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

सुरक्षा

हीप पॉइंटर टैगिंग

जानकारी बदलना

नाम बदलें: NATIVE_HEAP_POINTER_TAGGING

बदलाव आईडी: 135754954

टॉगल करने का तरीका

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

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

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

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

इस सुविधा को बंद करने के लिए, allowNativeHeapPointerTagging मेनिफ़ेस्ट दस्तावेज़ देखें.

टॉस्ट में किए गए अपडेट

बैकग्राउंड से कस्टम टॉस्ट ब्लॉक किए जाते हैं

सुरक्षा और उपयोगकर्ता अनुभव को बेहतर बनाए रखने के लिए, सिस्टम उन टॉस्ट को ब्लॉक कर देता है जिनमें कस्टम व्यू शामिल होते हैं. ऐसा तब होता है, जब Android 11 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन से बैकग्राउंड में ये टॉस्ट भेजे जाते हैं. ध्यान दें कि टेक्स्ट टॉस्ट का इस्तेमाल अब भी किया जा सकता है. ये ऐसे टॉस्ट होते हैं जिन्हें Toast.makeText() का इस्तेमाल करके बनाया जाता है और जो setView() को कॉल नहीं करते.

अगर आपका ऐप्लिकेशन, बैकग्राउंड से कस्टम व्यू वाला कोई टॉस्ट पोस्ट करने की कोशिश करता है, तो सिस्टम उपयोगकर्ता को मैसेज नहीं दिखाता. इसके बजाय, सिस्टम, logcat में यह मैसेज लॉग करता है:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

टोस्ट कॉलबैक

अगर आपको टॉस्ट (टेक्स्ट या कस्टम) के दिखने या हटने पर सूचना चाहिए, तो addCallback() के तरीके का इस्तेमाल करें. इसे Android 11 में जोड़ा गया था.

Text toast API में हुए बदलाव

Android 11 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में, टेक्स्ट टॉस्ट के लिए ये साइड इफ़ेक्ट दिखते हैं:

  • getView() तरीका, null दिखाता है.
  • नीचे दिए गए तरीकों से मिलने वाली वैल्यू, असल वैल्यू नहीं दिखाती हैं. इसलिए, आपको अपने ऐप्लिकेशन में इन पर भरोसा नहीं करना चाहिए:
  • यहां दिए गए तरीके काम के नहीं हैं. इसलिए, आपके ऐप्लिकेशन को इनका इस्तेमाल नहीं करना चाहिए:

कनेक्टिविटी

APN डेटाबेस को पढ़ने का ऐक्सेस सीमित है

जानकारी बदलना

नाम बदलें: APN_READING_PERMISSION_CHANGE_ID

बदलाव आईडी: 124107808

टॉगल करने का तरीका

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

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

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

Android 11 को टारगेट करने वाले ऐप्लिकेशन को अब टेलीफ़ोन सेवा देने वाली कंपनी के एपीएन डेटाबेस को पढ़ने या ऐक्सेस करने के लिए, Manifest.permission.WRITE_APN_SETTINGS की विशेष अनुमति लेनी होगी. इस अनुमति के बिना APN डेटाबेस को ऐक्सेस करने की कोशिश करने पर, सुरक्षा से जुड़ा एक अपवाद जनरेट होता है.

सुलभता

मेनिफ़ेस्ट फ़ाइल में टीटीएस इंजन के साथ इंटरैक्शन का एलान करना

पैकेज के दिखने से जुड़े बदलावों की वजह से, Android 11 को टारगेट करने वाले और लिखाई को बोली में बदलने वाले (टीटीएस) इंजन के साथ इंटरैक्ट करने वाले ऐप्लिकेशन को अपनी मेनिफ़ेस्ट फ़ाइलों में यह <queries> एलिमेंट जोड़ना होगा:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

मेटाडेटा फ़ाइल में सुलभता बटन के इस्तेमाल की जानकारी देना

जानकारी बदलना

नाम बदलें: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

बदलाव आईडी: 136293963

टॉगल करने का तरीका

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

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

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

Android 11 से, आपकी सुलभता सेवा रनटाइम में यह एलान नहीं कर सकती कि वह सिस्टम के सुलभता बटन से जुड़ी है. अगर किसी AccessibilityServiceInfo ऑब्जेक्ट की flags प्रॉपर्टी में AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON जोड़ा जाता है, तो फ़्रेमवर्क आपकी सेवा को सुलभता बटन के कॉलबैक इवेंट पास नहीं करता.

सुलभता सेवा में सुलभता कॉलबैक इवेंट पाने के लिए, अपनी सुलभता सेवा की मेटाडेटा फ़ाइल का इस्तेमाल करें. इससे, सुलभता बटन के साथ अपनी सेवा के असोसिएशन का एलान किया जा सकेगा. accessibilityFlags एट्रिब्यूट की अपनी परिभाषा में, flagRequestAccessibilityButton वैल्यू शामिल करें. सुलभता सेवा की मेटाडेटा फ़ाइल आम तौर पर res/raw/accessibilityservice.xml में होती है.

कैमरा

मीडिया इंटेंट ऐक्शन के लिए, सिस्टम का डिफ़ॉल्ट कैमरा ज़रूरी है

Android 11 में, सिर्फ़ पहले से इंस्टॉल किए गए सिस्टम कैमरा ऐप्लिकेशन, इन इंटेंट ऐक्शन का जवाब दे सकते हैं:

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

ऐप्लिकेशन को पैकेज करना और इंस्टॉल करना

कंप्रेस की गई रिसॉर्स फ़ाइलें

जानकारी बदलना

नाम बदलें: RESOURCES_ARSC_COMPRESSED

बदलाव आईडी: 132742131

टॉगल करने का तरीका

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

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

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

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

अगर पहले कंप्रेस की गई resources.arsc फ़ाइल का इस्तेमाल किया जा रहा था, तो इसके बजाय कोई दूसरा तरीका आज़माएं. जैसे, ऐप्लिकेशन के संसाधनों को छोटा करना या अपने ऐप्लिकेशन को छोटा, धुंधला, और ऑप्टिमाइज़ करने के अन्य तरीके.

APK सिग्नेचर स्कीम v2 का इस्तेमाल करना अब ज़रूरी है

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

यह पुष्टि करने के लिए कि आपके ऐप्लिकेशन को APK सिग्नेचर स्कीम v2 या उसके बाद के वर्शन से साइन किया जा रहा है, Android Studio या कमांड लाइन पर apksigner टूल का इस्तेमाल किया जा सकता है.

Firebase

Firebase JobDispatcher और GCMNetworkManager

अगर आपका ऐप्लिकेशन, एपीआई लेवल 30 या उसके बाद के वर्शन को टारगेट करता है, तो Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन पर चलने वाले डिवाइसों पर, Firebase JobDispatcher और GcmNetworkManager API कॉल बंद कर दिए जाते हैं. माइग्रेशन की जानकारी के लिए, Firebase JobDispatcher से WorkManager पर माइग्रेट करना और GCMNetworkManager से WorkManager पर माइग्रेट करना लेख पढ़ें.

बोली पहचानने की सुविधा

पैकेज के दिखने की सेटिंग में हुए बदलावों की वजह से, Android 11 को टारगेट करने वाले और बोली पहचानने की सेवा के साथ इंटरैक्ट करने वाले ऐप्लिकेशन को अपनी मेनिफ़ेस्ट फ़ाइलों में यह <queries> एलिमेंट जोड़ना होगा:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

OnSharedPreferenceChangeListener के लिए कॉलबैक में हुए बदलाव

जानकारी बदलना

नाम बदलें: CALLBACK_ON_CLEAR_CHANGE

बदलाव आईडी: 119147584

टॉगल करने का तरीका

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

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

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

Android 11 (एपीआई लेवल 30) को टारगेट करने वाले ऐप्लिकेशन के लिए, जब भी Editor.clear को कॉल किया जाता है, तो अब null पासकोड के साथ OnSharedPreferenceChangeListener.onSharedPreferenceChanged को कॉलबैक किया जाता है.

SDK टूल में उपलब्ध नहीं होने वाले इंटरफ़ेस से जुड़ी पाबंदियां

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

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

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

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