व्यवहार में बदलाव: एपीआई लेवल 28+ को टारगेट करने वाले ऐप्लिकेशन

Android 9 (एपीआई लेवल 28) की मदद से, Android सिस्टम में कई बदलाव किए गए हैं. नीचे दिए गए व्यवहार में बदलाव खास तौर से टारगेट किए जा रहे ऐप्लिकेशन पर लागू होते हैं एपीआई लेवल 28 या उसके बाद का वर्शन. ऐसे ऐप्लिकेशन जो targetSdkVersion को एपीआई लेवल 28 पर सेट करते हैं या उच्च को संशोधित करना होगा जहां भी लागू हो, वे इस तरह की गतिविधियों को ठीक से पूरा करने में मदद करें.

Android 9 पर चलने वाले सभी ऐप्लिकेशन पर असर डालने वाले बदलावों के लिए. भले ही, कोई भी एपीआई का स्तर उनकी टारगेट की गई है, तो व्यवहार में बदलाव: सभी ऐप्लिकेशन.

फ़ोरग्राउंड सेवाएं

Android 9 या इसके बाद के वर्शन को टारगेट करने वाले और फ़ोरग्राउंड सेवाओं का इस्तेमाल करने वाले ऐप्लिकेशन को FOREGROUND_SERVICE अनुमति. यह सामान्य अनुमति है, इसलिए सिस्टम अपने-आप अनुरोध करने वाले ऐप्लिकेशन को इसकी अनुमति दे देता है.

अगर Android 9 या उसके बाद के वर्शन को टारगेट करने वाला कोई ऐप्लिकेशन, बिना फ़ोरग्राउंड सेवा के इस्तेमाल की कोशिश करता है FOREGROUND_SERVICE का अनुरोध किया जा रहा है, सिस्टम को SecurityException दिखाता है.

निजता परिवर्तन

अगर आपका ऐप्लिकेशन Android 9 को टारगेट करता है, तो आपको ये बातें ध्यान में रखनी चाहिए व्यवहार में बदलाव होते हैं. डिवाइस की सीरियल और डीएनएस की जानकारी के ये अपडेट उपयोगकर्ता की निजता को बेहतर बनाने के लिए.

बिल्ड के सीरियल नंबर का इस्तेमाल बंद कर दिया गया है

Android 9 में, Build.SERIAL उपयोगकर्ताओं की जानकारी को सुरक्षित रखने के लिए, इसे हमेशा "UNKNOWN" पर सेट किया गया हो निजता.

अगर आपके ऐप्लिकेशन को किसी डिवाइस के हार्डवेयर का सीरियल नंबर ऐक्सेस करना है, तो इसके बजाय, अनुरोध करें READ_PHONE_STATE अनुमति, फिर कॉल करें getSerial().

डीएनएस की निजता

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

फ़्रेमवर्क की सुरक्षा से जुड़े बदलाव

Android 9 में, व्यवहार में कई बदलाव शामिल हैं. इससे की सुरक्षा कर सकते हैं, लेकिन ये बदलाव सिर्फ़ तब लागू होते हैं, जब आपका ऐप्लिकेशन एपीआई लेवल को टारगेट करता हो 28 या उससे ज़्यादा.

नेटवर्क TLS की सुविधा डिफ़ॉल्ट रूप से चालू होनी चाहिए

अगर आपका ऐप्लिकेशन Android 9 या इसके बाद वाले वर्शन को टारगेट करता है, तो isCleartextTrafficPermitted() तरीका, डिफ़ॉल्ट रूप से false दिखाता है. अगर आपके ऐप्लिकेशन को इसके लिए cleartext को सक्षम करने की आवश्यकता है आपको साफ़ तौर पर cleartextTrafficPermitted को true पर सेट करना होगा आपके ऐप्लिकेशन के नेटवर्क सुरक्षा' में मौजूद डोमेन के लिए कॉन्फ़िगरेशन.

प्रोसेस से अलग की गई वेब पर आधारित डेटा डायरेक्ट्री

Android 9 में ऐप्लिकेशन की स्थिरता और डेटा के रखरखाव को बेहतर बनाने के लिए, ऐप्लिकेशन एक WebView डेटा शेयर करें के बीच डायरेक्ट्री एक से ज़्यादा प्रोसेस. आम तौर पर, ऐसी डेटा डायरेक्ट्री, कुकी, एचटीटीपी कैश, और दूसरी चीज़ों को स्टोर करती हैं और कुछ समय के लिए सेव किया गया हो.

