Android 13 प्लैटफ़ॉर्म में कुछ ऐसे बदलाव किए गए हैं जिनका असर आपके ऐप्लिकेशन पर पड़ सकता है. यहां दिए गए बदलाव, Android 13 पर चलने वाले सभी ऐप्लिकेशन पर लागू होते हैं. भले ही, targetSdkVersion
कुछ भी हो. आपको अपने ऐप्लिकेशन की जांच करनी चाहिए. इसके बाद, जहां ज़रूरी हो वहां इन सुविधाओं को सही तरीके से काम करने के लिए, ऐप्लिकेशन में बदलाव करना चाहिए.
Android 13 को टारगेट करने वाले ऐप्लिकेशन पर असर डालने वाले बदलावों की सूची भी ज़रूर देखें.
परफ़ॉर्मेंस और बैटरी
टास्क मैनेजर
Android 13 (एपीआई लेवल 33) से, उपयोगकर्ता सूचना पैनल से किसी वर्कफ़्लो को पूरा कर सकते हैं. इससे, फ़ोरग्राउंड में चल रहे ऐप्लिकेशन बंद हो जाते हैं. इसे इमेज 1 में दिखाया गया है. इस सुविधा को टास्क मैनेजर कहा जाता है. ऐप्लिकेशन में, उपयोगकर्ता के अनुरोध पर ऑडियो को रोकने की सुविधा होनी चाहिए.
JobScheduler का इस्तेमाल करके, प्रीफ़ेच जॉब को बेहतर तरीके से मैनेज करना
JobScheduler की मदद से, ऐप्लिकेशन कुछ टास्क को "प्रीफ़ेच" टास्क के तौर पर मार्क कर सकते हैं. इसके लिए, JobInfo.Builder.setPrefetch()
का इस्तेमाल किया जाता है. इसका मतलब है कि इन टास्क को, ऐप्लिकेशन के अगले लॉन्च से पहले और उसके आस-पास चलाना चाहिए, ताकि उपयोगकर्ता अनुभव को बेहतर बनाया जा सके.
पहले, JobScheduler सिर्फ़ इस सिग्नल का इस्तेमाल करता था, ताकि प्रीफ़ेच करने वाले टास्क, उपलब्ध या अतिरिक्त डेटा का इस्तेमाल कर सकें.
Android 13 (एपीआई लेवल 33) और इसके बाद के वर्शन में, सिस्टम यह पता लगाने की कोशिश करता है कि ऐप्लिकेशन अगली बार कब लॉन्च होगा. साथ ही, इस अनुमान का इस्तेमाल प्रीफ़ेच जॉब चलाने के लिए करता है. ऐप्लिकेशन को, अगले लॉन्च से पहले किए जाने वाले किसी भी काम के लिए, प्रीफ़ेच जॉब का इस्तेमाल करना चाहिए.
बैटरी के संसाधन का इस्तेमाल
Android 13 (एपीआई लेवल 33) में, सिस्टम को डिवाइस की बैटरी लाइफ़ को बेहतर तरीके से मैनेज करने के लिए ये तरीके दिए गए हैं:
- इस अपडेट में, यह जानकारी दी गई है कि सिस्टम आपके ऐप्लिकेशन को "पाबंदी लगी है" ऐप्लिकेशन स्टैंडबाय बकेट में कब रखता है.
- जब उपयोगकर्ता, बैकग्राउंड में बैटरी इस्तेमाल करने के लिए आपके ऐप्लिकेशन को "पाबंदी वाली" स्थिति में रखता है, तब आपका ऐप्लिकेशन क्या-क्या कर सकता है, इस बारे में नई सीमाएं.
इन बदलावों के साथ अपने ऐप्लिकेशन को टेस्ट करते समय, इन बातों का ध्यान रखें:
यह टेस्ट करें कि सिस्टम, आपके ऐप्लिकेशन को "प्रतिबंधित" ऐप्लिकेशन स्टैंडबाय बकेट में रखने पर, वह कैसे काम करता है. अपने ऐप्लिकेशन को इस बकेट में असाइन करने के लिए, Android डीबग ब्रिज (ADB) के इस कमांड का इस्तेमाल करें:
adb shell am set-standby-bucket PACKAGE_NAME restricted
जांच करें कि आपका ऐप्लिकेशन, बैटरी के बैकग्राउंड इस्तेमाल पर लागू होने वाली इन पाबंदियों का पालन करता है या नहीं. ये पाबंदियां, "पाबंदी लगी है" स्थिति में मौजूद ऐप्लिकेशन पर लागू होती हैं:
- फ़ोरग्राउंड सेवाएं लॉन्च नहीं की जा सकतीं
- मौजूदा फ़ोरग्राउंड सेवाओं को फ़ोरग्राउंड से हटा दिया जाता है
- अलार्म ट्रिगर नहीं होते
- जॉब पूरे नहीं होते
अपने ऐप्लिकेशन को "प्रतिबंधित" स्थिति में रखने के लिए, इस ADB कमांड का इस्तेमाल करें:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Firebase क्लाउड से मैसेज (FCM) भेजने के लिए, ज़्यादा प्राथमिकता वाले मैसेज के कोटे
Android 13 (एपीआई लेवल 33) में, Firebase क्लाउड से मैसेज (FCM) के कोटे अपडेट किए गए हैं. इससे, ज़्यादा प्राथमिकता वाले FCM की डिलीवरी को ज़्यादा भरोसेमंद बनाया जा सकेगा. यह उन ऐप्लिकेशन के लिए है जो ज़्यादा प्राथमिकता वाले FCM के जवाब में सूचनाएं दिखाते हैं. Android 13 (एपीआई लेवल 33) में ये बदलाव किए गए हैं:
- ऐप्लिकेशन स्टैंडबाय बकेट अब यह तय नहीं करते कि कोई ऐप्लिकेशन, ज़्यादा प्राथमिकता वाले कितने FCM इस्तेमाल कर सकता है.
- अगर सिस्टम को पता चलता है कि कोई ऐप्लिकेशन लगातार ऐसे ज़रूरी मैसेज भेज रहा है जिनकी सूचना नहीं मिलती है, तो अब सिस्टम उन मैसेज की प्राथमिकता कम कर देता है.
Android के पिछले वर्शन की तरह ही, कोटे से ज़्यादा होने पर ज़्यादा प्राथमिकता वाले FCM को सामान्य प्राथमिकता पर डाउनग्रेड कर दिया जाता है. FCM के जवाब में फ़ोरग्राउंड सेवाओं (एफ़जीएस) को शुरू करते समय, हमारा सुझाव है कि आप RemoteMessage.getPriority()
के नतीजे की जांच करें और पुष्टि करें कि यह PRIORITY_HIGH
है. साथ ही, संभावित ForegroundServiceStartNotAllowedException
अपवादों को हैंडल करें.
अगर आपका ऐप्लिकेशन, ज़्यादा प्राथमिकता वाले FCM के जवाब में हमेशा सूचनाएं पोस्ट नहीं करता है, तो हमारा सुझाव है कि आप इन FCM की प्राथमिकता को सामान्य पर सेट करें. इससे, सूचना देने वाले मैसेज को डाउनग्रेड नहीं किया जाएगा.
निजता
सूचनाओं के लिए रनटाइम की अनुमति
Android 13 (एपीआई लेवल 33) में, रनटाइम के दौरान सूचना पाने की अनुमति देने की सुविधा जोड़ी गई है:
POST_NOTIFICATIONS
.
इस बदलाव से, लोगों को उन सूचनाओं पर ध्यान देने में मदद मिलती है जो उनके लिए सबसे ज़्यादा ज़रूरी हैं.
हमारा सुझाव है कि आप जल्द से जल्द Android 13 या इसके बाद के वर्शन को टारगेट करें, ताकि आपको इस सुविधा के अतिरिक्त कंट्रोल और फ़्लेक्सिबिलिटी का फ़ायदा मिल सके.
ऐप्लिकेशन अनुमतियों से जुड़े सबसे सही तरीकों के बारे में ज़्यादा जानें.
क्लिपबोर्ड से संवेदनशील कॉन्टेंट छिपाना
अगर आपका ऐप्लिकेशन, उपयोगकर्ताओं को पासवर्ड या क्रेडिट कार्ड की जानकारी जैसे संवेदनशील कॉन्टेंट को क्लिपबोर्ड पर कॉपी करने की अनुमति देता है, तो आपको ClipboardManager#setPrimaryClip()
को कॉल करने से पहले, ClipData के ClipDescription
में एक फ़्लैग जोड़ना होगा. इस फ़्लैग को जोड़ने से, संवेदनशील कॉन्टेंट को कॉन्टेंट की झलक में दिखने से रोका जा सकता है.


