Android 9 (API düzeyi 28), kullanıcılar ve geliştiriciler için harika yeni özellikler ve işlevler sunuyor. Bu belgede, geliştiriciler için 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'daki Davranış Değişiklikleri'ni inceleyin.
Kablosuz RTT ile iç mekan konumlandırma

Android 9, uygulamalarınızda kapalı alan konumlandırmadan yararlanabilmeniz için IEEE 802.11-2016 Wi-Fi protokolü (Wi-Fi Round-Trip-Time (RTT) olarak da bilinir) için platform desteği ekler.
Donanım desteğiyle Android 9 çalıştıran cihazlarda uygulamalarınız, yakındaki RTT özellikli kablosuz erişim noktalarına (AP) olan mesafeyi ölçmek için
RTT API'lerini kullanabilir. Cihazda konum hizmetleri etkinleştirilmiş ve Kablosuz tarama açık olmalıdır (Ayarlar > Konum bölümünde). Ayrıca uygulamanızda ACCESS_FINE_LOCATION
izni 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 bilgi 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 çoklu yer belirleme algoritması kullanabilirsiniz. Sonuç genellikle 1-2 metre aralığında doğru yeri gösterir.
Bu doğrulukla, bina içi gezinme ve ayrıntılı konuma dayalı hizmetler (ör. netleştirilmiş sesli kontrol ["Bu ışığı aç"] ve konuma dayalı bilgiler ["Bu ürün için özel teklifler var mı?"]) gibi yeni deneyimler oluşturabilirsiniz.
Android WifiRttScan demo uygulamasında WiFi RTT API'nin kullanımını inceleyin.
Daha fazla bilgi için Kablosuz konum: RTT ile mesafe ölçme başlıklı makaleyi inceleyin.
Ekran kesimi desteği

Emülatör kullanarak ekran kesimini test etme
Android 9, kamera 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 kesme 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ın kesiklerinin etrafında düzenlemesine olanak tanır. 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 kesiğini aşağıdaki gibi simüle edebilirsiniz:
- Geliştirici seçeneklerini etkinleştirin.
- Geliştirici seçenekleri ekranında Çizim bölümüne gidin ve Kesik içeren bir ekranı simüle et'i seçin.
- Kesme işleminin boyutunu seçin.
Bildirimler
Android 9, bildirimlerde çeşitli iyileştirmeler sunar. Bu iyileştirmelerin tümü, API düzeyi 28 ve üzeri sürümleri hedefleyen geliştiriciler tarafından kullanılabilir.

Fotoğraf eklenmiş MessagingStyle.

