ऐप्लिकेशन के व्यवहार में बदलाव: सभी ऐप्लिकेशन

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

Android 17 को टारगेट करने वाले ऐप्लिकेशन पर ही असर डालने वाले बदलावों की सूची भी देखें .

मुख्य फ़ंक्शन

Android 17 (एपीआई लेवल 37) में, ये बदलाव शामिल हैं. इनसे Android सिस्टम की कई मुख्य क्षमताओं में बदलाव होता है या उन्हें बढ़ाया जाता है.

ऐप्लिकेशन के लिए मेमोरी की सीमाएं

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

`ApplicationExitInfo` में ` getDescription` को कॉल करके, यह पता लगाया जा सकता है कि आपके ऐप्लिकेशन सेशन पर असर पड़ा है या नहीं. अगर आपके ऐप्लिकेशन पर असर पड़ा है, तो बंद होने की वजह `REASON_OTHER` होगी. साथ ही, जानकारी में `"MemoryLimiter:AnonSwap"` स्ट्रिंग के साथ-साथ अन्य जानकारी भी शामिल होगी. मेमोरी की सीमा पूरी होने पर, हीप डंप पाने के लिए, ट्रिगर-आधारित प्रोफ़ाइलिंग के साथ TRIGGER_TYPE_ANOMALY का भी इस्तेमाल किया जा सकता है.

Android Studio Profiler में, LeakCanary टास्क.

Android Studio Panda में, मेमोरी लीक की समस्याओं को ढूंढने के लिए, Android Studio Profiler में सीधे तौर पर LeakCanary इंटिग्रेशन जोड़ा गया है. यह एक खास टास्क के तौर पर काम करता है. इसे आईडीई में कॉन्टेक्स्चुअलाइज़ किया गया है और यह आपके सोर्स कोड के साथ पूरी तरह से इंटिग्रेट किया गया है.

सुरक्षा

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 में, ये बदलाव शामिल हैं. इनका मकसद, लोगों को बेहतर और आसान अनुभव देना है.

स्क्रीन रोटेट करने के बाद, डिफ़ॉल्ट आईएमई की विज़िबिलिटी को वापस लाना

Android 17 से, डिवाइस के कॉन्फ़िगरेशन में बदलाव होने पर (उदाहरण के लिए, रोटेशन के ज़रिए) और अगर ऐप्लिकेशन इसे मैनेज नहीं करता है, तो पहले कीबोर्ड की दिखने की सेटिंग वापस नहीं लाई जाती.

अगर आपके ऐप्लिकेशन के कॉन्फ़िगरेशन में कोई ऐसा बदलाव होता है जिसे वह मैनेज नहीं करता है और बदलाव के बाद ऐप्लिकेशन को कीबोर्ड दिखाने की ज़रूरत है, तो आपको साफ़ तौर पर इसके लिए अनुरोध करना होगा. इसके लिए, इनमें से कोई एक तरीका अपनाएं:

  • 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 introduces autonomous re-pairing, a system-level enhancement designed to automatically resolve Bluetooth bond loss.

Previously, if a bond was lost, users had to manually navigate to Settings to unpair and then re-pair the peripheral. This feature builds upon the security improvement of Android 16 by allowing the system to re-establish bonds in the background without requiring users to manually navigate to Settings to unpair and re-pair peripherals.

While most apps will not require code changes, developers should be aware of the following behavior changes in Bluetooth stack:

  • New pairing context: The ACTION_PAIRING_REQUEST now includes the EXTRA_PAIRING_CONTEXT extra which allows apps to distinguish between a standard pairing request and an autonomous system-initiated re-pairing attempt.
  • Conditional key updates: Existing security keys will only be replaced if the re-pairing is successful and new connection meets or exceeds the security level of the previous bond.
  • Modified intent timing: The ACTION_KEY_MISSING intent is now broadcast only if the autonomous re-pairing attempt fails. This reduces unnecessary error handling in the app if the system successfully recovers the bond in the background.
  • User notification: The system manages re-pairing via new UI notifications and dialogs. Users will be prompted to confirm the re-pairing attempt to ensure they are aware of the reconnection.

Peripheral device manufacturers and companion app developers should verify that hardware and app gracefully handle bond transitions. To test this behavior, simulate a remote bond loss using either of the following methods:

  • Manually remove the bond information from the peripheral device
  • Manually unpair the device in: Settings > Connected devices