Android 8.1 (API düzeyi 27), kullanıcılar ve geliştiriciler için çeşitli yeni özellikler ve işlevler sunar. Bu belgede, geliştiriciler için yenilikler vurgulanmaktadır.
Android Oreo (Go sürümü)
Android Go, dünya genelinde internete bağlanan milyarlarca kullanıcı için Android deneyimini optimize etmeye yönelik bir girişimimizdir. Android 8.1'den itibaren Android'i giriş seviyesi cihazlar için mükemmel bir platform haline getiriyoruz. Android Oreo (Go sürümü) yapılandırmasındaki özellikler şunlardır:
- Bellek optimizasyonları Uygulamaların 1 GB veya daha az RAM'e sahip cihazlarda verimli bir şekilde çalışabilmesi için platform genelinde bellek kullanımı iyileştirildi.
- Esnek hedefleme seçenekleri. Uygulamalarınızın dağıtımını Google Play üzerinden normal veya düşük RAM'li cihazları hedefleyecek şekilde ayarlamanıza olanak tanıyan yeni donanım özelliği sabitleri.
- Google Play. Tüm uygulamalar Android Oreo (Go sürümü) çalıştıran cihazlarda kullanılabilecek olsa da Google Play, geliştiriciler tarafından özellikle optimize edilmiş uygulamalara görünürlük kazandırarak milyarlarca kullanıcıya harika bir deneyim sunmak için milyarlarca kullanıcı için geliştirme yönergelerini kullanır.
Milyarlar için geliştirme kurallarını, Android Oreo (Go sürümü) çalıştıran cihazlar için uygulamanızı nasıl optimize edeceğinize dair ek bilgilerle güncelledik. Çoğu geliştirici için mevcut APK'nızı optimize etmek veya APK'nızın bir sürümünü düşük RAM'li cihazları hedefleyecek şekilde ayarlamak üzere Google Play'in çoklu APK özelliğini kullanmak, Android Oreo (Go sürümü) çalıştıran cihazlara hazırlanmanın en iyi yoludur. Uygulamanızı daha hafif ve verimli hale getirmenin, cihazdan bağımsız olarak tüm kitlenize fayda sağlayacağını unutmayın.
Neural Networks API
Neural Networks API, TensorFlow Lite (Google'ın mobil cihazlar için platformlar arası ML kitaplığı) gibi cihaz üzerinde makine öğrenimi çerçevelerinin yanı sıra Caffe2 ve diğerleri için hızlandırılmış hesaplama ve çıkarım sağlar. İndirmeler ve belgeler için TensorFlow Lite açık kaynaklı depoyu ziyaret edin. TensorFlow Lite, MobileNets, Inception v3 ve Akıllı Yanıt gibi modelleri mobil cihazınızda verimli bir şekilde çalıştırmak için Neural Networks API ile birlikte çalışır.
Otomatik doldurma çerçevesi güncellemeleri
Android 8.1 (API düzeyi 27), uygulamalarınıza dahil edebileceğiniz Otomatik Doldurma Çerçevesi'nde çeşitli iyileştirmeler sunar.
BaseAdapter
sınıfı artık setAutofillOptions()
yöntemini içeriyor. Bu yöntem, bir bağlayıcıdaki değerlerin dize gösterimlerini sağlamanıza olanak tanır. Bu, adaptörlerindeki değerleri dinamik olarak oluşturan döndürme kontrolleri için kullanışlıdır. Örneğin, kullanıcıların kredi kartı son kullanma tarihi olarak seçebileceği yıl listesinin dize gösterimini sağlamak için setAutofillOptions() yöntemini kullanabilirsiniz. Otomatik doldurma hizmetleri, verileri gerektiren görünümleri uygun şekilde doldurmak için dize gösterimini kullanabilir.
Ayrıca AutofillManager
sınıfı, sanal yapıdaki bir görünümün görünürlüğündeki değişiklikler hakkında çerçeveyi bilgilendirmek için çağırabileceğiniz notifyViewVisibilityChanged(View, int, boolean) yöntemini
içerir. Ayrıca, sanal olmayan yapılar için yöntemin aşırı yüklenmesi de söz konusudur. Ancak, sanal olmayan yapılar genellikle çerçeveye açıkça bildirmenizi gerektirmez. Bunun nedeni, yöntemin zaten View sınıfı tarafından çağrılmasıdır.
Android 8.1, CustomDescription
and Validator için destek ekleyerek otomatik doldurma hizmetlerine kaydetme kullanıcı arayüzü uygunluğunu SaveInfo içinde daha fazla özelleştirme olanağı da sunar.
Özel açıklamalar, otomatik doldurma hizmetinin kaydedilen bilgileri netleştirmesine yardımcı olur. Örneğin, ekranda kredi kartı varsa kredi kartını veren bankanın logosu, kredi kartı numarasının son dört hanesi ve son kullanma tarihi gösterilebilir. Daha fazla bilgi için
CustomDescription sınıfına bakın.
Validator
nesneleri, doğrulayıcı koşulu karşılanmadığında otomatik doldurma kaydetme kullanıcı arayüzünün gösterilmesini önlemek için kullanılır. Daha fazla bilgi edinmek için alt sınıfları
LuhnChecksumValidator ve
RegexValidator ile birlikte Validator sınıfına bakın.
Bildirimler
Android 8.1'de bildirimlerle ilgili aşağıdaki değişiklikler yapıldı:
- Uygulamalar artık saniyede yalnızca bir kez bildirim uyarısı sesi çıkarabilir. Bu oranı aşan uyarı sesleri sıraya alınmaz ve kaybolur. Bu değişiklik, bildirim davranışının diğer yönlerini etkilemez ve bildirim iletileri beklendiği gibi yayınlanmaya devam eder.
-
NotificationListenerServiceveConditionProviderService,ActivityManager.isLowRamDevice()çağrıldığındatruedöndüren düşük RAM'li Android destekli cihazlarda desteklenmez.
EditText güncellemesi
API düzeyi 27'den itibaren EditText.getText() yöntemi Editable döndürür. Daha önce CharSequence döndürüyordu. Bu değişiklik, Editable CharSequence'yi uyguladığından geriye dönük uyumludur.
Editable arayüzü, değerli ek işlevler sunar. Örneğin, Editable aynı zamanda Spannable arayüzünü de uyguladığından EditText örneğindeki içeriklere işaretleme uygulayabilirsiniz.
Programatik Güvenli Tarama işlemleri
Güvenli Tarama API'sinin
WebView uygulamasını kullanarak uygulamanız, WebView örneği Google'ın bilinen tehdit olarak sınıflandırdığı bir URL'ye gitmeye çalıştığında bunu algılayabilir. Varsayılan olarak, WebView bilinen tehdit konusunda kullanıcıları uyaran bir geçiş reklamı gösterir.
Bu ekranda kullanıcılara URL'yi yine de yükleme veya güvenli olan önceki bir sayfaya dönme seçeneği sunulur.
Android 8.1'de, uygulamanızın bilinen bir tehdide nasıl yanıt vereceğini programatik olarak tanımlayabilirsiniz:
- Uygulamanızın bilinen tehditleri Güvenli Tarama'ya bildirip bildirmeyeceğini kontrol edebilirsiniz.
- Uygulamanız, Güvenli Tarama'nın bilinen tehdit olarak sınıflandırdığı bir URL ile her karşılaştığında otomatik olarak belirli bir işlemi (ör. güvenliğe geri dönme) gerçekleştirebilir.
Not: Bilinen tehditlere karşı optimum koruma için WebView nesnesinin loadUrl() yöntemini çağırmadan önce Güvenli Tarama'yı başlatana kadar bekleyin.
Aşağıdaki kod snippet'lerinde, uygulamanızın WebView örneklerine bilinen bir tehditle karşılaştıktan sonra her zaman güvenliğe geri dönme talimatını nasıl verebileceğiniz gösterilmektedir:
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, belirli bir zaman konumunun yakınındaki bir kareyi bulan ve kaynak kareyle aynı en-boy oranına sahip ancak belirli bir genişlik ve yüksekliğe sahip bir dikdörtgene sığacak şekilde ölçeklendirilmiş bir bit eşlem döndüren yeni bir yöntem (getScaledFrameAtTime()) bulunur. Bu özellik, videolardan küçük resimler oluşturmak için kullanışlıdır.
Kaynak videoyla aynı çözünürlükte bir bit eşlem döndürdüğü için belleği boşa harcayabilen getFrameAtTime() yerine bu yöntemi kullanmanızı öneririz. Örneğin, 4K videodan alınan bir kare, 16 MB'lık bir bit eşlem olur. Bu boyut, küçük resim için gerekenden çok daha büyüktür.
Shared memory API
Android 8.1 (API düzeyi 27), yeni bir SharedMemory API'si sunar. Bu sınıf, anonim bir SharedMemory örneği oluşturmanıza, eşlemenize ve yönetmenize olanak tanır. Okuma ve/veya yazma için SharedMemory nesnesinde bellek koruması ayarlarsınız ve SharedMemory nesnesi Parcelable olduğundan AIDL aracılığıyla başka bir işleme kolayca iletebilirsiniz.
SharedMemory API, NDK'daki ASharedMemory tesisiyle birlikte çalışır.
ASharedMemory, daha sonra okuma ve yazma için eşlenebilen bir dosya tanımlayıcısına erişim sağlar. Uygulamalar arasında veya tek bir uygulamadaki birden fazla işlem arasında büyük miktarda veri paylaşmak için harika bir yöntemdir.
WallpaperColors API
Android 8.1 (API düzeyi 27), animasyonlu duvar kağıdınızın Sistem Arayüzüne renk bilgisi sağlamasına olanak tanır. Bunu, bir bit eşlemden veya çizilebilir öğeden WallpaperColors
nesne oluşturarak ya da manuel olarak seçilen üç rengi kullanarak yapabilirsiniz.
Bu renk bilgilerini de alabilirsiniz.
WallpaperColors
nesnesi oluşturmak için aşağıdakilerden birini yapın:
- Üç renk kullanarak
WallpaperColorsnesnesi oluşturmak için birincil, ikincil ve üçüncül rengi ileterekWallpaperColorssınıfının bir örneğini oluşturun. Birincil renk boş olmamalıdır. - Bit eşlemden
WallpaperColorsnesnesi oluşturmak için bit eşlem kaynağını parametre olarak ileterekfromBitmap()yöntemini çağırın. - Çizilebilir öğeden
WallpaperColorsnesnesi oluşturmak için çizilebilir kaynağı parametre olarak ileterekfromDrawable()yöntemini çağırın.
Duvar kağıdından birincil, ikincil veya üçüncül renk ayrıntılarını almak için 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 en belirgin üçüncü rengini döndürür.
Sistemi animasyonlu duvar kağıdınızdaki önemli renk değişiklikleri hakkında bilgilendirmek için notifyColorsChanged() yöntemini çağırın. Bu yöntem, yeni bir WallpaperColors nesnesi sağlama fırsatı bulduğunuz bir onComputeColors() yaşam döngüsü etkinliğini tetikler.
Renk değişiklikleri için bir işleyici eklemek üzere addOnColorsChangedListener() yöntemini çağırabilirsiniz. Duvar kağıdının birincil renklerini almak için getWallpaperColors() yöntemini de çağırabilirsiniz.
Parmak izi güncellemeleri
FingerprintManager sınıfında aşağıdaki hata kodları kullanıma sunuldu:
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT: Kullanıcı, parmak izi okuyucuyu kullanarak cihazının kilidini açmayı çok fazla kez denedi. -
FINGERPRINT_ERROR_VENDOR: Satıcıya özgü bir parmak izi okuyucu hatası oluştu.
Kriptografi güncellemeleri
Android 8.1'de kriptografiyle ilgili çeşitli değişiklikler yapıldı:
- Conscrypt'te yeni algoritmalar uygulanmıştır. Conscrypt uygulaması, mevcut Bouncy Castle uygulamasına göre öncelikli olarak kullanılır. Yeni algoritmalar şunlardır:
AlgorithmParameters:GCMKeyGenerator:AESKeyGenerator:DESEDEKeyGenerator:HMACMD5KeyGenerator:HMACSHA1KeyGenerator:HMACSHA224KeyGenerator:HMACSHA256KeyGenerator:HMACSHA384KeyGenerator:HMACSHA512SecretKeyFactory:DESEDESignature:NONEWITHECDSA
Cipher.getParameters().getParameterSpec(IvParameterSpec.class), GCM kullanan algoritmalar için artık çalışmıyor. Bunun yerinegetParameterSpec(GCMParameterSpec.class)kullanın.- TLS ile ilişkili birçok dahili Conscrypt sınıfı yeniden düzenlendi. Geliştiriciler bazen bu yansıtıcı erişimi kullandığından, önceki kullanımı desteklemek için dolgular yerinde bırakıldı ancak bazı ayrıntılar değiştirildi. Örneğin, prizler daha önce
OpenSSLSocketImpltüründeydi ancak artıkConscryptFileDescriptorSocketveyaConscryptEngineSockettüründe. Bu türlerin her ikisi deOpenSSLSocketImpl'yı genişletiyor. SSLSessionyöntemleri, boş referans iletildiğindeIllegalArgumentExceptionoluşturmak için kullanılıyordu. Bu yöntemler artıkNullPointerExceptionoluşturuyor.- RSA
KeyFactoryartık kodlanmış anahtardan daha büyük olan bayt dizilerinden anahtar oluşturulmasına izin vermiyor. Anahtar yapısının arabelleğin tamamını doldurmadığıKeySpecgeneratePrivate()vegeneratePublic()öğelerine yapılan aramalarInvalidKeySpecExceptionile sonuçlanır. - Bir soket okuma işlemi, soketin kapatılmasıyla kesintiye uğradığında Conscrypt, okuma işleminden -1 döndürürdü. Okuma işlemi artık
SocketExceptionhatası veriyor. - Kök CA sertifikaları kümesi değiştirildi. Bu değişiklik kapsamında, büyük bir sayıda eski sertifika kaldırıldı ve WoSign ile StartCom'un kök sertifikaları da kaldırıldı. Bu kararla ilgili daha fazla bilgi için Google Güvenlik Blogu'ndaki WoSign ve StartCom sertifikalarına güvenin tamamen kaldırılması başlıklı yayını inceleyin.