Android 8.1 Özellikleri ve API'leri

Android 8.1 (API düzeyi 27), çok çeşitli özellikler kullanıcılar ve geliştiriciler için yeni özellikler ve olanaklar. Bu dokümanda, geliştiriciler için sunulan yenilikler vurgulanmaktadır.

Android Oreo (Go sürümü)

Android Go, kullanıcıların Android deneyimini optimize etmeyi amaçlayan girişimimizdir. 20 milyon aboneye ulaştık. Android 8.1 sürümünden itibaren Android'i giriş düzeyindeki cihazlar için mükemmel bir platform haline getiriyoruz. Android Oreo'daki özellikler (Go sürümü) yapılandırması şunları içerir:

  • Bellek optimizasyonları. Platform genelinde iyileştirilen bellek kullanımı, .
  • Esnek hedefleme seçenekleri. Yeniler donanım özelliği sabit değerleri kullanarak uygulamalarınızın normal veya düşük RAM'li cihazlara dağıtımını Google Play
  • Google Play.Tüm uygulamalar Android Oreo çalıştıran cihazlarda kullanılabilir (Go sürümü) için Google Play, geliştiriciler tarafından özel olarak optimize edilen uygulamaları görmenizi sağlar milyarlarca kullanıcıya hitap eden binayla milyarlarca kullanıcıya mükemmel bir deneyim sunuyor. aykırıdır.

Binayı milyarlarca kişi için güncelledik kılavuzlarını okuyun uygulamanızı çalışan cihazlar için optimize edin Android Oreo (Go sürümü). Çoğu geliştirici için, mevcut APK'nızı optimize etmek veya Google Play'in APK'nızın bir sürümünü düşük RAM'li cihazlara hedeflemek için birden fazla APK özelliği Android Oreo (Go sürümü) çalıştıran cihazlar için hazırlanmanın en iyi yoludur. Unutmayın ki, uygulaması daha hafif ve daha verimli seçeneği, cihazdan bağımsız olarak tüm kitleniz için faydalıdır.

Sinir Ağları API'sı

Neural Networks API, cihaz üzerinde makine için hızlandırılmış hesaplama ve çıkarım sağlar TensorFlow gibi öğrenme çerçeveleri Lite - Google'ın mobil cihazlar için platformlar arası makine öğrenimi kitaplığıdır. Caffe2 ve diğerleri. TensorFlow Lite'ı ziyaret edin açık kaynak depo. TensorFlow Lite, aşağıdaki gibi modelleri çalıştırmak için Neural Networks API ile birlikte çalışır: MobileNets, Başlangıç v3 ve Akıllı Yanıt özelliğini mobil cihazınızda verimli bir şekilde kullanın.

Otomatik doldurma çerçevesi güncellemeleri

Android 8.1 (API düzeyi 27), Otomatik Doldurma'da çeşitli iyileştirmeler sunar Uygulamalarınıza dahil edebileceğiniz çerçeve.

BaseAdapter sınıfı artık setAutofillOptions() özelliğini içeriyor bu yöntem, değerlerin dize gösterimini adaptörü kullanabilirsiniz. Bu, dönen işareti için yararlıdır bağdaştırıcılarında değerleri dinamik olarak oluşturan kontroller içerir. Örneğin, bir dize sağlamak için setAutofillOptions() yöntemini kullanabilirsiniz kullanıcıların bir seçimin parçası olarak seçebilecekleri yıl listesinin Kredi kartı son kullanma tarihi. Otomatik doldurma hizmetleri dize gösterimini kullanabilir görünümleri uygun şekilde doldurmak için.

Ayrıca, AutofillManager sınıf, notifyViewVisibilityChanged(View, int, boolean) yöntemini içerir çerçeveyi, bir reklamın görünürlüğündeki değişiklikler hakkında sanal yapıda görüntüleyebilir. Aynı zamanda süreç boyunca sanal yapılardır. Ancak sanal olmayan yapılarda genellikle çerçeveyi açıkça bildirmelidir çünkü yöntem, View. sınıfını kullanır.

Android 8.1, Otomatik Doldurma Hizmetleri'ne kaydetme kullanıcı arayüzünü özelleştirme olanağı da sunar CustomDescription and Validator için destek ekleyerek SaveInfo içinde.

Özel açıklamalar, otomatik doldurma hizmetinin nelerin kaydedilme; Örneğin, ekranda bir kredi kartı varsa kredi kartı bankasının logosu (kredi kartının son dört hanesi) ve son kullanma numarası. Daha fazla bilgi için CustomDescription inceleyin. sınıfını kullanır.

