Android 9 özellikleri ve API'leri

Android 9 (API düzeyi 28), kullanıcılar ve geliştiriciler için harika, yeni özellikler ve olanaklar sunar. Bu dokümanda, 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ı öğrenmek için Android 9 Davranış Değişiklikleri'ne göz atmayı da unutmayın.

Kablosuz RTT ile iç mekan konumlandırması

Yeni RTT API'leri, uygulamalarınızda iç mekan konumlandırmasını destekler.

Android 9, uygulamalarınızda iç mekan konumlandırmasından faydalanmanızı sağlamak amacıyla 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) ve uygulamanızın ACCESS_FINE_LOCATION iznine sahip olması gerekir. RTT'yi kullanmak için cihazın erişim noktalarına bağlanması gerekmez. Gizliliği korumak için erişim noktasına uzaklığı 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 bir çarpanlı algoritma kullanabilirsiniz. Sonuç genellikle 1-2 metre içinde doğru sonuç verir.

Bu doğruluk sayesinde bina içi navigasyon, 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 kullanılan Kablosuz RTT API'yi görün.

Daha fazla bilgi için Kablosuz konumu: RTT ile aralık bölümüne bakın.

Ekran kesimi desteği

Farklı kesim boyutlarını gösteren geliştirici seçenekleri ekranı

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 cihazdaki kesiklerin etrafına yerleştirmesine olanak tanır. Bu özelliği aşağıdaki değerlerden birine ayarlayabilirsiniz:

Android 9 çalıştıran herhangi bir cihazda veya emülatörde ekran kesimi simülasyonunu aşağıdaki gibi yapabilirsiniz:

  1. Geliştirici seçeneklerini etkinleştirin.
  2. Geliştirici seçenekleri ekranında Çizim bölümüne gidin ve Kesit içeren bir ekranı simüle et'i seçin.
  3. Kesme boyutunu seçin.

Bildirimler

Android 9, bildirimlerde çeşitli geliştirmeler sunar. Tüm bu geliştirmelerin hepsi, API düzeyi 28 ve üstünü hedefleyen geliştiriciler tarafından kullanılabilir.

Mesajlaşma bildirimleri

Fotoğraf eklenmiş MessagingStyle.

Mesajlaşma bildirimi

Yanıtlar ve ileti dizisiyle MessagingStyle.

Android 9 özellikleri de dahil olmak üzere bildirimleri kullanan örnek kod için Kişiler Ö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, 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 geliştiriyor:

  • Sohbet katılımcıları için basitleştirilmiş destek: Person sınıfı, avatarları ve URI'leri de dahil olmak üzere bir konuşmaya dahil olan kişileri tanımlamak için kullanılır. addMessage() gibi diğer birçok API artık CharSequence yerine Person sınıfını kullanı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'nde resimler gösteriyor. Bir resmi görüntülemek için mesajdaki setData() simgesini kullanabilirsiniz. Aşağıdaki kod snippet'i, bir Person öğesinin ve resim içeren bir mesajın nasıl oluşturulacağını göstermektedir.

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: Bir kullanıcı mesajlaşma bildirimini yanlışlıkla kapattığında uygulamanız sistem tarafından gönderilen EXTRA_REMOTE_INPUT_DRAFT bilgisini alabilir. Bu ekstra özelliği, kullanıcıların yanıtlarını tamamlayabilmesi amacıyla uygulamadaki metin alanlarını önceden doldurmak için kullanabilirsiniz.

  • Bir görüşmenin grup görüşmesi olup olmadığını belirleyin: Bir görüşmeyi grup görüşmesi veya grup dışı görüşme olarak tanımlamak için setGroupConversation() özelliğini kullanabilirsiniz.

  • Bir amaç için anlamsal işlemi belirleme: setSemanticAction() yöntemi, bir işleme "okundu olarak işaretle", "sil", "yanıtla" gibi anlamsal anlam vermenize olanak tanır.

  • SmartReply: Android 9, mesajlaşma uygulamanızdaki önerilen yanıtların aynısını destekler. Kullanıcıya bir dizi standart yanıt sağlamak için RemoteInput.setChoices() özelliğini kullanı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, 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ı ü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 amaç işlemleri ve ekstralar hakkında daha fazla bilgi için NotificationManager referansındaki güncellenmiş sabit değerler listesine bakın. Yayın amaçlarına tepki verme hakkında bilgi için Yayınlar konusuna bakın.

  • NotificationManager.Policy için üç yeni "Rahatsız Etmeyin" öncelik kategorisi bulunmaktadır:

  • NotificationManager.Policy, görsel kesintiyi önlemek için kullanabileceğiniz yedi yeni Do-Not-Disturb sabitine de sahiptir:

