Android 8.1 सुविधाएं और एपीआई

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 पहले से मालूम खतरा:

AndroidManifest.xml

<manifest>
    <application>
        ...
        <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
                   android:value="true" />
    </application>
</manifest>

MyWebActivity.java

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!");
            }
        }
    });
}

MyWebViewClient.java

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 के सर्टिफ़िकेट से भरोसे को हटाना.