ज़्यादातर मामलों में, आपके ऐप्लिकेशन को android.webkit पैकेज, जैसे कि जैसे WebView और CookieManager, सिर्फ़ एक में प्रोसेस. उदाहरण के लिए, आपको सभी Activity ऐसे ऑब्जेक्ट जो WebView का इस्तेमाल करते हैं एक ही प्रक्रिया में करते हैं. "सिर्फ़ एक प्रोसेस" को सख्ती से लागू किया जा सकता है नियम कॉल करके disableWebView() इंच आपके ऐप्लिकेशन की अन्य प्रोसेस पर ध्यान देती हैं. इस कॉल की वजह से WebView शुरू नहीं हो पा रहा है गलती से उन अन्य प्रक्रियाओं में हो, भले ही उन्हें किसी लाइब्रेरी.

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

हर ऐप्लिकेशन के हिसाब से SELinux डोमेन

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

दूसरे ऐप्लिकेशन के साथ फ़ाइलें शेयर करने के लिए, किसी कॉन्टेंट का इस्तेमाल करें कंपनी.

कनेक्टिविटी में बदलाव

कनेक्टिविटी डेटा की गिनती और मल्टीपाथ

Android 9 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में, यह सिस्टम गिनती करता है नेटवर्क पर नेटवर्क ट्रैफ़िक जो मौजूदा डिफ़ॉल्ट सेटिंग नहीं हैं, जैसे कि डिवाइस के चालू रहने पर सेल से मिलने वाला ट्रैफ़िक वाई-फ़ाई—और यह सेवा NetworkStatsManager क्लास का इस्तेमाल करें.

खास तौर पर, getMultipathPreference() अब ऊपर दिए गए नेटवर्क ट्रैफ़िक के आधार पर वैल्यू दिखाता है. इससे शुरुआत Android 9. यह तरीका सेल डेटा के लिए true दिखाता है, लेकिन तय सीमा से ज़्यादा होने पर एक दिन में ट्रैफ़िक इकट्ठा होता है, तो यह false लौटना शुरू हो जाता है. इस पर चल रहे ऐप्लिकेशन Android 9 वर्शन को इस तरीके को कॉल करना होगा और इस संकेत का पालन करना होगा.

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

Apache एचटीटीपी क्लाइंट का बंद होना

Android 6.0 के साथ, हमने Apache एचटीटीपी क्लाइंट के लिए सहायता हटा दी है. Android 9 और इसके बाद के वर्शन में, वह लाइब्रेरी बूटक्लासपाथ का इस्तेमाल करता है. यह डिफ़ॉल्ट रूप से ऐप्लिकेशन के लिए उपलब्ध नहीं होता.

Apache एचटीटीपी क्लाइंट का इस्तेमाल जारी रखने के लिए, Android 9 और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन अपने AndroidManifest.xml में यह जानकारी जोड़ सकते हैं:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

रनटाइम Apache लाइब्रेरी इस्तेमाल करने के विकल्प के तौर पर, ऐप्लिकेशन अपनी अपने APK में मौजूद org.apache.http लाइब्रेरी के अपने वर्शन का इस्तेमाल करें. अगर आपने ऐसा किया, तो आपको लाइब्रेरी को इस तरह रीपैकेज करना होगा कि (जैसे, Jar Jar), ताकि क्लास के साथ काम करने से जुड़ी समस्याओं से बचा जा सके रनटाइम में दी गई क्लास के साथ कनेक्ट करता है.

यूज़र इंटरफ़ेस (यूआई) में बदलाव

फ़ोकस देखें

ऐसे व्यू पर फ़ोकस नहीं किया जा सकता जिनकी इमेज की चौड़ाई या ऊंचाई शून्य हो.

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

सीएसएस RGBA हेक्स वैल्यू हैंडलिंग

Android 9 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, ड्राफ़्ट वर्शन को चालू करना ज़रूरी है सीएसएस का कलर मॉड्यूल लेवल 4 4 और 8 हेक्स अंक वाले सीएसएस रंगों को हैंडल करने का तरीका.