Çoklu kamera desteği ve kamera güncellemeleri

Android 9 çalıştıran cihazlarda iki veya daha fazla fiziksel kameradan akışlara 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. API, iki veya daha fazla kamera arasında otomatik olarak geçiş yapan mantıksal veya çok kaynaklı bir kamera akışı çağırmanıza da 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 istemcilerinin, kamera yayınını durdurmaya ve başlatmaya gerek kalmadan çeşitli kullanım alanlarını ele almasına olanak tanıyan yüzey paylaşımı sayılabilir. 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 çok kameralı API, FULL veya LIMITED özelliğine sahip cihazlarda tek renkli kameraları destekler. Tek renkli çıkış, YUV_420_888 biçimiyle gri tonlamalı Y, 128 U (Cb) ve 128 renk (Cr) ile elde edilir.

Android 9, desteklenen cihazlarda harici USB/UVC kameraların desteklenmesini de sağlar.

Çekilebilir dosyalar 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 sunuldu. BitmapFactory ve BitmapFactory.Options API'lerinin yerine bu sınıfı kullanın.

ImageDecoder, bayt arabelleğinden, dosyadan veya URI'dan 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, ImageDecoder.Source nesnesini geçirerek decodeDrawable() veya decodeBitmap() yöntemini kullanarak Drawable ya da Bitmap oluşturun. Varsayılan ayarları değiştirmek için OnHeaderDecodedListener değerini decodeDrawable() veya decodeBitmap() öğesine iletin. ImageDecoder, onHeaderDecoded() değerini bilinen resmin varsayılan genişliği ve yüksekliğiyle çağırır. Kodlanmış resim, animasyonlu bir 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ülen resmi tam bir boyuta ölçeklemek için hedef boyutları setTargetSize()'e geçirin. Resimleri, örnek boyutu kullanarak da ölçeklendirebilirsiniz. Örneklem boyutunu doğrudan setTargetSampleSize() öğesine iletin.
  • Bir resmi ölçeklendirilmiş resmin aralığı içinde kırpmak için setCrop() çağrısı yapın.
  • Değişebilir bit eşlem oluşturmak için true öğesini setMutableRequired() öğesine geçirin.

ImageDecoder, resimlere yuvarlatılmış köşeler veya daire maskeler gibi özelleştirilmiş ve karmaşık efektler eklemenize de olanak tanır. İstediğiniz çizim komutlarını yürütmek için PostProcessor sınıfının bir örneğiyle setPostProcessor() kullanın.

Animasyonlar

Android 9'da GIF ve WebP animasyonlu resimler çizme ve görüntüleme için AnimatedImageDrawable sınıfı kullanıma sunuldu. AnimatedImageDrawable, oluşturma iş parçacığının AnimatedImageDrawable animasyonlarını yönlendirmesi açısından AnimatedVectorDrawable ile benzer şekilde çalışır. Oluşturma iş parçacığı kodu çözmek için bir çalışan iş parçacığı da kullanır. Böylece kod çözme işlemi, oluşturma iş parçacığındaki diğer işlemleri etkilemez. 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örüntülemesine 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 öğesini 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 yöntemlerle resmin görünümünü değiştirmek için setPostProcessor() yöntemini kullanabilirsiniz.

