Davranış değişiklikleri: Android 17 veya sonraki sürümleri hedefleyen uygulamalar

Ö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

此功能引入了新的 AccessibilityEventTextAttribute API,以增强屏幕阅读器针对 CJKV 语言输入的语音反馈。CJKV IME 应用现在可以指示在文本撰写期间是否已选择文本转换候选内容。具有编辑字段的应用可以在发送文本更改无障碍事件时指定文本更改类型。例如,应用可以指定在文本撰写期间发生了文本更改,或者文本更改是由提交导致的。这样做可让屏幕阅读器等无障碍服务根据文本修改的性质提供更精确的反馈。

应用采用量

  • IME 应用:在编辑字段中设置正在撰写的文本时,IME 可以使用 TextAttribute.Builder.setTextSuggestionSelected() 来指明是否选择了特定的转换候选对象。

  • 具有“编辑字段”权限的应用:维护自定义 InputConnection 的应用可以通过调用 TextAttribute.isTextSuggestionSelected() 来检索候选选择数据。然后,这些应用在调度 TYPE_VIEW_TEXT_CHANGED 事件时应调用 AccessibilityEvent.setTextChangeTypes()。如果应用以 Android 17(API 级别 37)为目标平台,并使用标准 TextView,则默认启用此功能。(也就是说,TextView 将负责从 IME 检索数据,并在向无障碍服务发送事件时设置文本更改类型)。

  • 无障碍服务:处理 TYPE_VIEW_TEXT_CHANGED 事件的无障碍服务可以调用 AccessibilityEvent.getTextChangeTypes() 来识别修改的性质,并相应地调整其反馈策略。

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 开始,Android 将扩展其短信验证码保护功能,以适用于标准短信(包含验证码但不使用 WebOTP 或 SMS Retriever 格式的短信)。对于以 Android 17(API 级别 37)或更高版本为目标平台的应用,这些短信在收到后三小时内不会提供。此延迟旨在帮助防止动态密码劫持。在这三小时的延迟期间,系统会保留 SMS_RECEIVED_ACTION广播,并过滤 短信提供商数据库查询。延迟结束后,这些应用即可使用短信。

某些应用(例如默认短信助理应用、已连接的设备配套应用等)不受此延迟限制。所有依赖于读取短信 来提取动态密码的应用都应改用 SMS RetrieverSMS User Consent API,以确保功能持续可用。

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 eski MODE_BACKGROUND_ACTIVITY_START_ALLOWED sabitinden geçiş yapması gerekir. Bunun yerine, MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE gibi 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(API 级别 37)或更高版本为目标平台,则默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)

Safer Native DCL—C

如果您的应用以 Android 17(API 级别 37)或更高版本为目标平台,则 Android 14 中针对 DEX 和 JAR 文件引入的更安全的动态代码加载 (DCL) 保护功能现在也适用于原生库。

使用 System.load() 加载的所有原生文件都必须标记为只读。否则,系统会抛出 UnsatisfiedLinkError

我们建议应用尽可能避免动态加载代码,因为这样做会大大增加应用因代码注入或代码篡改而遭到入侵的风险。

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.