Android 17 प्लैटफ़ॉर्म में, ऐप्लिकेशन के काम करने के तरीके से जुड़े कुछ बदलाव किए गए हैं. इनका असर आपके ऐप्लिकेशन पर पड़ सकता है.
ऐप्लिकेशन के काम करने के तरीके से जुड़े ये बदलाव, Android 17 पर चलने वाले सभी ऐप्लिकेशन पर लागू होते हैं. भले ही, targetSdkVersion कुछ भी हो. आपको अपने ऐप्लिकेशन की जांच करनी चाहिए. इसके बाद, जहां ज़रूरी हो वहां इन बदलावों को लागू करने के लिए, ऐप्लिकेशन में बदलाव करना चाहिए.
Android 17 को टारगेट करने वाले ऐप्लिकेशन पर असर डालने वाले बदलावों की सूची भी ज़रूर देखें.
सुरक्षा
Android 17 में, डिवाइस और ऐप्लिकेशन की सुरक्षा को बेहतर बनाने के लिए ये बदलाव किए गए हैं.
usesClearTraffic के बंद होने का प्लान
आने वाले समय में, हम usesCleartextTraffic एलिमेंट को बंद करने की योजना बना रहे हैं.
जिन ऐप्लिकेशन को बिना एन्क्रिप्ट (एचटीटीपी) किए कनेक्शन बनाने होते हैं उन्हें नेटवर्क सिक्योरिटी कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करना चाहिए. इससे यह तय किया जा सकता है कि आपका ऐप्लिकेशन किन डोमेन से cleartext कनेक्शन बनाएगा.
ध्यान दें कि नेटवर्क सुरक्षा कॉन्फ़िगरेशन फ़ाइलें, सिर्फ़ एपीआई लेवल 24 और इसके बाद के वर्शन पर काम करती हैं. अगर आपके ऐप्लिकेशन का कम से कम एपीआई लेवल 24 से कम है, तो आपको ये दोनों काम करने चाहिए:
usesCleartextTrafficएट्रिब्यूट कोtrueपर सेट करें- नेटवर्क कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करना
अगर आपके ऐप्लिकेशन का कम से कम एपीआई लेवल 24 या इससे ज़्यादा है, तो नेटवर्क कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल किया जा सकता है. इसके लिए, आपको usesCleartextTraffic सेट करने की ज़रूरत नहीं है.
यूआरआई के लिए, बिना अनुमति के ऐक्सेस देने की सुविधा पर पाबंदी लगाना
फ़िलहाल, अगर कोई ऐप्लिकेशन ऐसे यूआरआई के साथ इंटेंट लॉन्च करता है जिसमें ऐक्शन Send,
SendMultiple या ImageCapture है, तो सिस्टम टारगेट ऐप्लिकेशन को यूआरआई की पढ़ने और लिखने की अनुमतियां अपने-आप दे देता है. हम Android 18 में इस व्यवहार को बदलने का प्लान बना रहे हैं. इस वजह से, हमारा सुझाव है कि ऐप्लिकेशन, सिस्टम पर भरोसा करने के बजाय, यूआरआई से जुड़ी ज़रूरी अनुमतियां साफ़ तौर पर दें.
हर ऐप्लिकेशन के लिए कीस्टोर की सीमाएं
ऐप्लिकेशन को Android Keystore में बहुत ज़्यादा कुंजियां नहीं बनानी चाहिए, क्योंकि यह डिवाइस पर मौजूद सभी ऐप्लिकेशन के लिए शेयर किया गया संसाधन है. Android 17 से, सिस्टम यह तय करता है कि कोई ऐप्लिकेशन कितनी कुंजियों का मालिकाना हक रख सकता है. Android 17 (एपीआई लेवल 37) या उसके बाद के वर्शन को टारगेट करने वाले सिस्टम ऐप्लिकेशन के लिए, 50,000 कुंजियों की सीमा तय की गई है. वहीं, अन्य सभी ऐप्लिकेशन के लिए, 2,00,000 कुंजियों की सीमा तय की गई है. सिस्टम ऐप्लिकेशन के लिए, 2,00,000 कुंजियों की सीमा तय की गई है. इससे कोई फ़र्क़ नहीं पड़ता कि वे किस एपीआई लेवल को टारगेट करते हैं.
अगर कोई ऐप्लिकेशन तय सीमा से ज़्यादा कुंजियां बनाने की कोशिश करता है, तो KeyStoreException गड़बड़ी की वजह से कुंजियां नहीं बन पाएंगी. अपवाद के मैसेज स्ट्रिंग में, कुंजी की सीमा के बारे में जानकारी होती है. अगर ऐप्लिकेशन, अपवाद पर getNumericErrorCode() को कॉल करता है, तो रिटर्न वैल्यू इस बात पर निर्भर करती है कि ऐप्लिकेशन किस एपीआई लेवल को टारगेट करता है:
- Android 17 (एपीआई लेवल 37) या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए:
getNumericErrorCode()नईERROR_TOO_MANY_KEYSवैल्यू दिखाता है. - अन्य सभी ऐप्लिकेशन के लिए:
getNumericErrorCode(),ERROR_INCORRECT_USAGEदिखाता है.
उपयोगकर्ता अनुभव और सिस्टम यूज़र इंटरफ़ेस (यूआई)
Android 17 में ये बदलाव किए गए हैं. इनका मकसद, लोगों को एक जैसा और बेहतर अनुभव देना है.
रोटेशन के बाद, IME की डिफ़ॉल्ट दृश्यता को वापस लाना
Android 17 से, डिवाइस के कॉन्फ़िगरेशन में बदलाव होने पर (उदाहरण के लिए, रोटेशन के ज़रिए) और ऐप्लिकेशन के ज़रिए इसे मैनेज न किए जाने पर, IME की पिछली सेटिंग वापस नहीं लाई जाती.
अगर आपके ऐप्लिकेशन के कॉन्फ़िगरेशन में ऐसा बदलाव होता है जिसे वह हैंडल नहीं कर पाता है और बदलाव के बाद ऐप्लिकेशन को कीबोर्ड की ज़रूरत होती है, तो आपको साफ़ तौर पर इसके लिए अनुरोध करना होगा. यह अनुरोध इनमें से किसी एक तरीके से किया जा सकता है:
android:windowSoftInputModeएट्रिब्यूट कोstateAlwaysVisibleपर सेट करें.- अपनी गतिविधि के
onCreate()तरीके में, प्रोग्राम के हिसाब से सॉफ़्ट कीबोर्ड का अनुरोध करें याonConfigurationChanged()तरीका जोड़ें.
लोगों से मिले इनपुट
Android 17 में ये बदलाव किए गए हैं. इनसे, कीबोर्ड और टचपैड जैसे ह्यूमन इनपुट डिवाइसों के साथ ऐप्लिकेशन के इंटरैक्ट करने के तरीके पर असर पड़ता है.
पॉइंटर कैप्चर के दौरान, टचपैड डिफ़ॉल्ट रूप से रिलेटिव इवेंट डिलीवर करते हैं
Android 17 से, अगर कोई ऐप्लिकेशन View.requestPointerCapture() का इस्तेमाल करके पॉइंटर कैप्चर करने का अनुरोध करता है और उपयोगकर्ता टचपैड का इस्तेमाल करता है, तो सिस्टम उपयोगकर्ता के टच से पॉइंटर की गतिविधि और स्क्रोलिंग के जेस्चर को पहचानता है. साथ ही, उन्हें ऐप्लिकेशन को उसी तरह से रिपोर्ट करता है जिस तरह से कैप्चर किए गए माउस से पॉइंटर और स्क्रोल व्हील की गतिविधियों को रिपोर्ट किया जाता है. ज़्यादातर मामलों में, इससे उन ऐप्लिकेशन की ज़रूरत खत्म हो जाती है जो कैप्चर किए गए चूहों के साथ काम करते हैं. साथ ही, टचपैड के लिए खास हैंडलिंग लॉजिक जोड़ने की ज़रूरत भी खत्म हो जाती है. ज़्यादा जानकारी के लिए, View.POINTER_CAPTURE_MODE_RELATIVE का दस्तावेज़ देखें.
इससे पहले, सिस्टम टचपैड से किए गए जेस्चर को नहीं पहचानता था. इसके बजाय, यह उंगलियों की सटीक जगह की जानकारी को ऐप्लिकेशन को उसी फ़ॉर्मैट में भेजता था जिस फ़ॉर्मैट में टचस्क्रीन पर किए गए टच की जानकारी भेजी जाती है. अगर किसी ऐप्लिकेशन को अब भी इस डेटा की ज़रूरत है, तो उसे View.POINTER_CAPTURE_MODE_ABSOLUTE के साथ View.requestPointerCapture(int) वाले नए तरीके को कॉल करना चाहिए.
मीडिया
Android 17 में, मीडिया के व्यवहार में ये बदलाव किए गए हैं.
बैकग्राउंड ऑडियो को बेहतर बनाना
Android 17 से, ऑडियो फ़्रेमवर्क बैकग्राउंड में ऑडियो इंटरैक्शन पर पाबंदियां लागू करता है. इनमें ऑडियो चलाना, ऑडियो फ़ोकस के अनुरोध, और वॉल्यूम बदलने वाले एपीआई शामिल हैं. इससे यह पक्का किया जा सकेगा कि ये बदलाव उपयोगकर्ता ने जान-बूझकर किए हैं.
अगर ऐप्लिकेशन, ऑडियो एपीआई को कॉल करने की कोशिश करता है, जबकि ऐप्लिकेशन मान्य लाइफ़साइकल में नहीं है, तो ऑडियो चलाने और वॉल्यूम बदलने वाले एपीआई बिना किसी अपवाद के या गड़बड़ी का मैसेज दिए बिना काम नहीं करते. ऑडियो फ़ोकस एपीआई, AUDIOFOCUS_REQUEST_FAILED नतीजे वाले कोड के साथ काम नहीं करता.
कम करने की रणनीतियों के साथ-साथ ज़्यादा जानकारी के लिए, बैकग्राउंड ऑडियो को सुरक्षित बनाना लेख पढ़ें.
कनेक्टिविटी
डिवाइस कनेक्टिविटी को बेहतर बनाने के लिए, Android 17 में ये बदलाव किए गए हैं.
ब्लूटूथ कनेक्शन टूटने पर, अपने-आप फिर से कनेक्ट होने की सुविधा
Android 17 में, अपने-आप फिर से पेयर होने की सुविधा जोड़ी गई है. यह सिस्टम-लेवल पर किया गया सुधार है. इसे ब्लूटूथ कनेक्शन के बंद होने की समस्या को अपने-आप ठीक करने के लिए डिज़ाइन किया गया है.
पहले, अगर कोई बॉन्ड खो जाता था, तो उपयोगकर्ताओं को सेटिंग में जाकर, पेरिफ़ेरल को अनपेयर करना पड़ता था. इसके बाद, उसे फिर से पेयर करना पड़ता था. यह सुविधा, Android 16 में सुरक्षा से जुड़े सुधारों पर आधारित है. इससे सिस्टम को बैकग्राउंड में फिर से कनेक्शन बनाने की अनुमति मिलती है. इसके लिए, उपयोगकर्ताओं को सेटिंग में जाकर, पेरिफ़ेरल को अनपेयर और फिर से पेयर करने की ज़रूरत नहीं होती.
ज़्यादातर ऐप्लिकेशन के लिए, कोड में बदलाव करने की ज़रूरत नहीं होगी. हालांकि, डेवलपर को ब्लूटूथ स्टैक में होने वाले इन बदलावों के बारे में पता होना चाहिए:
- पेयर करने का नया कॉन्टेक्स्ट:
ACTION_PAIRING_REQUESTमें अबEXTRA_PAIRING_CONTEXTएक्स्ट्रा शामिल है. इससे ऐप्लिकेशन, पेयर करने के सामान्य अनुरोध और ऑटोनॉमस सिस्टम की ओर से शुरू किए गए फिर से पेयर करने के अनुरोध के बीच अंतर कर सकते हैं. - शर्तों के साथ कुंजी अपडेट करना: मौजूदा सुरक्षा कुंजियों को सिर्फ़ तब बदला जाएगा, जब फिर से पेयर करने की प्रोसेस पूरी हो जाए और नया कनेक्शन, पिछले कनेक्शन की सुरक्षा के स्तर के बराबर या उससे ज़्यादा हो.
- बदली गई इंटेंट टाइमिंग:
ACTION_KEY_MISSINGइंटेंट अब सिर्फ़ तब ब्रॉडकास्ट होता है, जब अपने-आप फिर से पेयर करने की कोशिश नाकाम हो जाती है. अगर सिस्टम बैकग्राउंड में बॉन्ड को ठीक कर लेता है, तो इससे ऐप्लिकेशन में बिना वजह की गड़बड़ियों को ठीक करने की ज़रूरत नहीं पड़ती. - उपयोगकर्ता को सूचना: सिस्टम, नए यूज़र इंटरफ़ेस (यूआई) की सूचनाओं और डायलॉग बॉक्स के ज़रिए फिर से पेयर करने की प्रोसेस को मैनेज करता है. लोगों को फिर से पेयर करने की कोशिश की पुष्टि करने के लिए कहा जाएगा. इससे यह पक्का किया जा सकेगा कि उन्हें फिर से कनेक्ट होने के बारे में पता है.
पेरिफ़रल डिवाइस बनाने वाली कंपनियों और कंपैनियन ऐप्लिकेशन के डेवलपर को यह पुष्टि करनी चाहिए कि हार्डवेयर और ऐप्लिकेशन, बॉन्ड ट्रांज़िशन को आसानी से मैनेज करते हैं. इस व्यवहार की जांच करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करके, रिमोट बॉन्ड के खत्म होने का सिम्युलेट करें:
- सहायक डिवाइस से, बॉन्ड की जानकारी को मैन्युअल तरीके से हटाएं
- डिवाइस को मैन्युअल तरीके से अनपेयर करें: सेटिंग > कनेक्ट किए गए डिवाइस