HDR VP9 Video, HEIF görüntü sıkıştırma ve Medya API'leri

Android 9, Yüksek Dinamik Aralık (HDR) VP9 Profile 2 için yerleşik destek sağlar. Böylece kullanıcılarınıza HDR özellikli cihazlarda YouTube, Play Filmler ve diğer kaynaklardan HDR özellikli filmler sunabilirsiniz.

Android 9, 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 sunar. HEIF hareketsiz görüntü örnekleri MediaMuxer ve MediaExtractor sınıflarında desteklenir. Android 9 cihazlardaki platform desteğiyle, arka uç sunucunuzdan HEIF görüntüleri 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'i uygulamanızda resim depolama biçimi olarak deneyin. ImageDecoder veya BitmapFactory (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 kullanabilirsiniz.

Medya metrikleri AudioTrack, AudioRecord ve MediaDrm sınıflarında da kullanılabilir.

Android 9; metrikleri, HDCP seviyelerini, güvenlik düzeylerini ve oturum sayısını almanın yanı sıra güvenlik seviyeleri ve güvenli duraklar üzerinde daha fazla kontrol sağlamak için MediaDRM sınıfına yeni yöntemler sunar. Ayrıntılar için API Farkı raporuna bakın.

Android 9'da AAudio API; kullanım, içerik türü ve giriş hazır ayarı gibi bazı ek AAudioStream özellikleri için destek sunar. Bu özellikleri kullanarak VoIP veya video kamera uygulamaları için ayarlanmış akışlar oluşturabilirsiniz. Ayrıca oturum kimliğini, AAudio akışını efekt içerebilen bir alt mix ile ilişkilendirmek için 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ıfta birden fazla aşamada dengeleme, çok bantlı sıkıştırma ve sınırlayıcı gibi kanal tabanlı ses efektleri oluşturabilirsiniz. Bantların ve aktif aşamaların 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, önceden getirme sinyalini kullanabilir ve ayrıntılı ağ gereksinimlerini belirtebilir. Ardından JobScheduler, işleri ağ durumuna göre yönetir. Örneğin, ağ tıkanıklık gösterdiğinde sinyal aldığında JobScheduler büyük ağ isteklerini erteleyebilir. JobScheduler, sınırsız bir ağdayken kullanıcı deneyimini iyileştirmek için başlıkları önceden getirmek gibi önceden getirme işleri çalıştırabilir.

İş eklerken, JobScheduler işi düzgün bir şekilde işlemesine 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 bu da istenmeyen veri kullanımına neden olur.

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 seviyesi 27) kullanıma sunulmuştur. Android 9, dokuz yeni işlemi destekleyerek API'yi genişletip iyileştiriyor:

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 iletmeniz gerekir.

Ayrıca API, ANEURALNETWORKS_TENSOR_FLOAT32 değerini IEEE 754 16 bit kayan nokta biçimi kadar düşük bir aralık ve hassasiyetle hesaplayıp hesaplamayacağınızı belirtmenize olanak tanıyan yeni bir ANeuralNetworksModel_relaxComputationFloat32toFloat16() işlevini 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 bir dizi güvenlik özelliği kullanıma sunulmuştur. Bu özellikler aşağıdaki bölümlerde özetlenmiştir:

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 beyan, 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 şifreli bir 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 tarafından oluşturulan anahtarı kullanabilir. İmza, kullanıcının ifadeyi gördüğünü ve kabul ettiğini büyük bir güvenle belirtir.

Dikkat: Android Korumalı Onayı, kullanıcı için güvenli bir bilgi kanalı sağlamaz. Uygulamanız, Android platformunun sunduklarının ötesinde herhangi bir gizlilik garantisini kabul edemez. Özellikle kullanıcının cihazında normalde göstermeyeceğiniz hassas bilgileri görüntülemek için bu iş akışını kullanmayın.

Android Korumalı Onayı için destek ekleme konusunda yardım almak istiyorsanız Android Korumalı Onayı kılavuzuna bakın.

