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

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

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

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

सूचनाओं से जुड़े अपडेट

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

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

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

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

Toast के कॉलबैक

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

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

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 को टारगेट करने वाले ऐप्लिकेशन को अब Telephony प्रोवाइडर के APN डेटाबेस को पढ़ने या ऐक्सेस करने के लिए, Manifest.permission.WRITE_APN_SETTINGS विशेषाधिकार वाली अनुमति की ज़रूरत होगी. इस अनुमति के बिना APN डेटाबेस को ऐक्सेस करने की कोशिश करने पर, सुरक्षा से जुड़ी गड़बड़ी होती है.

सुलभता

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

package visibility में हुए बदलावों की वजह से, 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 को कॉलबैक किया जाता है.

ऐसे इंटरफ़ेस के इस्तेमाल पर पाबंदियां जो SDK टूल में उपलब्ध नहीं है

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

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

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

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