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
veConditionProviderService
, düşük RAM'de desteklenmez Şu durumlardatrue
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:
<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(); } }
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 kullanarakWallpaperColors
öğ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çinfromDrawable()
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 yerinegetParameterSpec(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 şimdiConscryptFileDescriptorSocket
veya Her ikisi de uzatılanConscryptEngineSocket
OpenSSLSocketImpl
- Atış için
SSLSession
yöntem kullanıldı Boş bir referans iletildiğindeIllegalArgumentException
, artıkNullPointerException
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ğlayangeneratePublic()
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ı.