Validator. Nesneler, Doğrulayıcı ayarı etkinleştirildiğinde otomatik doldurma kaydetme kullanıcı arayüzünün görüntülenmesini önlemek için memnun olmadığını düşünelim. Daha fazla bilgi edinmek için bkz. Doğrulama Aracı sınıfı ve alt sınıfları olan LuhnChecksumValidator ve RegexValidator

Bildirimler

Android 8.1, bildirimlerde yapılan aşağıdaki değişiklikleri içerir:

  • Uygulamalar artık saniyede yalnızca bir kez bildirim uyarısı sesi çıkarabilir. Bunu aşan uyarı sesleri ve ücret sıraya alınmaz. Bu değişiklik, bildirimin diğer yönlerini etkilemez. davranış ve bildirim mesajları beklendiği gibi yayınlanmaya devam eder.
  • NotificationListenerService ve ConditionProviderService, düşük RAM'de desteklenmez Şu durumlarda true döndüren Android destekli cihazlar: ActivityManager.isLowRamDevice() çağrıldı.

EditText güncellemesi

EditText.getText() yöntemi, API düzeyi 27'den itibaren Editable döndürür; daha önce CharSequence döndürdü. Bu değişiklik geriye dönük uyumluluğa sahiptir, çünkü Editable CharSequence.

Editable arayüzü, işlevi görür. Örneğin, Editable adlı kullanıcı da Spannable arayüzünü uygularsa işaretlemeyi EditText örneğinin içindeki içerik.

Programatik Güvenli Tarama işlemleri

Güvenli Tarama API'sinin WebView uygulanması, WebView örneği gezinmeye çalıştığında bunu algıla Google'ın bilinen tehdit olarak sınıflandırdığı bir URL'ye yönlendirme. Varsayılan olarak WebView, kullanıcıları bilinen tehdit konusunda uyaran bir geçiş reklamı gösteriyor. Bu ekran kullanıcılara URL'yi yine de yükleme veya önceki bir bu güvenli bir sayfadır.

Android 8.1'de, programlı bir şekilde yapılandırma ve Uygulama bilinen bir tehdide yanıt verdiğinde:

  • Uygulamanızın, Güvenli Arama'ya yönelik bilinen tehditleri raporlayıp raporlamayacağını kontrol edebilirsiniz Göz atma.
  • Uygulamanızın aşağıdakiler gibi belirli bir işlemi otomatik olarak gerçekleştirmesini sağlayabilirsiniz: güvenli bir şekilde tarama yapar. Güvenli Tarama'nın bilinen bir tehdit olarak sınıflandırılır.

Not: Bilinen tehditlere karşı optimum koruma için bekleyin. önce Güvenli Tarama'yı başlatana kadar WebView nesnesinin loadUrl() yöntemi.

Aşağıdaki kod snippet'leri, uygulamanızın Bir sorunla karşılaştıktan sonra her zaman güvenli bir yere gitmek için WebView bilinen tehdit:

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();
    }
}

Video küçük resmi ayıklayıcı

MediaMetadataRetriever sınıfında getScaledFrameAtTime() adlı yeni bir yöntem vardır ve belirli bir zaman konumunun yakınlarındaki bir kare ve aynı yöne sahip bir bit eşlem döndürür oran, kaynak çerçeve olarak gösterilir ancak verilen genişlik ve yükseklik. Bu, videodan küçük resim oluşturmak için yararlıdır.

Bellek israfına neden olabilecek getFrameAtTime() yerine bu yöntemi kullanmanızı öneririz çünkü kaynak videoyla aynı çözünürlükte bir bit eşlem döndürür. Örneğin, Örneğin, 4K'lık bir videonun karesi, 16 MB'lık bir bit eşlemdir. Bu boyut, videonun olduğundan çok daha büyüktür. küçük resim gerekir.

Paylaşılan bellek API'si

Android 8.1 (API düzeyi 27), SharedMemory API'ye gidin. Bu sınıf, anonim bilgiler oluşturmanıza, eşlemenize ve yönetmenize olanak tanır. SharedMemory kullanır. Bellek korumasını siz ayarlarsınız - SharedMemory bir nesne olarak görür ve SharedMemory nesne ayrıştırılabilir durumdaysa, AIDL aracılığıyla başka bir işleme kolayca aktarabilirsiniz.

SharedMemory API, NDK'da ASharedMemory tesis yapıldı. ASharedMemory erişim izni verir daha sonra okuma ve yazma için eşlenebilen bir dosya tanımlayıcısına yönlendirir. Harika bir bir şekilde paylaşmanın bir yoludur. veya tek bir uygulama içindeki birden fazla işlem arasında veri analizi yapmanıza olanak tanır.