संवेदनशील कॉन्टेंट को फ़्लैग करने के लिए, ClipDescription
में एक बूलियन एक्स्ट्रा जोड़ें. सभी ऐप्लिकेशन को ऐसा करना चाहिए, भले ही टारगेट किया गया एपीआई लेवल कुछ भी हो.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
क्लिपबोर्ड के नए यूज़र इंटरफ़ेस (यूआई) के बारे में ज़्यादा जानने के लिए, कॉपी करने और चिपकाने की सुविधा वाला पेज देखें.
सुरक्षा
शेयर किए गए यूज़र आईडी का इस्तेमाल बंद करना
अगर आपका ऐप्लिकेशन, बंद किए गए android:sharedUserId
एट्रिब्यूट का इस्तेमाल करता है और अब एट्रिब्यूट की सुविधा पर निर्भर नहीं है, तो android:sharedUserMaxSdkVersion
एट्रिब्यूट को 32
पर सेट किया जा सकता है. ऐसा नीचे दिए गए कोड स्निपेट में दिखाया गया है:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
इस एट्रिब्यूट से सिस्टम को पता चलता है कि आपका ऐप्लिकेशन अब शेयर किए गए यूज़र आईडी पर निर्भर नहीं है. अगर आपका ऐप्लिकेशन android:sharedUserMaxSdkVersion
के बारे में बताता है और उसे Android 13 या उसके बाद के वर्शन वाले डिवाइसों पर नया इंस्टॉल किया गया है, तो आपका ऐप्लिकेशन इस तरह काम करेगा जैसे आपने android:sharedUserId
को कभी तय नहीं किया था. अपडेट किए गए ऐप्लिकेशन अब भी शेयर किए गए मौजूदा उपयोगकर्ता आईडी का इस्तेमाल करते हैं.
शेयर किए गए User-ID की वजह से, पैकेज मैनेजर में अनिश्चितता वाली स्थिति पैदा होती है. इसके बजाय, आपके ऐप्लिकेशन को सही कम्यूनिकेशन सिस्टम का इस्तेमाल करना चाहिए. जैसे, सेवाएं और कॉन्टेंट उपलब्ध कराने वाली कंपनियां. इससे शेयर किए गए कॉम्पोनेंट के बीच इंटरऑपरेबिलिटी को बेहतर बनाया जा सकता है.
उपयोगकर्ता अनुभव
फ़ोरग्राउंड सेवा की सूचनाएं खारिज की जा सकती हैं
Android 13 या इसके बाद के वर्शन वाले डिवाइसों पर, उपयोगकर्ता फ़ोरग्राउंड सेवाओं से जुड़ी सूचनाओं को डिफ़ॉल्ट रूप से खारिज कर सकते हैं.
मुख्य फ़ंक्शन
स्पीच सेवा लागू करने की लेगसी कॉपी हटा दी गई है
Android 13 में, Google ऐप्लिकेशन से SpeechService
को हटा दिया गया है. इसमें वॉइस आईएमई, RecognitionService
, और इंटेंट-आधारित एपीआई शामिल हैं.
Android 12 में, ये बदलाव हुए हैं:
SpeechService
की सुविधाओं को Speech Services by Google ऐप्लिकेशन पर माइग्रेट कर दिया गया है. यह ऐप्लिकेशन,SpeechService
की सुविधा देने वाला डिफ़ॉल्ट ऐप्लिकेशन बन गया है.RecognitionService
सुविधा को Android System Intelligence ऐप्लिकेशन में ट्रांसफ़र कर दिया गया है, ताकि डिवाइस पर बोली पहचानने की सुविधा काम कर सके.
Android 12 पर ऐप्लिकेशन के साथ काम करने की सुविधा को बनाए रखने के लिए, Google ऐप्लिकेशन, ट्रैंपोलिन का इस्तेमाल करता है. इससे, ट्रैफ़िक को Speech Services by Google ऐप्लिकेशन पर रीडायरेक्ट किया जाता है. Android 13 में, इस ट्रैंपोलिन को हटा दिया गया है.
ऐप्लिकेशन को SpeechService
के लिए, डिवाइस के डिफ़ॉल्ट प्रोवाइडर का इस्तेमाल करना चाहिए. इसके बजाय, किसी ऐप्लिकेशन को हार्ड-कोड नहीं करना चाहिए.