Yanıtlar ve görüşmeler içeren MessagingStyle.
Android 9 özelliklerinin de dahil olduğu bildirimleri kullanan örnek kod için People Sample'a bakın.
Gelişmiş mesajlaşma deneyimi
Android 7.0 (API düzeyi 24) sürümünden başlayarak, doğrudan bildirimden mesajları yanıtlamak veya başka bir metin girmek için bir işlem ekleyebilirsiniz. Android 9, bu özelliği aşağıdaki geliştirmelerle daha iyi hale getirir:
Görüşme katılımcıları için basitleştirilmiş destek:
Person
sınıfı, görüşmeye katılan kişileri (avatarları ve URI'leri dahil) tanımlamak için kullanılır.addMessage()
gibi diğer birçok API artıkCharSequence
yerinePerson
sınıfını kullanıyor.Person
sınıfı, Builder tasarım kalıbını da destekler.Resim desteği: Android 9 artık telefonlarda Mesajlaşma Bildirimleri'ndeki resimleri gösteriyor. Resim görüntülemek için iletide
setData()
simgesini kullanabilirsiniz. Aşağıdaki kod snippet'inde,Person
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 kaydetme: Uygulamanız, kullanıcı bir mesajlaşma bildirimini yanlışlıkla kapattığında sistem tarafından gönderilen
EXTRA_REMOTE_INPUT_DRAFT
öğesini alabilir. Bu ek özelliği kullanarak uygulamadaki metin alanlarını önceden doldurabilir, böylece kullanıcıların yanıtlarını tamamlamalarını sağlayabilirsiniz.Bir görüşmenin grup görüşmesi olup olmadığını belirleme: Bir görüşmeyi kasıtlı olarak grup görüşmesi veya grup görüşmesi olmayan bir görüşme olarak tanımlamak için
setGroupConversation()
simgesini kullanabilirsiniz.Bir amaca yönelik semantik işlem ayarlama:
setSemanticAction()
yöntemi, bir işleme "okundu olarak işaretle", "sil", "yanıtla" gibi semantik anlamlar vermenize olanak tanır.Akıllı Yanıt: Android 9, mesajlaşma uygulamanızda sunulan aynı yanıt önerilerini destekler. Kullanıcıya bir dizi standart yanıt sunmak için
RemoteInput.setChoices()
kullanın.
Kanal ayarları, yayınlar ve "Rahatsız etmeyin"
Android 8.0'da Bildirim Kanalları özelliği kullanıma sunuldu. Bu özellik sayesinde, göstermek istediğiniz her bildirim türü için kullanıcı tarafından özelleştirilebilen bir kanal oluşturabilirsiniz. Android 9, aşağıdaki değişikliklerle bildirim kanalı ayarlarını basitleştirir:
Kanal gruplarını engelleme: Kullanıcılar artık bir uygulamanın bildirim ayarlarında tüm kanal gruplarını engelleyebilir. Bir grubun engellendiği ve sonuç olarak bu gruptaki kanallar için bildirim gönderilmediği zamanları belirlemek üzere
isBlocked()
yöntemini kullanabilirsiniz.Ayrıca, uygulamanız yeni
getNotificationChannelGroup()
yöntemini kullanarak mevcut kanal grubu ayarlarını sorgulayabilir.Yeni yayın amaç 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ı dinleyebilir ve buna göre tepki verebilir. Bu amaç işlemleri ve ekstralar hakkında daha fazla bilgi için
NotificationManager
referansındaki güncellenmiş 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
üç yeni Rahatsız Etmeyin öncelik kategorisi içerir: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
ayrıca görsel kesintileri önlemek için kullanabileceğiniz yedi yeni Rahatsız Etmeyin sabiti içerir: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ünmesini ("göz atma") engeller.SUPPRESSED_EFFECT_STATUS_BAR
Durum çubuğunu destekleyen cihazlarda bildirimlerin durum çubuğunda görünmesini engeller.SUPPRESSED_EFFECT_BADGE
Rozet özelliğini destekleyen cihazlarda rozetleri engeller. Daha fazla bilgi için Bildirim rozetini değiştirme başlıklı makaleyi inceleyin.SUPPRESSED_EFFECT_AMBIENT
Ambiyans ekranlarını destekleyen cihazlarda bildirimleri engeller.SUPPRESSED_EFFECT_NOTIFICATION_LIST
Bildirimlerin, bildirim gölgesi veya kilit ekranı gibi liste görünümünü destekleyen cihazlarda liste görünümünde görünmesini engeller.
Çoklu kamera desteği ve kamera güncellemeleri
Android 9 çalıştıran cihazlarda iki veya daha fazla fiziksel kameradan aynı anda görüntü akışlarına erişebilirsiniz. İki ön veya iki arka kamerası olan cihazlarda, tek bir kamerayla mümkün olmayan yenilikçi özellikler (ör. sorunsuz yakınlaştırma, bokeh ve stereo görüş) oluşturabilirsiniz. API, iki veya daha fazla kamera arasında otomatik olarak geçiş yapan mantıksal ya da birleştirilmiş bir kamera akışı çağırmanıza da olanak tanır.
Kameradaki diğer iyileştirmeler arasında, ilk çekim sırasında gecikmeleri azaltmaya yardımcı olan ek Oturum parametreleri ve yüzey paylaşımı yer alır. Yüzey paylaşımı, kamera istemcilerinin kamera akışını durdurup başlatmaya gerek kalmadan çeşitli kullanım alanlarını işlemesini sağlar. Ayrıca, uygulama düzeyinde görüntü sabitleme ve özel efektler için ekrana dayalı flaş desteği ve OIS zaman damgalarına erişim sağlayan API'ler de ekledik.
Android 9'daki çoklu kamera API'si, FULL
veya LIMITED
özelliğine sahip cihazlarda tek renkli kameraları destekler.
Tek renkli çıkış, gri tonlama olarak Y, 128 olarak U (Cb) ve 128 olarak V (Cr) ile YUV_420_888
biçimi kullanılarak elde edilir.
Android 9, harici USB/UVC kameraların desteklenen cihazlarda kullanılmasını da sağlar.
Çizilebilir öğeler ve bit eşlemler için ImageDecoder
Android 9, görüntülerin kodunu çözmek için modern bir yaklaşım sunan
ImageDecoder
sınıfını kullanıma sunar. BitmapFactory
ve BitmapFactory.Options
API'leri yerine bu sınıfı kullanın.
ImageDecoder
, bir bayt arabelleğinden, dosyadan veya URI'den Drawable
ya da Bitmap
oluşturmanıza olanak tanır. Bir görüntünün kodunu çözmek için önce kodlanmış görüntünün kaynağıyla createSource()
işlevini çağırın. Ardından, ImageDecoder.Source
nesnesini ileterek decodeDrawable()
veya decodeBitmap()
çağrısı yapın. Bu işlem, Drawable
veya Bitmap
oluşturur. Varsayılan ayarları değiştirmek için OnHeaderDecodedListener
değerini decodeDrawable()
veya decodeBitmap()
olarak iletin. ImageDecoder
calls
onHeaderDecoded()
Resmin varsayılan genişliği ve yüksekliği bilindikten sonra.
Kodlanmış resim animasyonlu bir GIF veya WebP ise decodeDrawable()
, AnimatedImageDrawable
sınıfının bir örneği olan Drawable
değerini döndürür.
Resim özelliklerini ayarlamak için kullanabileceğiniz farklı yöntemler vardır:
- Kodu çözülen görüntüyü tam bir boyuta ölçeklendirmek için hedef boyutları
setTargetSize()
'ye iletin. Ayrıca, örnek boyutu kullanarak da resimleri ölçeklendirebilirsiniz. Örneklem boyutunu doğrudansetTargetSampleSize()
'a iletin. - Bir görüntüyü ölçeklendirilmiş görüntü aralığında kırpmak için
setCrop()
işlevini çağırın. - Değiştirilebilir bir bit eşlem oluşturmak için
true
değerinisetMutableRequired()
içine iletin.
ImageDecoder
, resimlere yuvarlatılmış köşeler veya daire maskeleri gibi özelleştirilmiş ve karmaşık efektler eklemenize de olanak tanır. İstediğiniz çizim komutlarını yürütmek için setPostProcessor()
ile PostProcessor
sınıfının bir örneğini kullanın.
Animasyon
Android 9, GIF ve WebP animasyonlu resimlerini çizmek ve göstermek için AnimatedImageDrawable
sınıfını kullanıma sunar.
AnimatedImageDrawable
, oluşturma iş parçacığı AnimatedImageDrawable
animasyonlarını yönlendirdiği için AnimatedVectorDrawable
ile benzer şekilde çalışır.
Oluşturma iş parçacığı, çözme işleminin oluşturma iş parçacığındaki diğer işlemlere müdahale etmemesi için çözme işleminde de bir çalışan iş parçacığı kullanır. Bu uygulama, uygulamanızın 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
, ImageDecoder
örneği kullanılarak kod çözülebilir. Aşağıdaki kod snippet'inde, ImageDecoder
kullanarak AnimatedImageDrawable
kodunuzun nasıl çözüleceği gösterilmektedir:
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
, resmi daha fazla değiştirmenize olanak tanıyan çeşitli yöntemler sunar.
Örneğin, resmin görünümünü değiştirmek için setPostProcessor()
yöntemini kullanabilirsiniz. Bu yöntemle, resme daire maskesi veya yuvarlatılmış köşeler uygulayabilirsiniz.
HDR VP9 Video, HEIF görüntü sıkıştırma ve Medya API'leri
Android 9, Yüksek Dinamik Aralık (HDR) VP9 Profil 2 için yerleşik destek sağlar. Bu sayede, HDR özellikli cihazlarda YouTube, Play Filmler ve diğer kaynaklardan HDR özellikli filmleri kullanıcılarınıza sunabilirsiniz.
Android 9, sıkıştırmayı iyileştiren, depolama alanını ve ağ verisi kullanımını azaltan Yüksek Verimli Resim Dosyası biçiminde (HEIF veya HEIC) görüntü kodlamayı da destekliyor. HEIF statik görüntü örnekleri, MediaMuxer
ve MediaExtractor
sınıflarında desteklenir. Android 9 cihazlarda platform desteği sayesinde, arka uç sunucunuzdan HEIF resimlerini kolayca gönderip kullanabilirsiniz. Uygulamanızın paylaşım ve görüntüleme için bu veri biçimiyle uyumlu olduğundan emin olduktan sonra, uygulamanızda resim depolama biçimi olarak HEIF'i deneyin. ImageDecoder
veya BitmapFactory
(JPEG dosyasından bit eşlem elde eder) kullanarak JPEG'den HEIC'e dönüştürme işlemi yapabilirsiniz. Ardından, YUV bayt arabelleklerinden veya HeifWriter
, Surface
ya da Bitmap
örneklerinden HEIF statik resimler yazmak için HeifWriter
kullanabilirsiniz.
Medya metrikleri AudioTrack
, AudioRecord
ve MediaDrm
sınıflarında da kullanılabilir.
Android 9, metrikleri, HDCP seviyelerini, güvenlik seviyelerini ve oturum sayısını almak, ayrıca güvenlik seviyeleri ve güvenli durdurmalar üzerinde daha fazla kontrol sağlamak için MediaDRM
sınıfına yönelik yöntemler sunar. Ayrıntılar için API Diff
raporuna bakın.
Android 9'da AAudio API, kullanım, içerik türü ve giriş ön ayarı gibi çeşitli ek AAudioStream özellikleri için destek ekler. Bu özellikleri kullanarak VoIP veya video kamera uygulamaları için ayarlanmış akışlar oluşturabilirsiniz. Ayrıca, oturum kimliğini, AAudio akışını efektler içerebilen bir alt miks ile ilişkilendirecek şekilde de ayarlayabilirsiniz. Efektleri kontrol etmek için
AudioEffect
API'yi kullanın.
Android 9, AudioEffect
API'yi dinamik işleme için kullanıma sunar.
Bu sınıfla, eşitleme, çok bantlı sıkıştırma ve sınırlayıcı gibi kanal tabanlı ses efektlerini birden fazla aşamada oluşturabilirsiniz. Grup sayısı ve etkin aşamalar yapılandırılabilir. Ayrıca çoğu parametre gerçek zamanlı olarak kontrol edilebilir.
JobScheduler'da veri maliyetine duyarlılık
Android 9'dan itibaren JobScheduler
, 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ı bildirebilir, önceden getirme sinyali verebilir ve ayrıntılı ağ gereksinimlerini belirtebilir. JobScheduler
, çalışmayı ağ durumuna göre yönetir. Örneğin, ağ yoğun olduğunu bildirdiğinde JobScheduler
büyük ağ isteklerini erteleyebilir. Ölçülmemiş bir ağda JobScheduler
, kullanıcı deneyimini iyileştirmek için önceden getirme işleri (ör. başlıkları önceden getirme) çalıştırabilir.
İş eklerken setEstimatedNetworkBytes()
, setPrefetch()
ve setRequiredNetwork()
seçeneklerini uygun şekilde kullanarak JobScheduler
'ın işi düzgün şekilde yapmasına yardımcı olun. İşiniz yürütüldüğünde, JobParameters.getNetwork()
tarafından döndürülen Network
nesnesini kullandığınızdan emin olun.
Aksi takdirde, cihazın varsayılan ağını dolaylı olarak kullanırsınız. Bu ağ, gereksinimlerinizi karşılamayabilir ve istenmeyen veri kullanımına neden olabilir.
Neural Networks API 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 sunuldu. Android 9, API'yi genişletip iyileştirerek dokuz yeni işlem için destek ekliyor:
- Öğe bazında matematiksel işlemler:
- Dizi işlemleri:
Bilinen sorun: Android 9 ve sonraki sürümlerde kullanılabilen ANEURALNETWORKS_PAD
işlemine ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
tensörleri geçirilirken NNAPI'den alınan çıkış, TensorFlow Lite gibi daha üst düzey makine öğrenimi çerçevelerinden alınan çıkışla eşleşmeyebilir. Sorun çözülene kadar yalnızca
ANEURALNETWORKS_TENSOR_FLOAT32
iletebilirsiniz.
Ayrıca API, ANeuralNetworksModel_relaxComputationFloat32toFloat16()
adlı yeni bir işlevi de kullanıma sunuyor. Bu işlev, ANEURALNETWORKS_TENSOR_FLOAT32
değerinin IEEE 754 16 bitlik kayan nokta biçiminin aralığı ve hassasiyetiyle hesaplanıp hesaplanmayacağını belirtmenize olanak tanıyor.
Otomatik doldurma çerçevesi
Android 9, form doldurma sırasında kullanıcı deneyimini daha da iyileştirmek için otomatik doldurma hizmetlerinin uygulayabileceği çeşitli iyileştirmeler 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, aşağıdaki bölümlerde özetlenen bir dizi güvenlik özelliği sunar:
Android Korumalı Onayı
Android 9 veya sonraki sürümlerin yüklü olduğu desteklenen cihazlarda Android Protected Confirmation'ı kullanabilirsiniz. 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 yapma gibi hassas bir işlemi tamamlamak istediğini yeniden onaylamasına olanak tanır.
Kullanıcı ifadeyi kabul ederse Android Keystore, anahtarlı karma mesaj kimlik doğrulama kodu (HMAC) ile korunan bir kriptografik imza alır ve depolar. Android Keystore, iletinin geçerliliğini onayladıktan sonra uygulamanız, kullanıcının kabul ettiği iletiyi imzalamak için güvenilir yürütme ortamında (TEE) trustedConfirmationRequired
ile oluşturulan anahtarı kullanabilir. İmza, kullanıcının bildirimi gördüğünü ve kabul ettiğini yüksek bir güvenle gösterir.
Dikkat: Android Protected Confirmation, kullanıcı için güvenli bir bilgi kanalı sağlamaz. Uygulamanız, Android platformunun sunduğu gizlilik garantilerinin ötesinde herhangi bir gizlilik garantisi sunamaz. Özellikle, normalde kullanıcının cihazında göstermeyeceğiniz hassas bilgileri görüntülemek için bu iş akışını kullanmayın.
Android Protected Confirmation desteği ekleme hakkında bilgi edinmek için Android Protected Confirmation 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 iletişim kutuları sağlar. Bu işlev, iletişim kutusu için standart bir görünüm, his ve yerleşim oluşturarak kullanıcılara güvenilir bir biyometrik kimlik bilgisi denetleyicisine karşı kimlik doğrulama yaptıkları konusunda 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
kullanmaya geçin. BiometricPrompt
, kimlik doğrulama iletişim kutusunu göstermek için sisteme bağlıdır. Ayrıca, kullanıcının seçtiği biyometrik kimlik doğrulama türüne uyum sağlamak için davranışını da değiştirir.
Donanım güvenlik modülü
Android 9 veya sonraki sürümlerin yüklü olduğu desteklenen cihazlarda, donanım güvenlik modülünde bulunan KeyMint (eski adıyla Keymaster) HAL'nin bir uygulaması olan StrongBox KeyMint (eski adıyla Keymaster) bulunabilir. Modül aşağıdakileri içerir:
- Kendi CPU'su.
- Güvenli depolama
- Gerçek bir rastgele sayı oluşturma aracı.
- Paket kurcalamaya ve uygulamaların yetkisiz olarak yan yüklenmesine karşı koymaya yönelik ek mekanizmalar.
StrongBox KeyMint'te depolanan anahtarlar kontrol edilirken sistem, anahtarın bütünlüğünü güvenilir yürütme ortamı (TEE) ile doğrular.
StrongBox KeyMint'i kullanma hakkında daha fazla bilgi edinmek için Donanım Güvenlik Modülü başlıklı makaleyi inceleyin.
Anahtar deposuna güvenli anahtar içe aktarma
Android 9, ASN.1 kodlu anahtar biçimi kullanarak şifrelenmiş anahtarları güvenli bir şekilde Anahtar Deposu'na aktarma özelliği ekleyerek anahtar şifre çözme güvenliğini artırır. Ardından KeyMint, Keystore'daki 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 bir şekilde içe aktarma hakkında daha fazla bilgi edinin.
Anahtar rotasyonu içeren APK imza şeması
Android 9'da APK İmza Şeması v3 desteği eklenmiştir. Bu şemada, her imzalama sertifikası için imzalama bloğuna bir rotasyon kanıtı kaydı ekleme seçeneği bulunur. Bu özellik, APK dosyasının geçmiş imzalama sertifikalarını şu anda imzalandığı sertifikaya bağlayarak uygulamanızın yeni bir imzalama sertifikasıyla imzalanmasını sağlar.
apksigner
kullanarak anahtarlara rotasyon uygulama hakkında daha fazla bilgi edinin.
Anahtar şifre çözme işlemine yalnızca kilidi açık cihazlarda izin verme seçeneği
Android 9'da unlockedDeviceRequired
işareti kullanıma sunulmuştur. Bu seçenek, belirtilen anahtar kullanılarak aktarım halindeki veya depolanmış verilerin şifresinin çözülmesine izin verilmeden önce anahtar deposunun ekranın kilidinin açılmasını gerektirip gerektirmediğini belirler. Bu tür anahtarlar, diskte depolanacak hassas verileri (ör. sağlık veya işletme verileri) şifrelemek için uygundur. Bu işaret, telefonun kaybolması veya çalınması durumunda cihaz kilitliyken verilerin şifresinin çözülemeyeceği konusunda kullanıcılara daha fazla güvence sağlar.
Cihaz kilitliyken anahtarın şifre çözme işleminden korunmasını sağlamak için true
değerini setUnlockedDeviceRequired()
yöntemine ileterek işareti etkinleştirin. Bu adımı tamamladıktan sonra, kullanıcının ekranı kilitlendiğinde bu anahtar kullanılarak verilerin şifresini çözme veya verileri imzalama girişimleri başarısız olur. Kilitli bir cihaza erişilebilmesi için PIN, şifre, parmak izi veya başka bir güvenilir faktör gerekir.
Eski şifreleme desteği
Keymaster 4 ile birlikte gelen Android 9 cihazlar, Üçlü Veri Şifreleme Algoritması veya Üçlü DES'i destekler. Uygulamanız, Triple DES gerektiren eski sistemlerle birlikte çalışıyorsa hassas kimlik bilgilerini şifrelerken bu şifre türünü kullanın.
Uygulamanızı daha güvenli hale getirme hakkında daha fazla bilgi edinmek için Android Geliştiricileri İçin Güvenlik başlıklı makaleyi inceleyin.
WPS'nin desteğinin sonlandırılması
Wi-Fi Korumalı Kurulum (WPS), güvenlik nedeniyle kullanımdan kaldırıldı.
Android yedeklemeleri
Android 9, yedekleme ve geri yükleme ile ilgili yeni işlevler ve geliştirici seçenekleri ekler. Bu değişikliklerle ilgili ayrıntılar aşağıdaki bölümlerde yer almaktadır.
İstemci tarafı şifreleme yedekleri
Android 9, Android yedeklerinin istemci tarafında barındırılan bir anahtarla şifrelenmesi için destek ekler. 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şse.
- Kullanıcı, cihazı için ekran kilidi ayarlamışsa kilidi açmak için PIN, desen veya şifre gerekir.
Bu gizlilik önlemi etkinleştirildiğinde, kullanıcının cihazı tarafından oluşturulan yedeklemelerden veri 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 Service (Google Cloud Key Vault Hizmeti) başlıklı teknik belgeyi inceleyin.
Yedekleme için gereken cihaz koşullarını tanımlama
Uygulama verileriniz hassas bilgiler veya tercihler içeriyorsa Android 9, istemci tarafı şifreleme etkinleştirildiğinde ya da yerel cihazdan cihaza aktarım gerçekleştiğinde olduğu gibi, uygulamanızın verilerinin kullanıcının yedeğine dahil edileceği cihaz koşullarını tanımlamanıza olanak tanır.
Android cihazlarda veri yedekleme hakkında daha fazla bilgi edinmek için Veri Yedeklemeye Genel Bakış başlıklı makaleyi inceleyin.
Erişilebilirlik
Android 9, erişilebilirlik çerçevesinde iyileştirmeler yaparak uygulamanızın kullanıcılarına daha da iyi deneyimler sunmanızı kolaylaştırır.
Gezinme anlamı
Android 9'da eklenen özellikler, erişilebilirlik hizmetlerinin (özellikle ekran okuyucuların) ekranda bir bölümden diğerine nasıl gideceğ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 metinler arasında hızlıca gezinmesine ve seçim yapmasına yardımcı olabilir.
Örneğin, bir alışveriş uygulamasında ekran okuyucu, kullanıcıların bir fırsat kategorisinden doğrudan bir sonrakine gitmesine yardımcı olabilir. Ekran okuyucunun bir sonraki kategoriye geçmeden önce bir kategorideki tüm öğeleri okuması gerekmez.
Erişilebilirlik bölmesi başlıkları
Android 8.1 (API düzeyi 27) ve önceki sürümlerde, erişilebilirlik hizmetleri ekranın belirli bir bölmesinin ne zaman güncellendiğini (ör. bir etkinlik bir parçayı başka bir parçayla değiştirdiğinde) her zaman belirleyemez. Paneler, genellikle bir parçayı oluşturan, mantıksal olarak gruplandırılmış ve görsel olarak ilişkili kullanıcı arayüzü öğelerinden oluşur.
Android 9'da bu paneller için erişilebilirlik paneli başlıkları veya ayrı ayrı tanımlanabilir başlıklar sağlayabilirsiniz. Bir bölmede erişilebilirlik bölmesi başlığı varsa bölme değiştiğinde erişilebilirlik hizmetleri daha ayrıntılı bilgi alır. Bu özellik, hizmetlerin kullanıcıya kullanıcı arayüzünde değişenler hakkında daha ayrıntılı bilgi vermesini sağlar.
Bir bölmenin başlığını belirtmek için android:accessibilityPaneTitle
özelliğini kullanın. Ayrıca, çalışma zamanında değiştirilen bir kullanıcı arayüzü bölmesinin başlığını setAccessibilityPaneTitle()
kullanarak da güncelleyebilirsiniz.
Örneğin, Fragment
nesnesinin içerik alanı için bir başlık sağlayabilirsiniz.
Başlığa dayalı gezinme
Uygulamanızda mantıksal başlıklar içeren metin içeriği 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ını sağlarsınız. Tüm erişilebilirlik hizmetleri, kullanıcıların kullanıcı arayüzünde gezinme deneyimini iyileştirmek için bu özellikten yararlanabilir.
Grup gezinme ve çıkışı
Ekran okuyucular, geleneksel olarak android:focusable
özelliğini kullanarak ViewGroup
veya bir View
nesne koleksiyonunu tek bir birim olarak ne zaman okumaları gerektiğini belirler. Bu sayede kullanıcılar, görünümlerin mantıksal olarak birbiriyle ilişkili olduğunu anlayabilir.
Android 8.1 ve önceki sürümlerde, bir ViewGroup
içindeki her View
nesnesini odaklanılamaz, ViewGroup
öğesini ise odaklanılabilir olarak işaretlemeniz gerekir. Bu düzenleme, bazı View
örneklerinin klavye ile gezinmeyi daha zahmetli hale getirecek şekilde odaklanılabilir olarak işaretlenmesine neden oldu.
Android 9'dan itibaren, android:screenReaderFocusable
özelliğini, View
nesnesinin odaklanılabilir hale getirilmesinin istenmeyen sonuçlara yol açtığı durumlarda android:focusable
özelliği yerine kullanabilirsiniz. Ekran okuyucular, android:screenReaderFocusable
veya android:focusable
özelliklerinden biri true
olarak ayarlanmış tüm öğelere odaklanır.
Kolaylık işlemleri
Android 9, kullanıcılar adına kolaylık sağlayan işlemler yapma desteği ekler:
- İpuçlarıyla etkileşim
- Erişilebilirlik çerçevesine eklenen özellikler sayesinde, uygulama kullanıcı arayüzünde ipuçlarına erişebilirsiniz. İpucu metnini okumak için
getTooltipText()
,View
örneklerine ipuçlarını göstermelerini veya gizlemelerini söylemek içinACTION_SHOW_TOOLTIP
veACTION_HIDE_TOOLTIP
tuşlarını kullanın. - Genel işlemler eklendi
- Android 9,
AccessibilityService
sınıfında iki ek cihaz işlemi için destek sunar. Hizmetiniz, kullanıcılarınGLOBAL_ACTION_LOCK_SCREEN
veGLOBAL_ACTION_TAKE_SCREENSHOT
işlemleriyle cihazlarını kilitlemesine ve ekran görüntüsü almasına yardımcı olabilir.
Pencere değişikliği ayrıntıları
Android 9, bir uygulama aynı anda birden fazla pencereyi yeniden çizdiğinde uygulamanın pencerelerindeki güncellemeleri izlemeyi kolaylaştırır. Bir
TYPE_WINDOWS_CHANGED
etkinliği gerçekleştiğinde, aralıkların nasıl değiştiğini belirlemek için
getWindowChanges()
API'sini kullanın. Çok pencereli güncelleme sırasında her pencere kendi etkinlik grubunu oluşturur.
getSource()
Yöntem, her etkinlikle ilişkili pencerenin kök görünümünü döndürür.
Bir uygulama, erişilebilirlik bölmesi başlıklarını View
nesneleri için tanımlamış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 pencerenin 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ğunda veya bir bölme kaybolduğunda bunu algılayabilir.
Döndürme
İstem dışı döndürmeleri önlemek için cihazın konumu değişse bile mevcut yönü sabitleyen bir mod ekledik. Kullanıcılar, sistem çubuğundaki bir düğmeye basarak gerektiğinde döndürmeyi manuel olarak tetikleyebilir.
Uygulamalar için uyumluluk etkileri çoğu durumda minimum düzeydedir. Ancak uygulamanızda özelleştirilmiş bir rotasyon davranışı varsa veya alışılmadık bir ekran yönü ayarı kullanılıyorsa, kullanıcı rotasyon tercihi her zaman dikey olarak ayarlandığında fark edilmeyecek 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â optimum deneyimi sağladığından emin olmanızı öneririz.
Daha fazla bilgi için ilgili davranış değişikliklerine bakın.

Yeni bir döndürme modu, kullanıcıların sistem çubuğundaki bir düğmeyi kullanarak gerektiğinde döndürmeyi manuel olarak tetiklemesine olanak tanır.
Metin
Android 9, platforma metinle ilgili şu özellikleri getiriyor:
Önceden hesaplanmış metin:
PrecomputedText
sınıfı, gerekli bilgileri önceden hesaplayıp önbelleğe almanıza olanak tanıyarak metin oluşturma performansını artırır. Ayrıca uygulamanızın ana ileti dizisi dışında metin düzeni oluşturmasına da olanak tanır.Büyüteç:
Magnifier
sınıfı, tüm uygulamalarda tutarlı bir büyüteç özelliği deneyimi sağlayan büyüteç API'si sunan bir platform widget'ıdır.Akıllı Bağlantı Oluşturma: Android 9, seçili metindeki bazı öğeleri tanımlamak ve işlemler önermek için makine öğreniminden yararlanan
TextClassifier
sınıfını geliştirir. Örneğin,TextClassifier
, uygulamanızın kullanıcının bir telefon numarası seçtiğini algılamasını sağlayabilir. Uygulamanız daha sonra kullanıcıya bu numarayı kullanarak telefon araması yapmasını önerebilir.TextClassifier
sınıfındaki özellikler,Linkify
sınıfının işlevinin yerini alır.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ılar için
TextView
ile ilgili referans belgelerine bakın.
DEX dosyalarının ART önceden derleme dönüşümü
Android 9 veya sonraki sürümlerin yüklü olduğu 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 Executable biçimindeki (DEX) dosyaları daha da optimize eder. Bu değişiklik, uygulamanızın daha hızlı başlatılmasını ve daha az disk alanı ile RAM kullanmasını sağlar.
Bu iyileştirme, özellikle daha yavaş disk G/Ç hızlarına sahip düşük seviye cihazlara fayda sağlar.
Cihaz üzerinde sistem takibi
Android 9, cihazınızdan sistem izlerini kaydetmenize ve bu kayıtların raporunu geliştirme ekibinizle paylaşmanıza olanak tanır. Bu rapor, HTML dahil olmak üzere birden fazla biçimi destekler.
Bu izleri toplayarak uygulamanızın süreçleri ve iş parçacıklarıyla ilgili zamanlama verilerini yakalayabilir ve küresel olarak önemli diğer cihaz durumlarını görüntüleyebilirsiniz.
Bu araç hakkında daha fazla bilgi edinmek için Cihaz üzerinde sistem izleme gerçekleştirme başlıklı makaleyi inceleyin.