Android 8.1 (एपीआई लेवल 27) में, कई तरह के उपयोगकर्ताओं और डेवलपर के लिए नई सुविधाएं और क्षमताएं. इस दस्तावेज़ में बताया गया है कि डेवलपर के लिए क्या नया है.
Android Oreo (Go संस्करण)
Android Go, Android के अनुभव को बेहतर बनाने के लिए शुरू की गई है अरबों लोग ऑनलाइन आते हैं. Android 8.1 से शुरू करके, हम Android को कम सुविधाओं वाले डिवाइसों के लिए बेहतरीन प्लैटफ़ॉर्म बना रहे हैं. Android Oreo में उपलब्ध सुविधाएं (Go वर्शन) कॉन्फ़िगरेशन में ये शामिल हैं:
- मेमोरी ऑप्टिमाइज़ेशन. सभी प्लैटफ़ॉर्म पर मेमोरी के इस्तेमाल को बेहतर बनाया, ताकि पक्का किया जा सके कि ऐप्लिकेशन 1 जीबी या इससे कम रैम वाले डिवाइसों पर बेहतर तरीके से चल सकें.
- ज़रूरत के हिसाब से टारगेटिंग के विकल्प. नई सीरीज़ हार्डवेयर की सुविधा कॉन्सटेंट की मदद से, आपको सामान्य या कम रैम वाले डिवाइसों पर ऐप्लिकेशन डिस्ट्रिब्यूशन को टारगेट करने की सुविधा मिलती है Google Play से डाउनलोड करें.
- Google Play.जब सभी ऐप्लिकेशन Android Oreo वाले डिवाइसों पर उपलब्ध होंगे (Go वर्शन), Google Play उन ऐप्लिकेशन को दिखाने की सुविधा देगा जिन्हें डेवलपर ने खास तौर पर ऑप्टिमाइज़ किया है इसका इस्तेमाल करके, अरबों लोगों को बेहतरीन अनुभव दिया जा सकता है. दिशा-निर्देशों का पालन करें.
हमने इस इमारत को अरबों लोगों के लिए अपडेट कर दिया है दिशा-निर्देशों के साथ अपने ऐप्लिकेशन को, चल रहे डिवाइसों के हिसाब से ऑप्टिमाइज़ करना Android Oreo (Go वर्शन). ज़्यादातर डेवलपर के लिए, अपने मौजूदा APK को ऑप्टिमाइज़ करना या Google Play पर, आपके APK के वर्शन को कम रैम वाले डिवाइसों पर टारगेट करने के लिए, एक से ज़्यादा APK सुविधा Android Oreo (Go वर्शन) वाले डिवाइसों के लिए, तैयारी करने का सबसे अच्छा तरीका है. याद रखें कि अपने ऐप्लिकेशन आसान और ज़्यादा असरदार से, आपकी पूरी ऑडियंस को फ़ायदा मिलता है. इस बात से कोई फ़र्क़ नहीं पड़ता है कि कोई भी डिवाइस कौनसा है.
न्यूरल नेटवर्क एपीआई
Neural Networks API से, डिवाइस पर मौजूद मशीन के लिए तेज़ी से कंप्यूटेशन और अनुमान की सुविधा मिलती है TensorFlow जैसे लर्निंग फ़्रेमवर्क Lite—मोबाइल के लिए Google की क्रॉस-प्लैटफ़ॉर्म ML लाइब्रेरी— साथ ही, Caffe2 और अन्य. TensorFlow Lite पर जाएं ओपन सोर्स रेपो का इस्तेमाल करें. TensorFlow Lite, न्यूरल नेटवर्क एपीआई के साथ काम करता है, ताकि इस तरह के मॉडल चलाए जा सकें MobileNets, इंसेप्शन v3, और आपके मोबाइल डिवाइस पर बेहतर तरीके से स्मार्ट जवाब की सुविधा मिलती है.
अपने-आप भरने वाले फ़्रेमवर्क के अपडेट
Android 8.1 (एपीआई लेवल 27) की मदद से, जानकारी अपने-आप भरने की सुविधा में कई सुधार किए गए हैं फ़्रेमवर्क जिसे अपने ऐप्लिकेशन में शामिल किया जा सकता है.
BaseAdapter
क्लास में अब setAutofillOptions()
शामिल है
तरीका, जिसकी सहायता से आप
अडैप्टर. यह स्पिनर के लिए उपयोगी है
ऐसे कंट्रोल होते हैं जो अपने अडैप्टर में डाइनैमिक तौर पर वैल्यू जनरेट करते हैं. उदाहरण के लिए,
तो आप स्ट्रिंग देने के लिए setAutofillOptions()
तरीके का इस्तेमाल कर सकते हैं
साल की उस सूची का उदाहरण जिसे उपयोगकर्ता,
क्रेडिट कार्ड की समयसीमा खत्म होने की तारीख. ऑटोमैटिक भरने की सेवा, स्ट्रिंग के तौर पर दिखाने के लिए इस्तेमाल की जा सकती है
ताकि वे व्यू सही तरीके से भरे जा सकें जिनके लिए डेटा की ज़रूरत है.
साथ ही, AutofillManager
क्लास में notifyViewVisibilityChanged(View, int, boolean)
तरीका शामिल है
जिसे आप दस्तावेज़ की दृश्यता में होने वाले बदलावों के बारे में फ़्रेमवर्क को सूचित करने के लिए कॉल कर सकते हैं
वर्चुअल स्ट्रक्चर में देखने के लिए किया जा सकता है. गैर-लाभकारी संस्थाओं के लिए तरीके का ओवरलोड भी
वर्चुअल स्ट्रक्चर. हालांकि, गैर-वर्चुअल संरचनाओं के लिए आम तौर पर आपको
को साफ़ तौर पर सूचित करें, क्योंकि इस तरीके को पहले ही
View
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
क्लास.
Android 8.1, ऑटोमैटिक भरने वाली सेवाओं को, सेव किए गए यूज़र इंटरफ़ेस (यूआई) को पसंद के मुताबिक बनाने की सुविधा भी देता है
CustomDescription
and
Validator
के लिए, सहायता पाने की सुविधा जोड़ें
SaveInfo
के अंदर.
पसंद के मुताबिक बनाई गई जानकारी, ऑटोमैटिक भरने की सेवा को यह बताने में मदद करती है कि कौनसी जानकारी
सेव किया जा रहा है; उदाहरण के लिए, जब स्क्रीन में क्रेडिट कार्ड हो, तो
क्रेडिट कार्ड के बैंक का लोगो और क्रेडिट कार्ड के आखिरी चार अंक दिखेंगे
और उसका एक्सपायर नंबर. ज़्यादा जानने के लिए,
CustomDescription
देखें
क्लास.
Validator
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
पुष्टि करने वाले प्रोग्राम में, ऑब्जेक्ट का इस्तेमाल इसलिए किया जाता है, ताकि ऑटोमैटिक भरने की सुविधा को सेव करने के लिए यूज़र इंटरफ़ेस (यूआई) न दिखे
शर्त पूरी नहीं हुई. ज़्यादा जानकारी के लिए,
पुष्टि करने वाली क्लास और इसके सब-क्लास,
LunChecksumValidator और RegexValidator.
सूचनाएं
Android 8.1 में सूचनाओं के ये बदलाव शामिल हैं:
- अब ऐप्लिकेशन, हर सेकंड में सिर्फ़ एक बार सूचना की सूचना आवाज़ के लिए कर सकते हैं. इन सूचनाओं की आवाज़ें इससे ज़्यादा होंगी दर सूची में नहीं है और खो जाती है. इस बदलाव का असर सूचना के दूसरे पहलुओं पर नहीं पड़ता व्यवहार और सूचना वाले मैसेज अब भी उम्मीद के मुताबिक पोस्ट होते रहेंगे.
-
NotificationListenerService
और कम रैम वाले डिवाइसों पर,ConditionProviderService
का इस्तेमाल नहीं किया जा सकता Android पर चलने वाले ऐसे डिवाइस जोtrue
पर वापस जाते हैंActivityManager.isLowRamDevice()
पर कॉल किया गया है.
टेक्स्ट अपडेट करें
एपीआई लेवल 27 से शुरू करते हुए, EditText.getText()
वाला तरीका Editable
दिखाता है; पहले
इससे CharSequence
मिला. यह बदलाव है
पुराने सिस्टम के साथ काम करता है, क्योंकि Editable
लागू करता है
CharSequence
.
Editable
इंटरफ़ेस में ज़्यादा जानकारी मिलती है
काम करता है. उदाहरण के लिए, क्योंकि Editable
ने भी
Spannable
इंटरफ़ेस को लागू करता है, तो आप
EditText
के इंस्टेंस में मौजूद कॉन्टेंट.
सुरक्षित ब्राउज़िंग की प्रोग्रामैटिक कार्रवाइयां
का उपयोग करके
सुरक्षित ब्राउज़िंग एपीआई को WebView
लागू करने पर, आपका ऐप्लिकेशन ये काम कर सकता है
पता लगाएं कि WebView
का कोई इंस्टेंस जब नेविगेट करने की कोशिश करता है
ऐसा यूआरएल हो जिसे Google ने पहले से मालूम खतरे की कैटगरी में रखा है. डिफ़ॉल्ट रूप से,
WebView
पेज पर अचानक दिखने वाला एक विज्ञापन दिखाता है, जो उपयोगकर्ताओं को पहले से मालूम खतरे की चेतावनी देता है.
यह स्क्रीन, उपयोगकर्ताओं को यूआरएल को फिर भी लोड करने या
जो सुरक्षित हैं.
Android 8.1 में, आप प्रोग्राम के रूप में यह तय कर सकते हैं कि ऐप किसी जाने-पहचाने खतरे का जवाब देता है:
- यह कंट्रोल किया जा सकता है कि आपका ऐप्लिकेशन, सुरक्षित कॉन्टेंट के लिए जाने-पहचाने खतरों की रिपोर्ट करे या नहीं ब्राउज़िंग.
- आप अपने ऐप्लिकेशन से कोई खास कार्रवाई अपने-आप करने के लिए सेट कर सकते हैं—जैसे सुरक्षित ब्राउज़िंग की सुविधा का इस्तेमाल करना—जब उसे कोई ऐसा यूआरएल मिले जिसमें सुरक्षित ब्राउज़िंग की सुविधा चालू हो पहले से मालूम खतरे के रूप में करता है.
ध्यान दें: जाने-पहचाने खतरों से सुरक्षित रहने के लिए, इंतज़ार करें
जब तक आप
WebView
ऑब्जेक्ट का loadUrl()
तरीका.
नीचे दिए गए कोड स्निपेट दिखाते हैं कि आप अपने ऐप्लिकेशन के इंस्टेंस को
समस्या का सामना करने के बाद हमेशा सुरक्षित रहने के लिए WebView
पहले से मालूम खतरा:
<manifest> <application> ... <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="true" /> </application> </manifest>
Kotlin
private var superSafeWebView: WebView? = null private var safeBrowsingIsInitialized: Boolean = false // ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) superSafeWebView = WebView(this).apply { webViewClient = MyWebViewClient() safeBrowsingIsInitialized = false startSafeBrowsing(this@SafeBrowsingActivity, { success -> safeBrowsingIsInitialized = true if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!") } }) } }
Java
private WebView superSafeWebView; private boolean safeBrowsingIsInitialized; // ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); superSafeWebView = new WebView(this); superSafeWebView.setWebViewClient(new MyWebViewClient()); safeBrowsingIsInitialized = false; superSafeWebView.startSafeBrowsing(this, new ValueCallback<Boolean>() { @Override public void onReceiveValue(Boolean success) { safeBrowsingIsInitialized = true; if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!"); } } }); }
Kotlin
class MyWebViewClient : WebViewClient() { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. override fun onSafeBrowsingHit( view: WebView, request: WebResourceRequest, threatType: Int, callback: SafeBrowsingResponse ) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true) Toast.makeText(view.context, "Unsafe web page blocked.", Toast.LENGTH_LONG).show() } }
Java
public class MyWebViewClient extends WebViewClient { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. @Override public void onSafeBrowsingHit(WebView view, WebResourceRequest request, int threatType, SafeBrowsingResponse callback) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true); Toast.makeText(view.getContext(), "Unsafe web page blocked.", Toast.LENGTH_LONG).show(); } }
वीडियो थंबनेल इकट्ठा करने वाला टूल
MediaMetadataRetriever
क्लास के लिए getScaledFrameAtTime()
नाम का एक नया तरीका इस्तेमाल किया गया है.
दी गई समय स्थिति के पास एक फ़्रेम और उसी पहलू के साथ बिटमैप देता है
अनुपात को सोर्स फ़्रेम के तौर पर सेट करें, लेकिन उसे दी गई चौड़ाई और
ऊंचाई. इससे वीडियो से थंबनेल इमेज जनरेट करने में मदद मिलती है.
हमारा सुझाव है कि getFrameAtTime()
के बजाय, यह तरीका इस्तेमाल करें. इससे मेमोरी बर्बाद हो सकती है
क्योंकि यह सोर्स वीडियो की तरह ही रिज़ॉल्यूशन वाला बिटमैप दिखाता है. इसके लिए
उदाहरण के लिए, किसी 4K वीडियो से लिया गया फ़्रेम, 16 एमबी का बिटमैप होगा, जो आपसे काफ़ी बड़ा होगा
के लिए थंबनेल इमेज की ज़रूरत होगी.
शेयर की गई मेमोरी का एपीआई
Android 8.1 (एपीआई लेवल 27) के लिए, पेश है एक नया
SharedMemory
एपीआई. इस क्लास में आपको अपनी पहचान छिपाकर, मैप करने, और मैनेज करने की सुविधा मिलती है
SharedMemory
इंस्टेंस. आपने मेमोरी की सुरक्षा मोड को सेट किया है
एक पर
SharedMemory
पढ़ने और/या लिखने के लिए ऑब्जेक्ट प्रदान करता है और,
SharedMemory
ऑब्जेक्ट पार्स किया जा सकता है. एआईडीएल की मदद से, इसे किसी दूसरी प्रोसेस में आसानी से पास किया जा सकता है.
SharedMemory
एपीआई,
एनडीके में ASharedMemory
की फ़ैसिलिटी.
ASharedMemory
ऐक्सेस देता है
को फ़ाइल डिस्क्रिप्टर से जोड़ा जाता है, जिसे पढ़ने और लिखने के लिए मैप किया जा सकता है. यह बहुत बढ़िया है
बड़ी मात्रा में शेयर करने का तरीका
ऐप्लिकेशन के बीच या एक ही ऐप्लिकेशन में कई प्रोसेस के बीच का डेटा.
वॉलपेपर के रंग का एपीआई
Android 8.1 (एपीआई लेवल 27) की मदद से, आपके लाइव वॉलपेपर को रंग दिया जा सकता है
जानकारी को सिस्टम के यूज़र इंटरफ़ेस (यूआई) में भेजा जा सकता है. WallpaperColors
बनाकर ऐसा किया जा सकता है
बिट मैप, ड्रॉ करने लायक या तीन मैन्युअल रूप से चुने गए रंगों का इस्तेमाल करके ऑब्जेक्ट कर सकते हैं.
आप चाहें, तो रंग की इस जानकारी को भी वापस पाया जा सकता है.
WallpaperColors
बनाने के लिए
ऑब्जेक्ट को हटाने के लिए, इनमें से कोई एक काम करें:
WallpaperColors
बनाने के लिए ऑब्जेक्ट बनाने के लिए, तीन रंगों का इस्तेमाल करें औरWallpaperColors
का इंस्टेंस बनाएं प्राइमरी, सेकंडरी, और टर्शीयरी कलर की मदद से क्लास को पास करें. मुख्य रंग शून्य नहीं होना चाहिए.WallpaperColors
बनाने के लिए बिट मैप से ऑब्जेक्ट जोड़ने के लिए,fromBitmap()
को कॉल करें पास करने का तरीका बताएंगे.WallpaperColors
बनाने के लिए ड्रॉ करने लायक ऑब्जेक्ट में मौजूद है, तोfromDrawable()
को कॉल करें ड्रॉ करने लायक सोर्स को पैरामीटर के तौर पर पास किया जाता है.
इमेज की मदद से, मुख्य, दूसरे या तीसरे रंग की जानकारी वापस पाने के लिए वॉलपेपर के लिए, इन तरीकों का इस्तेमाल करें:
getPrimaryColor()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वॉलपेपर का सबसे विज़ुअल तौर पर दिखाने वाला रंग लौटाता है.getSecondaryColor()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वॉलपेपर का दूसरा सबसे खास रंग लौटाता है.getTertiaryColor()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है तरीका, वॉलपेपर का तीसरा सबसे खास रंग लौटाता है.
अपने लाइव वॉलपेपर के रंग में किसी भी बड़े बदलाव के बारे में सिस्टम को सूचित करने के लिए,
notifyColorsChanged()
को कॉल करो
तरीका. यह तरीका, onComputeColors()
की लाइफ़साइकल को ट्रिगर करता है
वह इवेंट जिसमें आपको नया WallpaperColors
उपलब्ध कराने का मौका मिलता है
ऑब्जेक्ट है.
रंग में बदलाव करने के लिए लिसनर जोड़ने के लिए, addOnColorsChangedListener()
तरीके को कॉल करें. आप
getWallpaperColors()
तरीके को भी कॉल करें
का इस्तेमाल करें.
फ़िंगरप्रिंट के अपडेट
FingerprintManager
क्लास में
निम्न गड़बड़ी कोड प्रस्तुत किए गए:
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT
– उपयोगकर्ता ने कोशिश की कई बार फ़िंगरप्रिंट रीडर का इस्तेमाल करके डिवाइस को अनलॉक नहीं कर पाते. -
FINGERPRINT_ERROR_VENDOR
– वेंडर के लिए खास फ़िंगरप्रिंट रीडर की गड़बड़ी हुई.
क्रिप्टोग्राफ़ी से जुड़े अपडेट
Android 8.1 के साथ क्रिप्टोग्राफ़ी में कई बदलाव किए गए हैं:
- Conscrypt में नए एल्गोरिदम लागू किए गए हैं. द कॉन्क्रिप्ट
इस सुविधा को लागू करने का इस्तेमाल, मौजूदा बाउंसी कैसल के मुकाबले ज़्यादा किया जाता है
लागू करना. नए एल्गोरिदम में ये शामिल हैं:
AlgorithmParameters:GCM
KeyGenerator:AES
KeyGenerator:DESEDE
KeyGenerator:HMACMD5
KeyGenerator:HMACSHA1
KeyGenerator:HMACSHA224
KeyGenerator:HMACSHA256
KeyGenerator:HMACSHA384
KeyGenerator:HMACSHA512
SecretKeyFactory:DESEDE
Signature:NONEWITHECDSA
Cipher.getParameters().getParameterSpec(IvParameterSpec.class)
नहीं GCM का उपयोग करने वाले एल्गोरिदम के साथ लंबे समय तक काम करता है. इसके बजाय,getParameterSpec(GCMParameterSpec.class)
.- TLS से जुड़ी कई इंटरनल कंक्रीट क्लास का रीफ़ैक्टर किया गया. से
डेवलपर कभी-कभी इन चीज़ों को बिना किसी बदलाव के ऐक्सेस करते हैं. इसलिए, शिम को सिर्फ़
पिछले उपयोग का समर्थन करते है, लेकिन कुछ विवरण बदल गए हैं. उदाहरण के लिए, सॉकेट
पहले ये
OpenSSLSocketImpl
टाइप की थीं, लेकिन अब इनका टाइप हैConscryptFileDescriptorSocket
याConscryptEngineSocket
, ये दोनों ही विस्तृत होते हैंOpenSSLSocketImpl
. - थ्रो करने के लिए इस्तेमाल किए गए
SSLSession
तरीके शून्य रेफ़रंस पास करने पर,IllegalArgumentException
से अबNullPointerException
फेंकें. - आरएसए
KeyFactory
अब कुंजी जनरेट करने की अनुमति नहीं देता कोड में बदली गई कुंजी से बड़े साइज़ वाले बाइट सरणियों से. इन पर कॉलgeneratePrivate()
औरgeneratePublic()
जोKeySpec
जहां कुंजी संरचना पूरे बफ़र का नतीजाInvalidKeySpecException
होगा. - जब सॉकेट बंद होने से सॉकेट रीड में रुकावट आती है, तो Conscrypt का इस्तेमाल किया जाता है
रीड से -1 लौटाने के लिए. पढ़ने की सुविधा अब मिल रही है
SocketException
. - रूट CA सर्टिफ़िकेट के सेट में बदलाव किया गया है. इसमें ज़्यादातर बड़े सर्टिफ़िकेट को हटाया गया है पुराने सर्टिफ़िकेट की संख्या नहीं, बल्कि रूट सर्टिफ़िकेट को भी हटाया जा सकता है WoSign और StartCom. इस फ़ैसले के बारे में ज़्यादा जानने के लिए, Google की सुरक्षा ब्लॉग पोस्ट, फ़ाइनल WoSign और StartCom के सर्टिफ़िकेट से भरोसे को हटाना.