Önceki sürümlerde olduğu gibi Android 17'de de uygulamanızı etkileyebilecek davranış değişiklikleri vardır. Aşağıdaki davranış değişiklikleri yalnızca Android 17 veya sonraki sürümleri hedefleyen uygulamalar için geçerlidir. Uygulamanız Android 17 veya sonraki sürümleri hedefliyorsa geçerli olduğu durumlarda bu davranışları destekleyecek şekilde uygulamanızı değiştirmeniz gerekir.
Uygulamanızın targetSdkVersion değerinden bağımsız olarak Android 17'de çalışan tüm uygulamaları etkileyen davranış değişiklikleri listesini de inceleyin.
Kullanıcı deneyimi ve sistem arayüzü
Android 17, daha tutarlı ve sezgisel bir kullanıcı deneyimi sunmak için aşağıdaki değişiklikleri içerir.
Bellek sınırı widget'ı
Android 17'den itibaren, Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalarda sistem, RemoteViews paketinde bulunan hem bitmap'lerin hem de simgelerin toplam bellek kullanımı için katı bir bellek sınırı (1,5 * ekran genişliği * ekran yüksekliği * 4) uygular. Bu sınırların aşılması, önemli bir IllegalArgumentException hatasına neden olur ve uygulamanın işlemini kilitler.
Daha fazla bilgi için UpdateAppWidget başlıklı makaleyi inceleyin.
Temel işlevler
Android 17, Android sisteminin çeşitli temel özelliklerini değiştiren veya genişleten aşağıdaki değişiklikleri içerir.
MessageQueue'nun kilitsiz yeni uygulaması
Android 17'den itibaren, Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalar, android.os.MessageQueue için yeni bir kilitsiz uygulama alır. Yeni uygulama, performansı artırır ve kaçırılan kareleri azaltır ancak MessageQueue özel alanlarını ve yöntemlerini yansıtan istemcileri bozabilir.
Azaltma stratejileri de dahil olmak üzere daha fazla bilgi için MessageQueue davranış değişikliği kılavuzunu inceleyin.
Statik final alanları artık değiştirilemez
Android 17 veya sonraki sürümleri hedefleyen ve Android 17 ya da sonraki sürümlerde çalışan uygulamalar static final alanlarını değiştiremez. Bir uygulama, yansıma kullanarak static final alanını değiştirmeye çalışırsa IllegalAccessException hatasına neden olur. JNI API'leri (ör. SetStaticLongField()) aracılığıyla bu alanlardan birini değiştirmeye çalışmak uygulamanın kilitlenmesine neden olur.
Erişilebilirlik
Android 17, erişilebilirliği iyileştirmek için aşağıdaki değişiklikleri içerir.
Karmaşık IME fiziksel klavye yazma için erişilebilirlik desteği
Bu özellik, CJKV dillerinde giriş için ekran okuyucu sözlü geri bildirimini iyileştiren yeni AccessibilityEvent ve TextAttribute API'lerini kullanıma sunar. CJKV IME uygulamaları artık metin oluşturma sırasında bir metin dönüştürme adayının seçilip seçilmediğini bildirebilir. Düzenleme alanları olan uygulamalar, metin değişikliği erişilebilirlik etkinlikleri gönderirken metin değişikliği türlerini belirtebilir.
Örneğin, uygulamalar metin oluşturma sırasında bir metin değişikliği olduğunu veya bir metin değişikliğinin bir kaydetme işleminden kaynaklandığını belirtebilir.
Bunu yaptığınızda, ekran okuyucular gibi erişilebilirlik hizmetleri, metin değişikliğinin niteliğine göre daha kesin geri bildirimler sunabilir.
Uygulama benimseme
IME Uygulamaları: IME'ler, düzenleme alanlarında oluşturma metni ayarlarken belirli bir dönüşüm adayının seçilip seçilmediğini belirtmek için
TextAttribute.Builder.setTextSuggestionSelected()kullanabilir.Düzenleme alanları olan uygulamalar: Özel bir
InputConnectionkullanan uygulamalar,TextAttribute.isTextSuggestionSelected()yöntemini çağırarak aday seçim verilerini alabilir. Bu uygulamalar,TYPE_VIEW_TEXT_CHANGEDetkinliklerini gönderirkenAccessibilityEvent.setTextChangeTypes()yöntemini çağırmalıdır. StandartTextViewkullanan ve Android 17'yi (API düzeyi 37) hedefleyen uygulamalarda bu özellik varsayılan olarak etkinleştirilir. (YaniTextView, IME'den veri alma ve erişilebilirlik hizmetlerine etkinlik gönderirken metin değişikliği türlerini ayarlama işlemlerini gerçekleştirir.)Erişilebilirlik Hizmetleri:
TYPE_VIEW_TEXT_CHANGEDetkinliklerini işleyen erişilebilirlik hizmetleri, değişikliğin niteliğini belirlemek ve geri bildirim stratejilerini buna göre ayarlamak içinAccessibilityEvent.getTextChangeTypes()yöntemini çağırabilir.
Gizlilik
Android 17, kullanıcı gizliliğini iyileştirmek için aşağıdaki değişiklikleri içerir.
ECH (Encrypted Client Hello) etkinleştirildi
Android 17, TLS el sıkışmasında Sunucu Adı Göstergesi'ni (SNI) şifreleyerek kullanıcı gizliliğini artıran bir TLS uzantısı olan Encrypted Client Hello (ECH) için platform desteği sunar. Bu şifreleme, ağ gözlemcilerinin uygulamanızın bağlandığı belirli alan adını kolayca tanımlamasını önlemeye yardımcı olur.
Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalarda TLS bağlantıları için ECH kullanılır. ECH yalnızca uygulama tarafından kullanılan ağ kitaplığında (ör. HttpEngine, WebView veya OkHttp) entegre ECH desteği varsa ve uzak sunucu da ECH protokolünü destekliyorsa etkin olur. ECH üzerinde anlaşmaya varılamazsa istemci, rastgele içeriklere sahip bir ECH uzantısı gönderir (ECH GREASE adlı bir mekanizma). ECH GREASE'in işleyiş şekli hakkında daha fazla bilgi için RFC 9849'u inceleyin.
Android 17, uygulamaların bu davranışı özelleştirmesine olanak tanımak için Ağ Güvenliği Yapılandırması dosyasına yeni bir <domainEncryption> öğesi ekler.
Geliştiriciler, global veya alan bazında bir ECH modu (ör. "enabled" veya "disabled") seçmek için <base-config> veya <domain-config> etiketleri içinde <domainEncryption> kullanabilir.
Daha fazla bilgi için Encrypted Client Hello belgelerine bakın.
Android 17'yi hedefleyen uygulamalar için yerel ağ izni gerekiyor
Android 17, kullanıcıları yetkisiz yerel ağ erişiminden korumak için ACCESS_LOCAL_NETWORK çalışma zamanında istenen iznini kullanıma sunuyor. Bu izin mevcut NEARBY_DEVICES izin grubuna dahil olduğundan, diğer NEARBY_DEVICES izinlerini zaten vermiş olan kullanıcılardan tekrar izin istenmez. Bu yeni şart, kötü amaçlı uygulamaların gizli kullanıcı takibi ve dijital parmak izi oluşturma için kısıtlanmamış yerel ağ erişimini kötüye kullanmasını engeller. Bu izni beyan edip talep ederek uygulamanız, yerel ağdaki (LAN) akıllı ev cihazları veya yayın alıcıları gibi cihazları bulup bunlara bağlanabilir.
Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalar artık LAN cihazlarıyla iletişimi sürdürmek için iki yönteme sahiptir: İzin istemini atlamak için sistem tarafından yönetilen, gizliliği korumaya yönelik cihaz seçicileri kullanmak veya yerel ağ iletişimini sürdürmek için çalışma zamanında bu yeni izni açıkça istemek.
Daha fazla bilgi için Yerel ağ izni belgelerini inceleyin.
Şifreleri fiziksel cihazlardan gizleme
Bir uygulama Android 17 (API düzeyi 37) veya sonraki sürümleri hedefliyorsa ve kullanıcı fiziksel bir giriş cihazı (ör. harici klavye) kullanıyorsa Android işletim sistemi, şifre alanındaki tüm karakterlere yeni show_passwords_physical ayarını uygular. Varsayılan olarak bu ayar tüm şifre karakterlerini gizler.
Android sistemi, kullanıcının şifreyi yanlış yazıp yazmadığını görmesine yardımcı olmak için şifrenin son yazılan karakterini gösterir. Ancak daha büyük harici klavyelerde buna pek gerek yoktur. Ayrıca, harici klavyesi olan cihazların ekranları genellikle daha büyük olduğundan, yazılan şifrenin başkaları tarafından görülme riski daha yüksektir.
Kullanıcı cihazın dokunmatik ekranını kullanıyorsa sistem yeni show_passwords_touch ayarını uygular.
Standart SMS mesajları için OTP koruması
Android 17'den itibaren Android, SMS OTP korumasını standart SMS mesajlarına (WebOTP veya SMS Retriever formatlarını kullanmayan, OTP içeren SMS mesajları) uygulayacak şekilde genişletiyor. Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen çoğu uygulamada bu SMS mesajları, alındıktan üç saat sonra kullanılabilir hale gelir. Bu gecikme, OTP'nin ele geçirilmesini önlemeye yardımcı olmak için uygulanır. Bu üç saatlik gecikme sırasında SMS_RECEIVED_ACTION yayını bekletilir ve SMS sağlayıcı veritabanı sorguları filtrelenir. SMS mesajı, gecikmeden sonra bu uygulamalar tarafından kullanılabilir.
Varsayılan SMS asistan uygulaması, bağlı cihaz tamamlayıcı uygulamaları gibi belirli uygulamalar bu gecikmeden muaftır. OTP'yi ayıklamak için SMS mesajlarını okumaya dayalı tüm uygulamalar, işlevlerin devam etmesi için SMS Retriever veya SMS Kullanıcı Rızası API'lerini kullanmaya geçmelidir.
Güvenlik
Android 17, cihaz ve uygulama güvenliğinde aşağıdaki iyileştirmeleri sunar.
Etkinlik Güvenliği
Android 17'de platform, "tasarımdan başlayan güvenlik" mimarisine geçişini sürdürerek kimlik avı, etkileşim ele geçirme ve şaşkın vekil saldırıları gibi yüksek önem derecesine sahip güvenlik açıklarını azaltmak için tasarlanmış bir dizi iyileştirme sunuyor. Bu güncelleme, geliştiricilerin uygulama uyumluluğunu ve kullanıcı korumasını sürdürmek için yeni güvenlik standartlarını açıkça kabul etmesini gerektirir.
Geliştiriciler için önemli etkiler şunlardır:
- BAL güçlendirme ve iyileştirilmiş etkinleştirme: Korumaları
IntentSendersürümüne genişleterek Arka Plan Etkinliği Başlatma (BAL) kısıtlamalarını iyileştiriyoruz. Geliştiriciler, eskiMODE_BACKGROUND_ACTIVITY_START_ALLOWEDsabitinden geçiş yapmalıdır. Bunun yerine, etkinlik başlatma işlemlerini arama uygulamasının görünür olduğu senaryolarla sınırlayarak saldırı yüzeyini önemli ölçüde azaltanMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLEgibi ayrıntılı kontrolleri kullanmanız gerekir. - Kullanım araçları: Geliştiriciler, eski kalıpları belirlemek ve gelecekteki hedef SDK şartlarına hazır olmak için yüksek düzey modu ve güncellenmiş lint kontrollerini kullanmalıdır.
CT'yi varsayılan olarak etkinleştir
Bir uygulama Android 17'yi (API düzeyi 37) veya sonraki sürümleri hedefliyorsa sertifika şeffaflığı (CT) varsayılan olarak etkinleştirilir. (Android 16'da CT kullanılabilir ancak uygulamaların etkinleştirmesi gerekir.)
Daha Güvenli Yerel DCL - C
Uygulamanız Android 17 (API düzeyi 37) veya sonraki sürümleri hedefliyorsa Android 14'te DEX ve JAR dosyaları için kullanıma sunulan Daha Güvenli Dinamik Kod Yükleme (DCL) koruması artık yerel kitaplıkları da kapsar.
System.load() kullanılarak yüklenen tüm yerel dosyalar salt okunur olarak işaretlenmelidir.
Aksi takdirde sistem UnsatisfiedLinkError hatası verir.
Uygulamaların mümkün olduğunca dinamik olarak kod yüklemekten kaçınmasını öneririz. Bu işlem, uygulamanın kod yerleştirme veya kodda değişiklik yapma yoluyla güvenliğinin ihlal edilme riskini büyük ölçüde artırır.
CP2 veri görünümünde kimliği tanımlayabilecek bilgi (PII) alanlarını kısıtlama
Android 17 (API düzeyi 37) ve sonraki sürümleri hedefleyen uygulamalarda Contacts Provider 2 (CP2), kişisel veri (PII) içeren belirli sütunları veri görünümünden kısıtlar. Bu değişiklik etkinleştirildiğinde, kullanıcı gizliliğini artırmak için bu sütunlar veri görünümünden kaldırılır. Kısıtlanmış sütunlar şunlardır:
ContactsContract.Data tablosundaki bu sütunları kullanan uygulamalar, RAW_CONTACT_ID ile birleştirerek bu sütunları ContactsContract.RawContacts tablosundan çıkarabilir.
CP2'de katı SQL kontrollerini zorunlu kıl
Android 17 (API düzeyi 37) ve sonraki sürümleri hedefleyen uygulamalarda Contacts Provider 2 (CP2), ContactsContract.Data tablosuna READ_CONTACTS izni olmadan erişildiğinde katı SQL sorgusu doğrulaması uygular.
Bu değişiklikle birlikte, bir uygulamanın READ_CONTACTS izni yoksa ContactsContract.Data tablosu sorgulanırken StrictColumns ve StrictGrammar seçenekleri ayarlanır. Sorgu, bunlarla uyumlu olmayan bir kalıp kullanıyorsa reddedilir ve bir istisna oluşturulur.
Intelligence
Android 17, sistem zekasında aşağıdaki değişiklikleri içerir.
setContentCaptureEnabled desteğinin sonlandırılması
İçerik Yakalama, cihaz üzerinde yapay zeka özelliklerinin akıllı deneyimler için ekran içeriklerini analiz etmesine olanak tanımak amacıyla belirli cihazlarda varsayılan olarak etkindir.
Android 17'den itibaren ContentCaptureManager.setContentCaptureEnabled(boolean) API yöntemi kullanımdan kaldırılmıştır. Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalarda setContentCaptureEnabled(false) çağrısı artık içerik yakalamayı devre dışı bırakmaz.
Uygulamanızın, İçerik Yakalama'yı devre dışı bırakmaya devam etmesi veya ekran içeriklerinin sistem tarafından yakalanmasını kısıtlaması gerekiyorsa FLAG_SECURE pencere düzeni parametresini kullanmaya geçmeniz gerekir.
İçerik Yakalama'yı devre dışı bırakmak için pencerenizde FLAG_SECURE işaretini aşağıdaki örnekte gösterildiği gibi ayarlayın:
Kotlin
window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
Java
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
Daha fazla bilgi için WindowManager.LayoutParams.FLAG_SECURE referans dokümanlarını inceleyin.
Medya
Android 17, medya davranışında aşağıdaki değişiklikleri içerir.
Arka planda ses güçlendirme
Android 17'den itibaren ses çerçevesi, ses çalma, ses odağı istekleri ve ses seviyesi değiştirme API'leri dahil olmak üzere arka plandaki ses etkileşimlerine kısıtlamalar getirerek bu değişikliklerin kullanıcı tarafından bilinçli olarak başlatılmasını sağlar.
Bazı ses kısıtlamaları tüm uygulamalar için geçerlidir. Ancak Android 17'yi (API düzeyi 37) hedefleyen uygulamalarda kısıtlamalar daha katıdır. Bu uygulamalardan biri arka plandayken sesle etkileşim kuruyorsa ön plan hizmeti çalışıyor olmalıdır. Ayrıca, uygulamanın aşağıdaki şartlardan birini veya her ikisini karşılaması gerekir:
- Ön plan hizmeti, kullanım sırasında (WIU) özelliklerine sahip olmalıdır.
- Uygulama, kesin zamanlı alarm iznine sahip olmalı ve
USAGE_ALARMses akışlarıyla etkileşimde bulunmalıdır.
Azaltma stratejileri de dahil olmak üzere daha fazla bilgi için Arka plan sesini güçlendirme başlıklı makaleyi inceleyin.
Cihaz form faktörleri
Android 17, çeşitli cihaz boyutları ve form faktörlerinde kullanıcı deneyimini iyileştirmek için aşağıdaki değişiklikleri içerir.
Büyük ekranlarda (sw>=600 dp) yön, yeniden boyutlandırılabilirlik ve en-boy oranı kısıtlamalarını yoksaymak için platform API'sinde yapılan değişiklikler
API düzeyi 36 veya sonraki sürümleri hedefleyen uygulamalar için Android 16'da platform API değişiklikleri yaparak büyük ekranlarda (sw >= 600 dp) yön, yeniden boyutlandırılabilirlik ve en-boy oranı kısıtlamalarını yoksaydık. Geliştiriciler, SDK 36 ile bu değişikliklerin kapsamı dışında kalmayı seçebilir ancak Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalarda bu kapsam dışında kalma seçeneği artık kullanılamayacaktır.
Daha fazla bilgi için Yön ve yeniden boyutlandırılabilirlikle ilgili kısıtlamalar yoksayılır bölümüne bakın.
Bağlantı
Android 17, Bluetooth RFCOMM soketleri için tutarlılığı artırmak ve standart Java InputStream davranışıyla uyumlu hale getirmek amacıyla aşağıdaki değişikliği sunar.
RFCOMM için tutarlı BluetoothSocket read() davranışı
Android 17'yi (API düzeyi 37) hedefleyen uygulamalarda, RFCOMM tabanlı BluetoothSocket'ten alınan InputStream'nin read() yöntemi, soket kapatıldığında veya bağlantı kesildiğinde -1 değerini döndürür.
Bu değişiklik, RFCOMM soket davranışını LE CoC soketleriyle tutarlı hale getirir ve akışın sonuna ulaşıldığında -1 değerinin döndürüldüğünü belirten standart InputStream.read() dokümanlarıyla uyumludur.
Okuma döngüsünden çıkmak için yalnızca IOException'ı yakalamaya dayanan uygulamalar bu değişiklikten etkilenebilir ve BluetoothSocket okuma döngülerini -1 dönüş değerini açıkça kontrol edecek şekilde güncellemelidir. Bu sayede, uzak cihazın bağlantısı kesildiğinde veya soket kapatıldığında döngü doğru şekilde sonlandırılır. Önerilen uygulamanın bir örneği için Bluetooth verilerini aktarma kılavuzundaki kod snippet'ine bakın.