WallpaperColors API'si

Android 8.1 (API seviyesi 27), animasyonlu duvar kağıdınızın renk sağlamasına olanak tanır. tüm bilgileri sistem arayüzüne gönderebilirsiniz. Bunu bir WallpaperColors oluşturarak yapabilirsiniz. veya manuel olarak seçilen üç rengi kullanarak bir nesneden en iyi şekilde yararlanabilirsiniz. Bu renk bilgilerini de alabilirsiniz.

WallpaperColors oluşturmak için aşağıdakilerden birini yapın:

  • WallpaperColors oluşturmak için üç renk kullanarak WallpaperColors öğesinin bir örneğini oluşturun sınıfa eklemeniz gerekir. Birincil renk null olmamalıdır.
  • WallpaperColors oluşturmak için nesnesini son haline getirmek için, fromBitmap() çağrısı yöntemini kullanabilirsiniz.
  • WallpaperColors oluşturmak için çekilebilir nesneden bir nesne için fromDrawable() işlevini çağırın yöntemini kullanabilirsiniz.

Birincil, ikincil veya üçüncül renk ayrıntılarını aşağıdaki yöntemleri çağırın:

  • getPrimaryColor(). duvar kağıdının görsel olarak en iyi temsil eden rengini döndürür.
  • getSecondaryColor(). duvar kağıdının en belirgin ikinci rengini döndürür.
  • getTertiaryColor(). yöntemi, duvar kağıdının üçüncü en belirgin rengini döndürür.

Animasyonlu duvar kağıdınızda önemli renk değişiklikleri varsa sistemi bildirmek için notifyColorsChanged() cihazını ara yöntemidir. Bu yöntem bir onComputeColors() yaşam döngüsü tetikler yeni bir WallpaperColors sağlama fırsatınızın olduğu etkinlik nesnesini tanımlayın.

Renk değişiklikleri için işleyici eklemek isterseniz addOnColorsChangedListener() yöntemini çağırabilirsiniz. Şunları yapabilirsiniz: getWallpaperColors() yöntemini de çağırın kullanarak duvar kağıdının birincil renklerini alabilirsiniz.

Parmak izi güncellemeleri

FingerprintManager sınıfı şu hata kodlarına sahip:

  • FINGERPRINT_ERROR_LOCKOUT_PERMANENT - Kullanıcı denedi kullanıcıların cihazlarının kilidini açmak için çok fazla sayıda işlem yapması gerekir.
  • FINGERPRINT_ERROR_VENDOR – Satıcıya özel parmak izi okuyucu hatası oluştu.

Kriptografi güncellemeleri

Android 8.1'de kriptografide bazı değişiklikler yapılmıştır:

  • Conscrypt'te yeni algoritmalar uygulandı. Conscrypt bu uygulama, mevcut Bouncy Castle'dan daha fazla tercih edilir. hakkında bilgi edindiniz. Yeni algoritmalar şunları içerir:
    • 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) hayır GCM'yi kullanan algoritmalarda daha uzun süre çalışır. Bunun yerine getParameterSpec(GCMParameterSpec.class)
  • TLS ile ilişkili birçok dahili Conscrypt sınıfı yeniden düzenlendi. Başlangıç geliştiriciler bazen bunlara yansıtıcı bir şekilde erişiyor; desteklenmiş olsa da bazı ayrıntılar değişmiştir. Örneğin, prizler önceden OpenSSLSocketImpl türündeydi, ancak şimdi ConscryptFileDescriptorSocket veya Her ikisi de uzatılan ConscryptEngineSocket OpenSSLSocketImpl
  • Atış için SSLSession yöntem kullanıldı Boş bir referans iletildiğinde IllegalArgumentException, artık NullPointerException at.
  • KeyFactory RSA'sında artık anahtar oluşturulmasına izin verilmiyor daha büyük bayt dizileri bulunur. Çağrılar: generatePrivate() ve Veri sağlayan generatePublic() KeySpec burada anahtar yapısının arabelleğin tamamı InvalidKeySpecException ile sonuçlanır.
  • Bir soket okuması, soketin kapatılmasıyla kesintiye uğradığında Conscrypt kullanılan okunan değerden -1 değerini döndürür. Okunanlar şimdi SocketException
  • Kök CA sertifikaları değiştirildi ve genellikle ve eski sertifikaların kök sertifikalarının da kaldırılması WoSign ve StartCom. Bu kararla ilgili daha fazla bilgi edinmek için Güvenlik Blog yayını, Son WoSign ve StartCom Sertifikalarına olan güvenin kaldırılması.