व्यवहार में बदलाव: 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

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

हीप पॉइंटर में अब सबसे अहम बाइट (MSB) में एक नॉन-ज़ीरो टैग है. पॉइंटर का गलत तरीके से इस्तेमाल करने वाले ऐप्लिकेशन, अब क्रैश हो सकते हैं या उनमें अन्य समस्याएं आ सकती हैं. इनमें एमएसबी में बदलाव करने वाले ऐप्लिकेशन भी शामिल हैं. आने वाले समय में, 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 को टारगेट करने वाले ऐप्लिकेशन को, अब Telephony की सेवा देने वाली कंपनी के एपीएन डेटाबेस को पढ़ने या ऐक्सेस करने के लिए, 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.FLAG_REQUEST_ACCESSIBILITY_BUTTON को किसी AccessibilityServiceInfo ऑब्जेक्ट की flags प्रॉपर्टी में जोड़ा जाता है, तो फ़्रेमवर्क आपकी सेवा के लिए, सुलभता बटन के कॉलबैक इवेंट पास नहीं करता.

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

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