Ö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 开始,以 Android 17(API 级别 37)
或更高版本为目标平台的应用会收到
android.os.MessageQueue 的新无锁实现。新实现可提升性能并减少丢帧,但可能会破坏反映 MessageQueue 私有字段和方法的客户端。
如需了解详情(包括缓解措施),请参阅 MessageQueue 行为变更指南。
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, kullanıcıları yetkisiz yerel ağ erişimine karşı korumak için ACCESS_LOCAL_NETWORK çalışma zamanında istenen izni kullanıma sunar. Bu izin, mevcut NEARBY_DEVICES izin grubu kapsamında olduğundan diğer NEARBY_DEVICES izinleri daha önce 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 sınırsız yerel ağ erişiminden yararlanmasını engeller. Bu izni bildirip isteyerek uygulamanız, yerel alan ağındaki (LAN) cihazları (ör. akıllı ev cihazları veya yayın alıcılar) keşfedip 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 yola sahip: İzin istemini atlamak için sistem aracılı, gizliliği korumaya yönelik cihaz seçicileri kullanın veya yerel ağ iletişimini sürdürmek için bu yeni izni çalışma zamanında açıkça isteyin.
Daha fazla bilgi için Yerel ağ izni dokümanlarını inceleyin.
Ş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'de platform, "varsayılan olarak güvenli" bir mimariye geçişini sürdürüyor. Bu kapsamda, kimlik avı, etkileşim ele geçirme ve confused deputy saldırıları gibi yüksek düzeyde ciddi güvenlik açıklarını azaltmak için tasarlanmış bir dizi iyileştirme sunuluyor. Bu güncelleme, uygulama uyumluluğunu ve kullanıcı korumasını sürdürmek için geliştiricilerin yeni güvenlik standartlarını açıkça etkinleştirmesini gerektirir.
Geliştiriciler için önemli etkiler:
- BAL'ı sağlamlaştırma ve gelişmiş etkinleştirme: Korumaları
IntentSender'a genişleterek Arka Plan Etkinliği Başlatma (BAL) kısıtlamalarını iyileştiriyoruz. Geliştiricilerin eskiMODE_BACKGROUND_ACTIVITY_START_ALLOWEDsabitinden geçiş yapması gerekir. Bunun yerine,MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLEgibi ayrıntılı denetimleri kullanmanız gerekir. Bu denetim, etkinlik başlatma işlemlerini arayan uygulamanın görünür olduğu senaryolarla kısıtlayarak saldırı yüzeyini önemli ölçüde azaltır. - Adaptasyon araçları: Geliştiriciler, eski kalıpları belirlemek ve gelecekteki hedef SDK şartlarına hazırlıklı olmak için yüksek düzey modu ve güncellenmiş hata analizi kontrollerini kullanmalıdır.
CT'yi varsayılan olarak etkinleştirme
Android 17'yi (API düzeyi 37) veya sonraki sürümleri hedefleyen uygulamalarda sertifika şeffaflığı (CT) varsayılan olarak etkindir. (Android 16'da CT kullanılabilir ancak uygulamaların kaydolması gerekir.)
Safer Native DCL—C
If your app targets Android 17 (API level 37) or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries.
All native files loaded using System.load() must be marked as read-only.
Otherwise, the system throws UnsatisfiedLinkError.
We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.
CP2 veri görünümünde kimliği tanımlayabilecek bilgi (PII) alanlarını kısıtlama
对于以 Android 17(API 级别 Android 17(API 级别 37))及更高版本为目标平台的应用,联系人提供程序 2 (CP2) 会限制数据视图中包含某些个人身份信息 (PII) 的列。启用此变更后,这些列将从数据视图中移除,以增强用户隐私保护。 受限列包括:
如果应用正在使用 ContactsContract.Data
中的这些列,则可以通过与 RAW_CONTACT_ID 联接,改为从 ContactsContract.RawContacts
中提取这些列。
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'den itibaren ses çerçevesi, bu değişikliklerin kullanıcı tarafından kasıtlı olarak başlatılmasını sağlamak için ses çalma, ses odağı istekleri ve ses seviyesi değişikliği API'leri dahil olmak üzere arka plandaki ses etkileşimleriyle ilgili kısıtlamalar uygular.
Tüm uygulamalar için geçerli olan bazı ses kısıtlamaları vardır. Ancak bir uygulama Android 17'yi (API düzeyi 37) hedefliyorsa kısıtlamalar daha katıdır. Bu uygulamalardan biri arka plandayken sesle etkileşimde bulunuyorsa ön plan hizmeti çalıştırıyor olmalıdır. Ayrıca, uygulama aşağıdaki koşullardan birini veya her ikisini de karşılamalıdır:
- Ön plan hizmeti, kullanım sırasında (WIU) özelliklerine sahip olmalıdır.
- Uygulamada tam alarm izni olmalı ve
USAGE_ALARMses akışlarıyla etkileşimde bulunulmalıdır.
Azaltma stratejileri de dahil olmak üzere daha fazla bilgi için Arka planda ses sağlamlaştırma 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>=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 中引入了平台 API 变更,以 忽略屏幕方向、 宽高比和尺寸调整能力限制(针对大型屏幕,sw >= 600dp),适用于面向 API 级别 36 或更高级别的应用。开发者可以选择使用 SDK 36 退出这些变更,但对于面向 Android 17(API 级别 37)或更高级别的应用,此退出选项将不再可用。
如需了解详情,请参阅忽略屏幕方向和尺寸调整能力限制。
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(API 级别 37)为目标平台的应用,
read() 方法从InputStream 获取的
基于 RFCOMM 的 BluetoothSocket 现在会在
套接字关闭或连接断开时返回 -1。
此更改使 RFCOMM 套接字行为与 LE CoC 套接字保持一致,并与标准 InputStream.read()
文档保持一致,该文档指出,当到达流的末尾时,系统会返回 -1。
仅依赖于捕获 IOException 以跳出读取循环的应用可能会受到此更改的影响,并且应更新 BluetoothSocket 读取循环以明确检查返回值 -1。这可确保在远程设备断开连接或套接字关闭时,循环正确终止。如需查看推荐的实现示例,请参阅传输蓝牙数据指南中的代码段。