Birleşik 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ıların, güvenilir bir biyometrik kimlik bilgisi denetleyicisine karşı kimlik doğrulaması yaptıkları konusunda daha fazla güven duymasını sağlar.

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 uyarlayacak ş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ünde yer alan 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ı.
  • Pakette izinsiz değişikliklere ve uygulamaların yetkisiz olarak başka cihazlardan yüklenmesine karşı koruma sağlayan ek mekanizmalar.

StrongBox Keymaster'da depolanan anahtarları kontrol ederken, sistem bir anahtarın bütünlüğünü Güvenilir Yürütme Ortamı (TEE) ile doğrular.

Strongbox Keymaster'ı kullanma hakkında daha fazla bilgi için Donanım Güvenlik Modülü'ne 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 ek anahtar şifre çözme 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 şifrelenmemiş metin olarak görünmez.

Şifrelenmiş anahtarları daha güvenli bir ş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ının 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çık cihazlarda izin verme seçeneği

Android 9'da unlockedDeviceRequired bayrağını kullanıma sunduk. Bu seçenek, Anahtar Deposu'nun belirtilen anahtar kullanılarak aktarım halindeki veya depolanan verilerin ş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 depolanmak üzere ş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 yöntemini 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 gelen 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 getireceğiniz hakkında daha fazla bilgi edinmek için Android Geliştiricileri için Güvenlik bölümüne bakın.

WPS'nin kullanımdan kaldırılması

Wi-Fi 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:

Bu gizlilik önlemi etkinleştirildiğinde kullanıcının cihazı tarafından yapılan 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 Apps Kasası Hizmeti teknik belgesini inceleyin.

Yedekleme için gereken cihaz koşullarını tanımlayın

Uygulama verileriniz hassas bilgiler veya tercihler içeriyorsa Android 9, istemci tarafı şifrelemenin etkinleştirilmesi veya yerel cihazlardan cihaza aktarım yapılması gibi durumlarda uygulama verilerinizin kullanıcının yedeklemesine 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ış sayfasına göz atın.

Erişilebilirlik

Android 9, uygulamanızın kullanıcılarına daha da iyi deneyimler sunmanızı kolaylaştıran erişilebilirlik çerçevesine iyileştirmeler getiriyor.

