Önceki sürümlerde olduğu gibi Android 17 de uygulamanızı etkileyebilecek davranış değişiklikleri içerir. 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 uygulamanızı, geçerli olduğu durumlarda bu davranışları destekleyecek şekilde 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.
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 yeni kilit içermeyen uygulaması
Android 17'den itibaren, Android 17'yi (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalar, android.os.MessageQueue için yeni bir kilit içermeyen uygulama alır. Yeni uygulama performansı artırır ve kaçırılan kare sayısını azaltır ancak MessageQueue özel alanlarını ve yöntemlerini yansıtan istemcilerin işleyişini bozabilir.
Azaltma stratejileri de dahil olmak üzere daha fazla bilgi için MessageQueue davranış değişikliği rehberi başlıklı makaleyi inceleyin.
Statik nihai alanlar artık değiştirilemiyor
Android 17 veya sonraki sürümlerde çalışan ve Android 17'yi (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalar static final alanlarını değiştiremez. Bir uygulama, yansıtma kullanarak static final alanını değiştirmeye çalışırsa IllegalAccessException hatasına neden olur. Bu alanlardan birini JNI API'leri (ör. SetStaticLongField()) aracılığıyla 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 yapar.
Karmaşık IME fiziksel klavye yazma özelliğinin erişilebilirlik desteği
Bu özellik, CJKV dil girişi için ekran okuyucu sözlü geri bildirimini iyileştirmek amacıyla yeni AccessibilityEvent ve TextAttribute API'leri sunar. CJKV IME uygulamaları artık metin oluşturma sırasında metin dönüştürme adayı seçilip seçilmediğini belirtebilir. Düzenleme alanları olan uygulamalar, metin değişikliğiyle ilgili 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 metin değişikliğinin bir commit işleminden kaynaklandığını belirtebilir.
Bu işlem, ekran okuyucular gibi erişilebilirlik hizmetlerinin metin değişikliğinin niteliğine göre daha hassas geri bildirimler vermesini sağlar.
Uygulama benimseme
IME Uygulamaları: IME'ler, düzenleme alanlarında metin oluştururken belirli bir dönüşüm adayının seçilip seçilmediğini belirtmek için
TextAttribute.Builder.setTextSuggestionSelected()kullanabilir.Alanları Düzenleme özelliğine sahip uygulamalar: Özel bir
InputConnectiontutan uygulamalar,TextAttribute.isTextSuggestionSelected()işlevini çağırarak aday seçimi verilerini alabilir. Bu uygulamalar,AccessibilityEvent.setTextChangeTypes()etkinliklerini gönderirkenTYPE_VIEW_TEXT_CHANGEDişlevini ç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 almayı ve erişilebilirlik hizmetlerine etkinlik gönderirken metin değişikliği türlerini ayarlamayı yönetir.)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()işlevini ç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ığı alanı 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ığı (ör. HttpEngine, WebView veya OkHttp) ECH desteğini entegre etmişse ve uzak sunucu da ECH protokolünü destekliyorsa etkindir. ECH anlaşması yapılamazsa istemci, rastgele içeriklere sahip bir ECH uzantısı gönderir (ECH GREASE adı verilen 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 izin vermek için Ağ Güvenliği Yapılandırma dosyasına yeni bir <domainEncryption> öğesi ekler.
Geliştiriciler, global veya alan başına ECH modu (örneğin, "enabled" veya "disabled") seçmek için <base-config> veya <domain-config> etiketlerinde <domainEncryption> kullanabilir.
Daha fazla bilgi için Şifrelenmiş İstemci Merhaba belgesine bakın.
Android 17'yi hedefleyen uygulamalar için yerel ağ izni gerekiyor
Android 17 引入了 ACCESS_LOCAL_NETWORK 运行时权限,以保护用户免遭未经授权的本地网络访问。由于此权限属于现有的 NEARBY_DEVICES 权限组,因此系统不会再次提示已授予其他 NEARBY_DEVICES 权限的用户。这项新要求可防止恶意应用利用不受限制的本地网络访问权限进行隐秘的用户跟踪和指纹识别。通过声明和请求此权限,您的应用可以发现并连接到局域网 (LAN) 中的设备,例如智能家居设备或投屏接收器。
以 Android 17(API 级别 37)或更高版本为目标平台的应用现在可以通过两种方式与 LAN 设备保持通信:采用系统介导的、可保护隐私的设备选择器来跳过权限提示,或者在运行时明确请求此新权限以保持本地网络通信。
如需了解详情,请参阅本地网络权限文档。
Şifreleri fiziksel cihazlardan gizleme
Android 17 (API düzeyi 37) veya sonraki sürümleri hedefleyen bir uygulamada 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. Bu ayar, varsayılan olarak tüm şifre karakterlerini gizler.
Android sistemi, kullanıcının şifreyi yanlış yazıp yazmadığını görmesine yardımcı olmak için en son yazılan şifre karakterini gösterir. Ancak bu, daha büyük harici klavyelerde çok daha az gereklidir. Ayrıca, harici klavyesi olan cihazlarda genellikle daha büyük ekranlar bulunur. Bu da yazılan şifrenin başkaları tarafından görülme tehlikesini artırır.
Kullanıcı cihazın dokunmatik ekranını kullanıyorsa sistem yeni show_passwords_touch ayarını uygular.
Standart SMS mesajları için tek kullanımlık şifre koruması
Android 17'den itibaren Android, SMS OTP korumasını WebOTP veya SMS Retriever biçimlerini kullanmayan OTP içeren SMS iletilerini kapsayacak şekilde genişletiyor. Android 17'yi (API düzeyi 37) veya sonraki sürümleri hedefleyen çoğu uygulamada bu SMS mesajları, alındıktan üç saat sonra kullanılabilir. Bu gecikme, tek kullanımlık şifrelerin ele geçirilmesini önlemeye yardımcı olmak için uygulanır. Bu üç saatlik gecikme süresinde SMS_RECEIVED_ACTION yayını bekletilir ve SMS sağlayıcı veritabanı sorguları filtrelenir. SMS mesajı, gecikmenin ardından bu uygulamalarda kullanılabilir.
Varsayılan SMS asistanı uygulaması ve bağlı cihaz yardımcı uygulamaları gibi belirli uygulamalar bu gecikmeden muaftır. OTP çıkarma için SMS mesajlarını okumaya dayalı tüm uygulamalar, işlevselliğin devam etmesini sağlamak için SMS Retriever veya SMS User Consent API'lerini kullanmaya geçmelidir.
Güvenlik
Android 17, cihaz ve uygulama güvenliğiyle ilgili aşağıdaki iyileştirmeleri sunar.
Etkinlik Güvenliği
在 Android 17 中,平台继续向“默认安全”架构转变,引入了一系列旨在缓解网络钓鱼、互动劫持和混淆代理攻击等高严重性漏洞的增强功能。此更新要求开发者明确选择启用新的安全标准,以保持应用兼容性和用户保护。
对开发者的主要影响包括:
- BAL 安全加固和改进的选择启用: 我们正在优化后台活动启动 (BAL) 限制,方法是将保护范围扩展到
IntentSender。开发者必须从旧版MODE_BACKGROUND_ACTIVITY_START_ALLOWED常量迁移。相反,您应 采用精细控制,例如MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE,它将 活动启动限制为调用应用可见的场景,从而显著 缩小攻击面。 - 采用工具: 开发者应利用严格模式和更新后的 lint 检查来识别旧版模式,并确保为未来的目标 SDK 要求做好准备。
CT'yi varsayılan olarak etkinleştirme
如果应用以 Android 17(API 级别 37)或更高版本为目标平台,则默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)
Safer Native DCL—C
Uygulamanız Android 17'yi (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 kapsıyor.
System.load() kullanılarak yüklenen tüm yerel dosyalar salt okunur olarak işaretlenmelidir.
Aksi takdirde sistem UnsatisfiedLinkError değerini döndürür.
Uygulamaların mümkün olduğunca dinamik olarak kod yüklemesini önermekteyiz. Aksi takdirde, uygulamanın kod yerleştirme veya kod kurcalama yoluyla güvenliğinin ihlal edilme riski büyük ölçüde artar.
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), kimliği tanımlayabilecek bilgiler (PII) içeren belirli sütunların veri görünümünde yer almasını 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 sütunlarını kullanan uygulamalar, RAW_CONTACT_ID ile birleştirerek ContactsContract.RawContacts sütunlarından bunları çıkarabilir.
CP2'de sıkı SQL kontrollerini zorunlu kılma
Android 17 (API düzeyi 37) ve sonraki sürümleri hedefleyen uygulamalarda, ContactsContract.Data tablosuna READ_CONTACTS izni olmadan erişildiğinde Contacts Provider 2 (CP2), 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. Bu biçimlerle uyumlu olmayan bir kalıp kullanan sorgular reddedilir ve istisna oluşturur.
Medya
Android 17, medya davranışıyla ilgili aşağıdaki değişiklikleri içerir.
Arka planda ses sağlamlaştırma
从 Android 17 开始,音频框架对后台音频互动(包括音频播放、音频焦点请求和音量更改 API)强制执行限制,以确保这些更改是由用户有意启动的。
部分音频限制适用于所有应用。不过,如果应用以 Android 17(API 级别 37)为目标平台,则限制会更加严格。如果这些应用在后台运行时与音频互动,则必须有前台服务正在运行。此外,应用还必须满足以下一项或两项要求:
- 前台服务必须具有仅在使用时授予的权限 (WIU)。
- 应用必须具有精确闹钟权限,并且正在与
USAGE_ALARM音频流互动。
如需了解详情(包括缓解措施),请参阅后台音频安全加固。
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>=600dp) yön, yeniden boyutlandırma ve en-boy oranı kısıtlamalarını yoksaymak için platform API'sinde yapılan değişiklikler
Android 16'da, API düzeyi 36 veya daha yüksek sürümleri hedefleyen uygulamalar için büyük ekranlarda (sw >= 600 dp) yön, en-boy oranı ve yeniden boyutlandırma kısıtlamalarını yoksaymak amacıyla Platform API değişiklikleri yaptık. Geliştiriciler, SDK 36 ile bu değişiklikleri devre dışı bırakabilir. Ancak bu devre dışı bırakma seçeneği, Android 17'yi (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalarda artık kullanılamayacaktır.
Daha fazla bilgi için Yön ve yeniden boyutlandırma kısıtlamaları yoksayılır başlıklı makaleyi inceleyin.
Bağlantı
Android 17, tutarlılığı artırmak ve Bluetooth RFCOMM soketleri için standart Java InputStream davranışı ile 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'den alınan InputStream'ün read() yöntemi artık soket kapatıldığında veya bağlantı kesildiğinde -1 değerini döndürüyor.
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() belgeleriyle uyumlu hale getirir.
Bir 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üncellemeleri gerekir. Bu, uzak cihazın bağlantısı kesildiğinde veya soket kapatıldığında döngünün doğru şekilde sonlanmasını sağlar. Önerilen uygulamanın bir örneği için Bluetooth verilerini aktarma kılavuzundaki kod snippet'ine bakın.