Android 9 (API düzeyi 28), kullanıcılar ve geliştiriciler için yeni, harika özellikler sunar. Bu dokümanda, geliştiriciler için sunulan yenilikler vurgulanmaktadır.
Yeni API'ler hakkında bilgi edinmek için API fark raporunu okuyun veya Android API referansını ziyaret edin. Ayrıca, platform değişikliklerinin uygulamalarınızı etkileyebileceği alanlar hakkında bilgi edinmek için Android 9 Davranış Değişiklikleri'ne de göz atmayı unutmayın.
Kablosuz RTT ile iç mekan konumlandırma

Android 9, uygulamalarınızda iç mekan konumlandırmasından yararlanabilmeniz için IEEE 802.11-2016 kablosuz protokolü (Kablosuz Gidiş Dönüş Süresi (RTT) olarak da bilinir) için platform desteği ekler.
Donanım destekli Android 9 çalıştıran cihazlarda uygulamalarınız, yakındaki RTT özellikli Kablosuz erişim noktalarına (AP'ler) olan mesafeyi ölçmek için RTT API'lerini kullanabilir. Cihazda konum hizmetleri etkinleştirilmiş ve kablosuz ağ taraması açık olmalıdır (Ayarlar > Konum altında), ayrıca uygulamanız da ACCESS_FINE_LOCATION
iznine sahip olmalıdır. RTT'yi kullanmak için cihazın erişim noktalarına bağlanması gerekmez.
Gizliliği korumak için erişim noktasına olan mesafeyi yalnızca telefon
belirleyebilir. Erişim noktalarında bu bilgiler bulunmaz.
Cihazınız 3 veya daha fazla erişim noktasına olan mesafeyi ölçüyorsa bu ölçümlere en uygun cihaz konumunu tahmin etmek için çok katmanlı bir algoritma kullanabilirsiniz. Sonuç genellikle 1-2 metre arasında doğru sonuç verir.
Bu doğruluk sayesinde, bina içi navigasyon ve netleştirilmiş sesli kontrol (örneğin, "Bu ışığı aç") ve konuma dayalı bilgiler ("Bu ürün için özel teklifler var mı?" gibi) gibi ayrıntılı konuma dayalı hizmetler gibi yeni deneyimler oluşturabilirsiniz.
Android WifiRttScan demo uygulamasında WiFi RTT API'nin kullanım şeklini görün.
Daha fazla bilgi için Kablosuz konumu: RTT ile aralık bölümüne bakın.
Ekran kesimi desteği

Emülatör kullanarak ekran kesimini test etme
Android 9, kameralar ve hoparlörler için ekran kesimleri içeren en yeni uçtan uca ekranları destekler. DisplayCutout
sınıfı, içeriğin gösterilmemesi gereken işlevsel olmayan alanların konumunu ve şeklini öğrenmenizi sağlar. Bu kesim alanlarının varlığını ve yerleşimini belirlemek için getDisplayCutout()
yöntemini kullanın.
Yeni bir pencere düzeni özelliği olan layoutInDisplayCutoutMode
, uygulamanızın içeriğini cihaz kesimlerinin etrafına yerleştirmesine olanak tanıyor. Bu özelliği aşağıdaki değerlerden birine ayarlayabilirsiniz:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Android 9 çalıştıran herhangi bir cihazda veya emülatörde ekran kesimi simülasyonunu aşağıdaki gibi yapabilirsiniz:
- Geliştirici seçeneklerini etkinleştirin.
- Geliştirici seçenekleri ekranında Çizim bölümüne gidin ve Ekran görüntüsünü kesimle simüle et'i seçin.
- Kesmenin boyutunu seçin.
Bildirimler
Android 9'da bildirimlerde çeşitli iyileştirmeler yapıldı. Bunların hepsi, API düzeyi 28 ve sonraki sürümleri hedefleyen geliştiriciler tarafından kullanılabilir.

Fotoğraf eklenmiş MessagingStyle.

Yanıtlar ve ileti dizisiyle MessagingStyle.
Android 9 özellikleri de dahil olmak üzere bildirimleri kullanan örnek kod için Kişi Örneği bölümüne bakın.
Gelişmiş mesajlaşma deneyimi
Android 7.0 (API düzeyi 24) sürümünden başlayarak, mesajları yanıtlamak veya doğrudan bildirimden başka metin girmek için bir işlem ekleyebilirsiniz. Android 9, bu özelliği aşağıdaki geliştirmelerle geliştiriyor:
Sohbet katılımcıları için basitleştirilmiş destek:
Person
sınıfı, avatarları ve URI'leri dahil olmak üzere bir görüşmeye dahil olan kişileri tanımlamak için kullanılır.addMessage()
gibi diğer birçok API artıkCharSequence
yerinePerson
sınıfından yararlanıyor.Person
sınıfı, Oluşturucu tasarım kalıbını da destekler.Resim desteği: Android 9 artık telefonlardaki Mesajlaşma Bildirimleri uygulamasında resimler gösteriyor. Bir resim görüntülemek için mesajda
setData()
kullanılabilir. Aşağıdaki kod snippet'inde, birPerson
öğesinin ve resim içeren bir mesajın nasıl oluşturulacağı gösterilmektedir.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
Yanıtları taslak olarak kaydet: Uygulamanız, bir kullanıcı mesajlaşma bildirimini yanlışlıkla kapattığında sistem tarafından gönderilen
EXTRA_REMOTE_INPUT_DRAFT
bilgisini alabilir. Bu ekstra değeri kullanarak uygulamadaki metin alanlarını önceden doldurabilirsiniz. Böylece kullanıcılar, yanıtlarını tamamlayabilir.Bir görüşmenin grup görüşmesi olup olmadığını belirleme: Bir ileti dizisini grup görüşmesi mi yoksa grup dışı görüşme mi olarak tanımlamak için
setGroupConversation()
kullanabilirsiniz.Bir amaç için anlamsal işlemi ayarlayın:
setSemanticAction()
yöntemi, bir işleme "okundu olarak işaretle", "sil", "yanıtla" gibi anlamsal anlamlar vermenize olanak tanır.SmartReply: Android 9, mesajlaşma uygulamanızdaki önerilen yanıtların aynısını destekler.
RemoteInput.setChoices()
aracını kullanarak kullanıcıya bir dizi standart yanıt sağlayın.
Kanal ayarları, yayınlar ve Rahatsız Etmeyin
Android 8.0, görüntülemek istediğiniz her bildirim türü için kullanıcı tarafından özelleştirilebilir bir kanal oluşturmanıza olanak tanıyan Bildirim Kanalları'nı kullanıma sunmuştur. Android 9, bildirim kanalı ayarlarını aşağıdaki değişikliklerle basitleştirmiştir:
Kanal gruplarını engelleme: Kullanıcılar artık bir uygulamanın bildirim ayarları üzerinden kanal gruplarının tamamını engelleyebilir. Bir grubun ne zaman engellendiğini belirlemek için
isBlocked()
yöntemini kullanabilir ve sonuç olarak bu gruptaki kanallara bildirim gönderemezsiniz.Ayrıca uygulamanız yeni
getNotificationChannelGroup()
yöntemini kullanarak mevcut kanal grubu ayarlarını sorgulayabilir.Yeni yayın amacı türleri: Android sistemi artık bildirim kanallarının ve kanal gruplarının engelleme durumu değiştiğinde yayın amaçları gönderiyor. Engellenen kanalın veya grubun sahibi olan uygulama, bu amaçları dinleyip uygun şekilde tepki verebilir. Bu intent işlemleri ve ekstralarla ilgili daha fazla bilgi için
NotificationManager
referansındaki güncellenen sabitler listesine bakın. Yayın amaçlarına tepki verme hakkında bilgi edinmek için Yayınlar bölümüne bakın.NotificationManager.Policy
için üç yeni Rahatsız Etmeyin öncelik kategorisi bulunuyor:PRIORITY_CATEGORY_ALARMS
alarmlara öncelik verir.PRIORITY_CATEGORY_MEDIA
medya ve sesli navigasyon gibi medya kaynaklarından gelen seslere öncelik verir.PRIORITY_CATEGORY_SYSTEM
sistem seslerine öncelik verir.
NotificationManager.Policy
, görsel kesintiyi azaltmak için kullanabileceğiniz yedi yeni Do-Not-Rahatsız Etmeyin sabitine de sahiptir:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
, bildirimin tam ekran etkinliği başlatmasını engeller.SUPPRESSED_EFFECT_LIGHTS
bildirim ışıklarını engeller.SUPPRESSED_EFFECT_PEEK
, bildirimlerin kısa süreliğine görünüme kaymasını ("kısa bir süre görünme") engeller.SUPPRESSED_EFFECT_STATUS_BAR
, durum çubuklarını destekleyen cihazlarda bildirimlerin durum çubuğunda gösterilmesini engeller.SUPPRESSED_EFFECT_BADGE
, rozetleri destekleyen cihazlarda rozetleri engeller. Daha fazla bilgi için Bildirim rozetini değiştirme konusuna bakın.SUPPRESSED_EFFECT_AMBIENT
, ekran ambiyansı özelliğini destekleyen cihazlarda bildirimleri engeller.SUPPRESSED_EFFECT_NOTIFICATION_LIST
, bildirim gölgesi veya kilit ekranı gibi liste görünümünü destekleyen cihazlarda bildirimlerin liste görünümünde gösterilmesini engeller.
Çoklu kamera desteği ve kamera güncellemeleri
Android 9 çalıştıran cihazlarda, yayınlara iki veya daha fazla fiziksel kameradan aynı anda erişebilirsiniz. Çift ön veya çift arka kameraya sahip cihazlarda, tek bir kamerayla mümkün olmayacak, kesintisiz yakınlaştırma, bokeh ve stereo görüş gibi yenilikçi özellikler oluşturabilirsiniz. Ayrıca API, iki veya daha fazla kamera arasında otomatik olarak geçiş yapan mantıksal veya çok kaynaklı bir kamera akışı çağırmanıza olanak tanır.
Kamerayla ilgili diğer iyileştirmeler arasında, ilk çekim sırasında gecikmeleri azaltmaya yardımcı olan ek Oturum parametreleri ve kamera müşterilerinin, kamera yayınını durdurmaya ve başlatmaya gerek kalmadan çeşitli kullanım durumlarını ele almasına olanak tanıyan yüzey paylaşımı bulunur. Ayrıca, görüntü tabanlı flash desteği için API'ler, uygulama düzeyinde görüntü sabitleme ve özel efektler için OIS zaman damgalarına erişim de ekledik.
Android 9'daki çoklu kamera API'si, FULL
veya LIMITED
özelliğine sahip cihazlar için tek renkli kameraları destekler.
Tek renkli çıkış; gri tonlamalı Y, 128 ve V (Cr) 128 olacak şekilde YUV_420_888
biçimi kullanılarak elde edilir.
Android 9, desteklenen cihazlarda harici USB/UVC kameraları da destekleyebilir.
Çekilebilir öğeler ve bit eşlemler için ImageDecoder
Android 9'da, görüntülerin kodunu çözmek için modernleştirilmiş bir yaklaşım sunan ImageDecoder
sınıfı kullanıma sunuluyor. BitmapFactory
ve BitmapFactory.Options
API'lerinin yerine bu sınıfı kullanın.
ImageDecoder
bir bayt arabelleğinden, dosyadan veya URI'dan bir Drawable
ya da Bitmap
oluşturmanıza olanak tanır. Bir resmin kodunu çözmek için önce kodlanmış resmin kaynağıyla createSource()
çağrısı yapın. Ardından, bir Drawable
veya Bitmap
oluşturmak için ImageDecoder.Source
nesnesini ileterek decodeDrawable()
veya decodeBitmap()
öğesini çağırın. Varsayılan ayarları değiştirmek için OnHeaderDecodedListener
değerini decodeDrawable()
veya decodeBitmap()
adlı kullanıcıya iletin. ImageDecoder
, onHeaderDecoded()
değerini resmin varsayılan genişliği ve yüksekliğiyle (tanındığında) çağırır.
Kodlanmış resim animasyonlu GIF veya WebP ise decodeDrawable()
, AnimatedImageDrawable
sınıfının örneği olan bir Drawable
döndürür.
Resim özelliklerini ayarlamak için kullanabileceğiniz farklı yöntemler vardır:
- Kodu çözülmüş resmi tam boyuta ölçeklendirmek için hedef boyutları
setTargetSize()
hizmetine geçirin. Örnek boyutu kullanarak da resimleri ölçeklendirebilirsiniz. Örnek boyutunu doğrudansetTargetSampleSize()
öğesine iletin. - Bir resmi ölçeklendirilmiş resmin aralığında kırpmak için
setCrop()
çağrısı yapın. - Değişebilir bit eşlem oluşturmak için
true
öğesinisetMutableRequired()
öğesine geçirin.
ImageDecoder
, resimlere yuvarlatılmış köşeler veya daire maskeleri gibi özelleştirilmiş ve karmaşık efektler de eklemenize olanak tanır. İstediğiniz çizim komutlarını yürütmek için PostProcessor
sınıfının bir örneğiyle setPostProcessor()
aracını kullanın.
Animasyonlar
Android 9, GIF ve WebP animasyonlu resimler çizmek ve görüntülemek için AnimatedImageDrawable
sınıfını kullanıma sunuyor.
AnimatedImageDrawable
, oluşturma iş parçacığının AnimatedImageDrawable
animasyonlarını yönlendirmesi açısından AnimatedVectorDrawable
işlevine benzer şekilde çalışır.
Oluşturma iş parçacığı ayrıca kodu çözmek için bir çalışan iş parçacığı kullanır. Böylece kod çözme, oluşturma iş parçacığındaki diğer işlemleri etkilemez. Bu uygulama, güncellemelerini yönetmeden veya uygulamanızın kullanıcı arayüzü iş parçacığındaki diğer etkinliklere müdahale etmeden animasyonlu bir resim göstermesine olanak tanır.
AnimatedImageDrawable
öğesinin kodu, ImageDecoder
örneği kullanılarak çözülebilir. Aşağıdaki kod snippet'i, AnimatedImageDrawable
kodunu çözmek için ImageDecoder
kodunu nasıl kullanacağınızı gösterir:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
, resimde daha fazla değişiklik yapmanıza olanak tanıyan çeşitli yöntemler sunar.
Örneğin, daire maske veya yuvarlatılmış köşeler uygulama gibi işlemler yaparak resmin görünümünü değiştirmek için setPostProcessor()
yöntemini kullanabilirsiniz.
HDR VP9 Video, HEIF resim sıkıştırma ve Medya API'leri
Android 9, Yüksek Dinamik Aralık (HDR) VP9 Profile 2 için yerleşik destek sunar. Böylece kullanıcılarınıza YouTube, Play Filmler ve HDR özellikli cihazlardaki diğer kaynaklardan HDR özellikli filmler sunabilirsiniz.
Android 9'da, sıkıştırmayı iyileştiren, depolama alanı ve ağ verisi kullanımını azaltan Yüksek Verimli Resim Dosyası biçimini (HEIF veya HEIC) kullanarak resim kodlama desteği de sunulur. HEIF sabit resim örnekleri MediaMuxer
ve MediaExtractor
sınıflarında desteklenir. Android 9 cihazlardaki platform desteği sayesinde arka uç sunucunuzdan HEIF resimleri göndermek ve kullanmak kolaydır. Uygulamanızın paylaşım ve görüntüleme için bu veri biçimiyle uyumlu olduğundan emin olduktan sonra, HEIF'yi uygulamanızda resim depolama biçimi olarak deneyin. ImageDecoder
veya BitmapFactory
(bir JPEG dosyasından bit eşlem elde eder) kullanarak jpeg'den heic'e dönüştürme işlemi gerçekleştirebilirsiniz. Ardından, YUV bayt arabelleklerinden veya Surface
ya da Bitmap
örneklerinden HEIF sabit görüntüleri yazmak için HeifWriter
'i kullanabilirsiniz.
Medya metrikleri
AudioTrack
,
AudioRecord
ve MediaDrm
sınıflarından da edinilebilir.
Android 9; metrikleri, HDCP düzeylerini, güvenlik düzeylerini ve oturum sayısını almanın yanı sıra güvenlik düzeyleri ve güvenli duraklar üzerinde daha fazla kontrol olanağı eklemek için MediaDRM
sınıfına çeşitli yöntemler sunar. Ayrıntılar için API Farkı raporunu inceleyin.
Android 9'da AAudio API; kullanım, içerik türü ve giriş hazır ayarı gibi çeşitli ek AAudioStream özellikleri için destek sunar. Bu özellikleri kullanarak VoIP veya video kamera uygulamaları için ayarlanmış akışlar oluşturabilirsiniz. Oturum kimliğini, AAudio akışını efektler içerebilen bir alt mix ile ilişkilendirmek için de ayarlayabilirsiniz. Efektleri kontrol etmek için AudioEffect
API'yi kullanın.
Android 9, dinamik işleme için AudioEffect
API'yi kullanıma sunuyor.
Bu sınıfla, birden fazla aşamada dengeleme, çok bantlı sıkıştırma ve sınırlayıcı gibi kanal tabanlı ses efektleri oluşturabilirsiniz. Bant ve aktif aşama sayısı yapılandırılabilir. Çoğu parametre gerçek zamanlı olarak kontrol edilebilir.
JobScheduler'daki veri maliyeti hassasiyeti
JobScheduler
, Android 9'dan itibaren ağla ilgili işlerin işlenmesini iyileştirmek için operatörler tarafından sağlanan ağ durumu sinyallerini kullanabilir.
İşler tahmini veri boyutlarını beyan edebilir, sinyal önceden getirme işlemini yapabilir ve ayrıntılı ağ gereksinimlerini belirtebilir. Daha sonra JobScheduler
, işleri ağ durumuna göre yönetir. Örneğin, ağ tıkanıklık gösterdiği konusunda sinyal aldığında JobScheduler
büyük ağ isteklerini erteleyebilir. JobScheduler
, sınırsız bir ağda olduğunda kullanıcı deneyimini iyileştirmek için başlıkları önceden getirmek gibi önceden getirme işlerini çalıştırabilir.
İş eklerken, JobScheduler
işin düzgün şekilde işlenmesine yardımcı olmak için uygun durumlarda setEstimatedNetworkBytes()
,
setPrefetch()
ve setRequiredNetwork()
kullandığınızdan emin olun. İşiniz yürütüldüğünde JobParameters.getNetwork()
tarafından döndürülen Network
nesnesini kullandığınızdan emin olun.
Aksi takdirde, dolaylı olarak cihazın varsayılan ağını kullanırsınız. Bu ağ, ihtiyaçlarınızı karşılamayabilir ve istenmeyen veri kullanımına yol açabilir.
Sinir Ağları API'sı 1.1
Neural Networks API, Android'de cihaz üzerinde makine öğrenimini hızlandırmak için Android 8.1'de (API düzeyi 27) kullanıma sunulmuştur. Android 9, dokuz yeni işlem desteği ekleyerek API'yi genişletip iyileştiriyor:
- Öğe bazında matematik işlemleri:
- Dizi işlemleri:
Bilinen sorun: Android 9 ve sonraki sürümlerde kullanılabilen ANEURALNETWORKS_PAD
işlemine ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
tensörleri iletilirken, NNAPI'den alınan çıkış, TensorFlow Lite gibi daha üst düzey makine öğrenimi çerçevelerinin çıktılarıyla eşleşmeyebilir. Bunun yerine, sorun çözülene kadar yalnızca
ANEURALNETWORKS_TENSOR_FLOAT32
değerini iletmelisiniz.
Ayrıca API, ANEURALNETWORKS_TENSOR_FLOAT32
hesabının IEEE 754 16 bit kayan nokta biçiminin aralığı ve hassasiyeti kadar düşük bir hassasiyetle hesaplanıp hesaplanmayacağını belirtmenize olanak tanıyan yeni bir ANeuralNetworksModel_relaxComputationFloat32toFloat16()
işlevini de kullanıma sunar.
Otomatik doldurma çerçevesi
Android 9, form doldururken kullanıcı deneyimini daha da iyileştirmek için otomatik doldurma hizmetlerinin uygulayabileceği birçok iyileştirme sunar. Uygulamanızda otomatik doldurma özelliklerini kullanma hakkında daha fazla bilgi edinmek için Otomatik Doldurma Çerçevesi kılavuzuna bakın.
Güvenlik geliştirmeleri
Android 9'da aşağıdaki bölümlerde özetlenen çeşitli güvenlik özellikleri sunulmaktadır:
Android Korumalı Onayı
Android 9 veya sonraki sürümleri çalıştıran desteklenen cihazlar Android Korumalı Onayı'nı kullanmanıza olanak tanır. Bu iş akışını kullanırken uygulamanız, kullanıcıya kısa bir ifadeyi onaylamasını isteyen bir istem gösterir. Bu ifade, uygulamanın, kullanıcının ödeme yapmak gibi hassas bir işlemi tamamlamak istediğini tekrar doğrulamasına olanak tanır.
Kullanıcı ifadeyi kabul ederse Android Anahtar Deposu, anahtarlı karma mesaj kimlik doğrulama kodu (HMAC) ile korunan bir kriptografik imza alır ve saklar. Android Anahtar Deposu mesajın geçerliliğini onayladıktan sonra, uygulamanız kullanıcının kabul ettiği mesajı imzalamak için güvenilir yürütme ortamında (TEE) trustedConfirmationRequired
öğesinden oluşturulan anahtarı kullanabilir. İmza, kullanıcının ifadeyi gördüğü ve kabul ettiğine büyük bir güven duyuyor.
Dikkat: Android Korumalı Onay, kullanıcı için güvenli bir bilgi kanalı sağlamaz. Uygulamanız, Android platformunun sundukları dışında hiçbir gizlilik garantisini üstlenemez. Özellikle, kullanıcının cihazında normalde göstermeyeceğiniz hassas bilgileri göstermek için bu iş akışını kullanmayın.
Android Korumalı Onay desteği ekleme konusunda yardım için Android Korumalı Onay kılavuzuna bakın.
Birleştirilmiş biyometrik kimlik doğrulama iletişim kutusu
Android 9'da sistem, uygulamanız adına biyometrik kimlik doğrulama diyalogları sağlar. Bu işlev, iletişim kutusu için standartlaştırılmış bir görünüm, tarz ve yerleşim oluşturarak kullanıcılara, kimlik doğrulamasını güvenilir bir biyometrik kimlik bilgisi denetleyiciyle yaptıklarına dair daha fazla güven verir.
Uygulamanız, kullanıcılara parmak iziyle kimlik doğrulama iletişim kutusu göstermek için FingerprintManager
kullanıyorsa bunun yerine BiometricPrompt
kullanımına geçin. BiometricPrompt
, kimlik doğrulama iletişim kutusunu görüntülemek için sistemden yararlanır. Ayrıca davranışını, kullanıcının seçtiği biyometrik kimlik doğrulama türüne uyum sağlayacak şekilde değiştirir.
Donanım güvenlik modülü
Android 9 veya sonraki sürümleri çalıştıran desteklenen cihazlarda, bir donanım güvenlik modülü içinde bulunan Keymaster HAL'nin bir uygulaması olan StrongBox Keymaster bulunabilir. Modül şunları içerir:
- Kendi CPU'su.
- Güvenli depolama.
- Gerçek bir rastgele sayı oluşturma aracı.
- Paketin izinsiz olarak değiştirilmesine ve uygulamaların yetkisiz bir şekilde başka cihazdan yüklenmesine karşı koymak için ek mekanizmalar.
Sistem, StrongBox Keymaster'da depolanan anahtarları kontrol ederken anahtarın bütünlüğünü Güvenilir Yürütme Ortamı (TEE) ile doğrular.
Strongbox Keymaster'ı kullanma hakkında daha fazla bilgi edinmek için Donanım Güvenlik Modülü konusuna bakın.
Anahtar deposuna güvenli anahtar aktarma
Android 9, şifrelenmiş anahtarları ASN.1 kodlu bir anahtar biçimi kullanarak Anahtar Deposu'na güvenli bir şekilde içe aktarma özelliğini ekleyerek anahtar şifre çözme ek güvenliği sağlar. Daha sonra Keymaster, Anahtar Deposu'ndaki anahtarların şifresini çözer. Böylece anahtarların içeriği, cihazın ana makine belleğinde hiçbir zaman düz metin olarak görünmez.
Şifrelenmiş anahtarları daha güvenli şekilde içe aktarma hakkında daha fazla bilgi edinin.
Anahtar rotasyonlu APK imza şeması
Android 9'da APK İmza Şeması v3 desteği eklendi. Bu şema, her imzalama sertifikası için imzalama bloğuna bir rotasyon kanıtı kaydı ekleme seçeneğine sahiptir. Bu özellik, APK dosyasının geçmiş imzalama sertifikalarını artık imzalanan sertifikaya bağlayarak uygulamanızın yeni bir imzalama sertifikasıyla imzalanmasını sağlar.
apksigner
kullanarak anahtarları nasıl döndüreceğiniz hakkında daha fazla bilgi edinin.
Anahtarın şifresinin çözülmesine yalnızca kilidi açılmış cihazlarda izin verme seçeneği
Android 9'da unlockedDeviceRequired
işareti kullanıma sunuldu. Bu seçenek, Anahtar Deposu'nun, geçiş halindeki veya depolanan verilerin belirtilen anahtar kullanılarak şifresinin çözülmesine izin vermeden önce ekranın kilidinin açılmasını gerektirip gerektirmediğini belirler. Bu tür anahtarlar, sağlık verileri veya kurumsal veriler gibi hassas verilerin diskte depolanması amacıyla şifrelenmesi için uygundur. İşaret, kullanıcılara telefonlarının kaybolması veya çalınması halinde cihaz kilitliyken verilerin şifresinin çözülemeyeceğine dair daha yüksek bir güvence sağlar.
Cihaz kilitliyken bir anahtarın şifre çözme işlemini engellemek için true
değerini setUnlockedDeviceRequired()
yöntemine geçirerek işareti etkinleştirin. Bu adım tamamlandıktan sonra, kullanıcının ekranı kilitliyken bu anahtarı kullanarak verilerin şifresini çözme veya imzalama girişimleri başarısız olur. Kilitli bir cihaza erişmek için PIN, şifre, parmak izi veya başka bir güvenilen faktör gerekir.
Eski şifreleme desteği
Keymaster 4 ile birlikte sunulan Android 9 cihazlar, Üçlü Veri Şifreleme Algoritmasını veya Triple DES'yi destekler. Uygulamanız, Triple DES gerektiren eski sistemlerle birlikte çalışıyorsa hassas kimlik bilgilerini şifrelerken bu şifre türünü kullanın.
Uygulamanızı nasıl daha güvenli hale getirebileceğiniz hakkında daha fazla bilgi edinmek için Android Geliştiricileri için Güvenlik başlıklı makaleyi inceleyin.
WPS'nin kullanımdan kaldırılması
Kablosuz Korumalı Kurulum (WPS), güvenlik nedeniyle kullanımdan kaldırıldı.
Android yedeklemeleri
Android 9, yedekleme ve geri yüklemeyle ilgili yeni işlevler ve geliştirici seçenekleri ekliyor. Bu değişikliklerle ilgili ayrıntılar aşağıdaki bölümlerde verilmiştir.
İstemci tarafı şifreleme yedekleri
Android 9, Android yedeklerini istemci tarafı gizli anahtarıyla şifrelemeyi destekler. Bu destek, aşağıdaki koşullar karşılandığında otomatik olarak etkinleştirilir:
- Kullanıcı, Android 9 veya sonraki bir sürümü kullanarak yedeklemeyi etkinleştirmiştir.
- Kullanıcı, cihazında kilidi açmak için PIN, desen veya şifre gerektiren bir ekran kilidi ayarlamıştır.
Bu gizlilik önlemi etkinleştirildiğinde, kullanıcının cihazı tarafından oluşturulan yedeklerden verileri geri yüklemek için cihazın PIN'i, deseni veya şifresi gerekir. Bu özelliğin arkasındaki teknoloji hakkında daha fazla bilgi edinmek için Google Cloud Key Vault Hizmeti teknik belgesine bakın.
Yedekleme için gereken cihaz koşullarını tanımlayın
Uygulama verileriniz hassas bilgiler veya tercihler içeriyorsa Android 9 size, istemci tarafı şifrelemenin etkinleştirilmesi veya yerel bir cihazdan cihaza aktarım gerçekleşmesi gibi uygulama verilerinin kullanıcının yedeğine dahil edileceği cihaz koşullarını tanımlama olanağı sunar.
Android cihazlarda veri yedekleme hakkında daha fazla bilgi edinmek için Veri Yedekleme'ye Genel Bakış başlıklı makaleyi inceleyin.
Erişilebilirlik
Android 9, uygulamanızın kullanıcılarına daha da iyi deneyimler sunmanızı kolaylaştıran erişilebilirlik çerçevesinde iyileştirmeler sağlar.
Gezinme semantiği
Android 9'da eklenen özellikler, erişilebilirlik hizmetlerinin (özellikle ekran okuyucuların) ekranın bir bölümünden diğerine nasıl gittiğini tanımlamanızı kolaylaştırır. Bu özellikler, görme engelli kullanıcıların uygulamanızın kullanıcı arayüzündeki metinde hızla ilerlemesine ve seçim yapmalarına yardımcı olabilir.
Örneğin, bir alışveriş uygulamasında ekran okuyucu, ekran okuyucunun diğerine geçmeden önce bir kategorideki tüm öğeleri okumak zorunda kalmadan, doğrudan bir fırsat kategorisinden diğerine gitmesine yardımcı olabilir.
Erişilebilirlik bölmesi başlıkları
Android 8.1 (API düzeyi 27) ve önceki sürümlerde erişilebilirlik hizmetleri, ekrandaki belirli bir bölmenin ne zaman güncellendiğini (örneğin, bir etkinliğin bir parçayla başka bir parçayla değiştirmesi) her zaman belirleyemez. Bölmeler, genellikle bir parçadan oluşan mantıksal olarak gruplandırılmış ve görsel olarak ilgili kullanıcı arayüzü öğelerinden oluşur.
Android 9'da bu bölmeler için erişilebilirlik bölmesi başlıkları veya bağımsız olarak tanımlanabilir başlıklar sağlayabilirsiniz. Bir bölmenin bir erişilebilirlik bölmesi başlığı varsa bölme değiştiğinde erişilebilirlik hizmetleri daha ayrıntılı bilgiler alır. Bu özellik, hizmetlerin kullanıcıya kullanıcı arayüzündeki değişiklikler hakkında daha ayrıntılı bilgi sağlamasına olanak tanır.
Bölmenin başlığını belirtmek için android:accessibilityPaneTitle
özelliğini kullanın. Çalışma zamanında değiştirilen kullanıcı arayüzü bölmesinin başlığını setAccessibilityPaneTitle()
kullanarak da güncelleyebilirsiniz.
Örneğin, bir Fragment
nesnesinin içerik alanı için bir başlık sağlayabilirsiniz.
Başlık tabanlı gezinme
Uygulamanızda mantıksal başlıklar içeren metin içerikleri gösteriliyorsa bu başlıkları temsil eden View
örnekleri için android:accessibilityHeading
özelliğini true
olarak ayarlayın. Bu başlıkları ekleyerek erişilebilirlik hizmetlerinin, kullanıcıların doğrudan bir başlıktan diğerine gitmesine yardımcı olmasına izin vermiş olursunuz. Tüm erişilebilirlik hizmetleri, kullanıcıların kullanıcı arayüzünde gezinme deneyimini iyileştirmek için bu özellikten yararlanabilir.
Grup gezinmesi ve çıkış
Ekran okuyucular geleneksel olarak bir ViewGroup
veya View
nesne koleksiyonunu tek bir birim olarak ne zaman okuyacaklarını belirlemek için android:focusable
özelliğini kullanırlar. Bu şekilde kullanıcılar, görüntülemelerin mantıksal olarak birbirleriyle ilişkili olduğunu anlayabilir.
Android 8.1 ve önceki sürümlerde bir ViewGroup
içindeki her View
nesnesini odaklanılabilir değil, ViewGroup
nesnesini de odaklanılabilir olarak işaretlemeniz gerekir. Bu düzenleme, bazı View
örneklerinin, klavyeyle gezinmeyi daha elverişli hale getirecek şekilde odaklanılabilir olarak işaretlenmesine neden oldu.
Android 9'dan itibaren, bir View
nesnesini odaklanılabilir yapmanın istenmeyen sonuçlar doğurduğu durumlarda android:focusable
özelliği yerine android:screenReaderFocusable
özelliğini kullanabilirsiniz. Ekran okuyucular odağı android:screenReaderFocusable
veya android:focusable
olarak true
olarak ayarlanmış tüm öğelere yerleştirir.
Kolaylık işlemleri
Android 9, kullanıcılar adına kolaylık sağlamak için işlem yapma desteği sunar:
- İpuçlarıyla etkileşim
- Erişilebilirlik çerçevesine eklenen özellikler, uygulamaların kullanıcı arayüzündeki ipuçlarına erişmenizi sağlar. İpucunun metnini okumak için
getTooltipText()
simgesini,ACTION_SHOW_TOOLTIP
veACTION_HIDE_TOOLTIP
araçlarını kullanarakView
örneklerini gösterin veya gizleyin. - Genel işlemler eklendi
- Android 9,
AccessibilityService
sınıfında fazladan iki cihaz işlemi için destek sunuyor. Hizmetiniz, kullanıcıların sırasıylaGLOBAL_ACTION_LOCK_SCREEN
veGLOBAL_ACTION_TAKE_SCREENSHOT
işlemlerini kullanarak cihazlarını kilitlemelerine ve ekran görüntüleri almalarına yardımcı olabilir.
Aralık değişikliği ayrıntıları
Android 9, bir uygulama aynı anda birden çok pencereyi yeniden çizdiğinde, ilgili uygulamanın pencerelerindeki güncellemelerin izlenmesini kolaylaştırır. Bir TYPE_WINDOWS_CHANGED
etkinliği gerçekleştiğinde pencerelerin nasıl değiştiğini belirlemek için getWindowChanges()
API'yi kullanın. Çoklu pencere güncellemesi sırasında her pencere kendi etkinlik grubunu oluşturur.
getSource()
yöntemi, her etkinlikle ilişkili pencerenin kök görünümünü döndürür.
Bir uygulamanın View
nesneleri için erişilebilirlik bölmesi başlıkları tanımlanmışsa hizmetiniz, uygulamanın kullanıcı arayüzü güncellendiğinde bunu algılayabilir. Bir TYPE_WINDOW_STATE_CHANGED
etkinliği gerçekleştiğinde aralığın nasıl değiştiğini belirlemek için getContentChangeTypes()
tarafından döndürülen türleri kullanın. Örneğin, çerçeve bir bölmenin yeni bir başlığı olduğunu veya bölmenin kaybolduğunu algılayabilir.
Döndürme
İstenmeyen dönüşleri ortadan kaldırmak için cihaz konumu değişse bile geçerli yönü sabitleyen bir mod ekledik. Kullanıcılar gerektiğinde sistem çubuğundaki bir düğmeye basarak rotasyonu manuel olarak tetikleyebilir.
Çoğu durumda, uygulamaların uyumluluk üzerindeki etkileri minimum düzeydedir. Ancak, uygulamanızda özelleştirilmiş döndürme davranışı varsa veya alışılmadık ekran yönü ayarları kullanılıyorsa kullanıcı rotasyonu tercihi her zaman dikey olarak ayarlandığında, daha önce fark edilemeyen sorunlarla karşılaşabilirsiniz. Uygulamanızın tüm temel etkinliklerindeki döndürme davranışına göz atmanızı ve tüm ekran yönü ayarlarınızın hâlâ en iyi deneyimi sağladığından emin olmanızı öneririz.
Daha ayrıntılı bilgi için ilgili davranış değişikliklerini inceleyin.

Yeni rotasyon modu, kullanıcıların gerektiğinde sistem çubuğundaki bir düğmeyi kullanarak döndürmeyi manuel olarak tetiklemesine olanak tanıyor.
Metin
Android 9, platforma aşağıdaki metinle ilgili özellikleri sunar:
Önceden Hesaplanmış Metin:
PrecomputedText
sınıfı, gerekli bilgileri önceden hesaplayıp önbelleğe almanızı sağlayarak metin oluşturma performansını iyileştirir. Ayrıca, uygulamanızın ana iş parçacığının metin düzenini işlemesini de sağlar.Büyüteç:
Magnifier
sınıfı, büyüteç API'si sağlayarak tüm uygulamalarda tutarlı bir büyüteç özelliği deneyimi sunan bir platform widget'ıdır.Smart Linkify: Android 9, seçilen metindeki bazı varlıkları tanımlamak ve işlemler önermek için makine öğreniminden yararlanan
TextClassifier
sınıfını iyileştirir. Örneğin,TextClassifier
, uygulamanızın kullanıcının bir telefon numarası seçtiğini algılamasını sağlayabilir. Daha sonra uygulamanız, kullanıcıya bu numarayı kullanarak telefon görüşmesi yapmasını önerebilir.TextClassifier
içindeki özelliklerLinkify
sınıfının işlevselliğinin yerine geçer.Metin Düzeni: Çeşitli kolaylık yöntemleri ve özellikleri, kullanıcı arayüzü tasarımınızı uygulamanızı kolaylaştırır. Ayrıntılı bilgi için
TextView
referans belgelerine göz atın.
DEX dosyalarının ART ile önceden dönüşümü
Android 9 veya sonraki sürümleri çalıştıran cihazlarda Android çalışma zamanı (ART) önceden derleyicisi, bir uygulama paketindeki DEX dosyalarını daha kompakt bir gösterime dönüştürerek sıkıştırılmış Dalvik Yürütülebilir biçim (DEX) dosyalarını daha da optimize eder. Bu değişiklik, uygulamanızın daha hızlı başlatılmasını, daha az disk alanı ve RAM kullanmasını sağlar.
Bu iyileştirme özellikle daha düşük disk G/Ç hızlarına sahip düşük seviye cihazlarda fayda sağlar.
Cihaz üzerinde sistem izleme
Android 9, cihazınızdan sistem izlerini kaydedip bu kayıtların raporunu geliştirme ekibinizle paylaşmanıza olanak tanır. Bu rapor, HTML dahil olmak üzere birden çok biçimi destekler.
Bu izleri toplayarak uygulamanızın işlemleri ve ileti dizileriyle ilgili zamanlama verilerini yakalayabilir ve dünya çapında önem taşıyan diğer cihaz durumu türlerini görüntüleyebilirsiniz.
Bu araç hakkında daha fazla bilgi edinmek için Cihaz üzerinde sistem takibi gerçekleştirme bölümüne bakın.