सीएसएस कलर मॉड्यूल लेवल 4 Chrome पर रिलीज़ 52 से काम कर रहा है, लेकिन वेबव्यू फ़िलहाल इस सुविधा को बंद करता है क्योंकि मौजूदा Android ऐप्लिकेशन में 32 बिट हेक्स रंग शामिल थे होने से रोका जा सकता है. इससे रेंडरिंग में गड़बड़ियां हो सकती हैं.

उदाहरण के लिए, फ़िलहाल, रंग #80ff8080 को इसमें रेंडर किया गया है ओपेक के रूप में वेबव्यू एपीआई लेवल 27 या उससे पहले के लेवल को टारगेट करने वाले ऐप्लिकेशन के लिए, हल्का लाल (#ff8080) रंग. लीडिंग कॉम्पोनेंट (जिसे Android ऐल्फ़ा कॉम्पोनेंट समझेगा) अभी अनदेखा किया गया है. अगर कोई ऐप्लिकेशन, एपीआई लेवल 28 या उसके बाद के लेवल को टारगेट करता है, तो #80ff8080 इसे 50% पारदर्शी हल्के हरे (#80ff80) के तौर पर दिखाया गया है.

फ़ाइल के लिए MIME प्रकार स्निफ़िंग: यूआरआई

Android 9 से पहले के Android वर्शन के लिए, फ़ाइल में मौजूद एमआईएमई टाइप का अनुमान लगाया जा सकता है कॉन्टेंट. Android 9 (एपीआई लेवल 28) के साथ शुरू होने वाले ऐप्लिकेशन को में file: यूआरआई लोड करते समय सही फ़ाइल एक्सटेंशन वेबव्यू.

MIME टाइप का अनुमान लगाने के लिए फ़ाइल के कॉन्टेंट का इस्तेमाल करना, सुरक्षा से जुड़ी गड़बड़ियों का सोर्स हो सकता है. और मॉडर्न ब्राउज़र में इसकी अनुमति आम तौर पर नहीं होती.

अगर किसी फ़ाइल का कोई मान्य फ़ाइल एक्सटेंशन मौजूद है, जैसे कि .html, .txt, .js या .css MIME टाइप को एक्सटेंशन तय करेगा. अगर फ़ाइल का कोई एक्सटेंशन मौजूद नहीं है या फ़ाइल में कोई एक्सटेंशन मौजूद नहीं है, तो MIME टाइप सादा होगा टेक्स्ट.

उदाहरण के लिए, file:///sdcard/test.html जैसे यूआरआई को इस तरह रेंडर किया जाएगा एचटीएमएल है, लेकिन file:///sdcard/test जैसा यूआरआई, सामान्य टेक्स्ट के तौर पर रेंडर होगा, भले ही फ़ाइल में एचटीएमएल डेटा हो.

दस्तावेज़ का स्क्रोल करने वाला एलिमेंट

Android 9, दस्तावेज़ के रूट होने पर भी समस्या को ठीक करता है एलिमेंट, स्क्रोलिंग एलिमेंट है. इससे पहले के वर्शन में, बॉडी एलिमेंट पर स्क्रोल करने की पोज़िशन सेट की गई थी और रूट एलिमेंट में स्क्रोल करने के लिए शून्य वैल्यू थीं. Android 9, मानकों का पालन करने वाला व्यवहार, जिसमें स्क्रोलिंग एलिमेंट रूट है एलिमेंट.

इसके अलावा, document.body.scrollTop, document.body.scrollLeft, document.documentElement.scrollTop या document.documentElement.scrollLeft टारगेट SDK टूल के हिसाब से, अलग-अलग तरह से काम करेगा. व्यूपोर्ट स्क्रोल करने के लिए अगर उपलब्ध हो, तो document.scrollingElement का इस्तेमाल करें.

निलंबित ऐप्लिकेशन से मिलने वाली सूचनाएं

Android 9 से पहले के वर्शन में, निलंबित ऐप्लिकेशन की सूचनाएं रद्द की जाती थीं. Android 9 और इसके बाद के वर्शन में, निलंबित ऐप्लिकेशन की सूचनाएं तब तक के लिए छिपी रहती हैं ऐप को फिर से शुरू कर दिया जाता है.