Gezinme anlamları

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 gezinmesine 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, ekranın belirli bir bölmesinin ne zaman güncellendiğini (örneğin, bir etkinliğin bir parçayı 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 ilişkili kullanıcı arayüzü öğelerinden oluşur.

Android 9'da, bu bölmeler için erişilebilirlik bölmesi başlıkları veya bireysel olarak tanımlanabilir başlıklar sağlayabilirsiniz. Bir bölmenin 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ı bilgiler sunması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ız mantıksal başlıklar içeren metin içeriği gösteriyorsa 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ü gezinme deneyimini iyileştirmek için bu özellikten yararlanabilir.

Grupta gezinme ve çıkış

Ekran okuyucular bir ViewGroup veya View nesne koleksiyonunu ne zaman tek bir birim olarak okuyacaklarını belirlemek için geleneksel olarak android:focusable özelliğini kullanırlar. Bu şekilde, kullanıcılar görüntülemelerin 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 öğesi de odaklanılabilir olarak işaretlemeniz gerekir. Bu düzenleme, bazı View örneklerinin klavyeyle gezinmeyi daha zahmetli hale getirecek şekilde odaklanabilir bir şekilde 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 öğesi true olarak ayarlanmış tüm öğelere yerleştirir.

Kolaylık işlemleri

Android 9, kullanıcılar adına kolaylık sağlayacak işlemler yapma desteği ekliyor:

İpuçlarıyla etkileşim
Erişilebilirlik çerçevesine eklenen özellikler, bir uygulamanın kullanıcı arayüzündeki ipuçlarına erişmenizi sağlar. İpucu metnini okumak için getTooltipText() simgesini, View örneklerini göstermek veya gizlemek için ACTION_SHOW_TOOLTIP ve ACTION_HIDE_TOOLTIP araçlarını kullanın.
Eklenen genel işlemler
Android 9, AccessibilityService sınıfında iki yeni cihaz işlemi için destek sunuyor. Hizmetiniz, kullanıcıların sırasıyla GLOBAL_ACTION_LOCK_SCREEN ve GLOBAL_ACTION_TAKE_SCREENSHOT işlemlerini kullanarak cihazlarını kilitlemelerine ve ekran görüntüleri almalarına yardımcı olabilir.

Pencere değişikliği ayrıntıları

Android 9, bir uygulama aynı anda birden çok pencereyi yeniden çizdiğinde uygulamaların pencerelerindeki güncellemeleri takip etmeyi 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 uygulama View nesneleri için erişilebilirlik bölmesi başlıkları 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ğunu veya bir bölmenin ne zaman 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 döndürmeyi manuel olarak tetikleyebilir.

Uygulamalar için uyumluluk üzerindeki etkileri, çoğu durumda minimum düzeydedir. Ancak, uygulamanızda özelleştirilmiş döndürme davranışı varsa veya alışılmadık ekran yönü ayarları kullanıyorsa kullanıcı rotasyonu tercihi her zaman dikey olarak ayarlıyken daha önce fark edilemeyen sorunlarla karşılaşabilirsiniz. Uygulamanızın tüm önemli etkinliklerinde döndürme davranışına bakmanızı ve tüm ekran yönü ayarlarınızın hâlâ en iyi deneyimi sağladığından emin olmanızı öneririz.

Daha fazla bilgi için ilgili davranış değişikliklerine bakın.

Kullanıcıların rotasyonu manuel olarak tetiklemesine olanak tanıyan yeni rotasyon modunu gösteren döndürme mobil

Yeni rotasyon modu, kullanıcıların gerektiğinde sistem çubuğundaki bir düğmeyi kullanarak döndürmeyi manuel olarak tetiklemesini sağlar.

Text

Android 9, metinle ilgili aşağıdaki özellikleri platforma getirir:

  • Önceden Hesaplanmış Metin: PrecomputedText sınıfı, gerekli bilgileri önceden hesaplamanızı ve önbelleğe almanızı sağlayarak metin oluşturma performansını iyileştirir. Ayrıca, uygulamanızın ana iş parçacığı dışında metin düzeni çalıştırmasını da sağlar.

  • Büyüteç: Magnifier sınıfı, büyüteç API'si sağlayarak tüm uygulamalarda tutarlı bir büyütme özelliği deneyimi sunan bir platform widget'ıdır.

  • Smart Linkify: Android 9, seçili metindeki ve önerilerde bazı varlıkları tespit etmek için makine öğreniminden yararlanan TextClassifier sınıfını geliştirir. Örneğin, TextClassifier, uygulamanızı kullanıcının bir telefon numarası seçtiğini algılayacak şekilde etkinleştirebilir. Ardından uygulamanız, kullanıcıya o numarayı kullanarak telefon etmesini önerebilir. TextClassifier ürünündeki özellikler Linkify sınıfının işlevlerinin yerini alır.

  • Metin Düzeni: Kolaylık sağlayan pek çok yöntem ve özellik, kullanıcı arayüzü tasarımınızı uygulamayı kolaylaştırır. Ayrıntılı bilgi için TextView referans dokümanlarına göz atın.

DEX dosyalarını önceden ART 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çimli (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 tüketmesini sağlar.

Bu iyileştirme özellikle daha düşük disk G/Ç hızlarına sahip düşük teknoloji cihazlara fayda sağlayacaktır.

Cihaz üzerinde sistem izleme

Android 9, cihazınızdan sistem izlerini kaydetmenize, ardından 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 iş parçacıklarıyla ilgili zamanlama verilerini yakalayabilir ve küresel olarak önemli olan diğer cihaz durumu türlerini görüntüleyebilirsiniz.

Bu araç hakkında daha fazla bilgi edinmek için Cihaz üzerinde sistem takibi yapma başlıklı makaleyi inceleyin.