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

पहले की रिलीज़ की तरह ही, 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 में जोड़ा गया था.

टेक्स्ट टोस्ट एपीआई में बदलाव

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

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

कनेक्टिविटी

एपीएन डेटाबेस को पढ़ने के ऐक्सेस पर पाबंदी लगाई गई है

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

नाम बदलें: 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 फ़ाइल मौजूद हो या यह फ़ाइल 4-बाइट की सीमा के हिसाब से अलाइन न हो. अगर इनमें से कोई भी शर्त पूरी होती है, तो सिस्टम इस फ़ाइल को मेमोरी-मैप नहीं कर सकता. जिन रिसॉर्स टेबल को मेमोरी-मैप नहीं किया जा सकता उन्हें रैम में बफ़र में पढ़ा जाना चाहिए. इससे सिस्टम की मेमोरी पर बेवजह दबाव पड़ता है और डिवाइस पर रैम का इस्तेमाल काफ़ी बढ़ जाता है.

अगर आपने पहले कंप्रेस की गई 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 एपीआई कॉल बंद कर दिए जाते हैं. माइग्रेशन की जानकारी के लिए, 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 को कॉलबैक किया जाता है.

गैर-एसडीके इंटरफ़ेस से जुड़ी पाबंदियां

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

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

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

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