Seperti rilis sebelumnya, Android 17 menyertakan perubahan perilaku yang mungkin memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku khusus bagi aplikasi yang menargetkan Android 17 atau yang lebih tinggi. Jika aplikasi Anda menargetkan Android 17 atau yang lebih tinggi, Anda harus memodifikasi aplikasi untuk mendukung perilaku ini, jika berlaku.
Pastikan Anda juga meninjau daftar perubahan perilaku yang memengaruhi semua aplikasi yang berjalan di Android 17, terlepas dari targetSdkVersion aplikasi Anda.
Fungsi inti
Android 17 mencakup perubahan berikut yang mengubah atau memperluas berbagai kemampuan inti sistem Android.
Implementasi MessageQueue bebas kunci baru
从 Android 17 开始,以 Android 17(API 级别 37)
或更高版本为目标平台的应用会收到
android.os.MessageQueue 的新无锁实现。新实现可提升性能并减少丢帧,但可能会破坏反映 MessageQueue 私有字段和方法的客户端。
如需了解详情(包括缓解措施),请参阅 MessageQueue 行为变更指南。
Kolom akhir statis kini tidak dapat diubah
在以 Android 17(API 级别 37)或更高版本为目标平台的 Android 17 或更高版本上运行的应用无法更改 static final 字段。如果应用尝试使用反射更改 static final 字段,则会导致 IllegalAccessException。尝试通过 JNI API(例如 SetStaticLongField())修改其中一个字段会导致应用崩溃。
Aksesibilitas
Android 17 melakukan perubahan berikut untuk meningkatkan aksesibilitas.
Dukungan aksesibilitas untuk pengetikan keyboard fisik IME yang kompleks
此功能引入了新的 AccessibilityEvent 和 TextAttribute 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()来识别修改的性质,并相应地调整其反馈策略。
Privasi
Android 17 menyertakan perubahan berikut untuk meningkatkan privasi pengguna.
ECH (Encrypted Client Hello) diaktifkan
Android 17 引入了对加密客户端问候 (ECH) 的平台支持。ECH 是一种 TLS 扩展,可通过加密 TLS 握手中的服务器名称指示 (SNI) 来增强用户隐私保护。这种加密有助于防止网络观察者轻松识别您的应用所连接的特定网域。
对于以 Android 17(API 级别 37)或更高版本为目标平台的应用,ECH 用于 TLS 连接。只有当应用使用的网络库(例如 HttpEngine、WebView 或 OkHttp)已集成 ECH 支持,并且远程服务器也支持 ECH 协议时,ECH 才会处于活跃状态。如果无法协商 ECH,客户端会发送一个包含随机内容的 ECH 扩展(一种称为 ECH GREASE 的机制)。如需详细了解 ECH GREASE 的工作原理,请参阅 RFC 9849。
为了让应用能够自定义此行为,Android 17 向网络安全配置文件添加了一个新的
<domainEncryption> 元素。
开发者可以在 <base-config> 或
<domain-config> 标记中使用 <domainEncryption>,以全局或按网域的方式选择 ECH 模式(例如
"enabled" 或 "disabled")。
如需了解详情,请参阅加密客户端问候文档。
Izin jaringan lokal diperlukan untuk aplikasi yang menargetkan Android 17
Android 17 memperkenalkan izin runtime ACCESS_LOCAL_NETWORK untuk melindungi pengguna dari akses jaringan lokal yang tidak sah. Karena izin ini termasuk dalam grup izin NEARBY_DEVICES yang ada, pengguna yang telah memberikan izin NEARBY_DEVICES lainnya tidak akan diminta lagi. Persyaratan
baru ini mencegah aplikasi berbahaya mengeksploitasi akses jaringan lokal yang tidak dibatasi untuk pelacakan dan pelacakan sidik jari pengguna secara diam-diam. Dengan mendeklarasikan dan meminta izin ini, aplikasi Anda dapat menemukan dan terhubung ke perangkat di jaringan area lokal (LAN), seperti perangkat smart home atau penerima transmisi.
Aplikasi yang menargetkan Android 17 (level API 37) atau yang lebih tinggi kini memiliki dua jalur untuk mempertahankan komunikasi dengan perangkat LAN: Menggunakan pemilih perangkat yang dimediasi sistem dan menjaga privasi untuk melewati perintah izin, atau secara eksplisit meminta izin baru ini saat runtime untuk mempertahankan komunikasi jaringan lokal.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi Izin jaringan lokal.
Menyembunyikan sandi dari perangkat fisik
Jika aplikasi menargetkan Android 17 (level API 37) atau yang lebih tinggi dan pengguna menggunakan
perangkat input fisik (misalnya, keyboard eksternal), sistem operasi Android
menerapkan setelan show_passwords_physical baru ke semua
karakter di kolom sandi. Secara default, setelan tersebut menyembunyikan semua karakter
sandi.
Sistem Android menampilkan karakter sandi yang terakhir diketik untuk membantu pengguna melihat apakah mereka salah mengetik sandi. Namun, hal ini tidak terlalu diperlukan dengan keyboard eksternal yang lebih besar. Selain itu, perangkat dengan keyboard eksternal sering kali memiliki layar yang lebih besar, sehingga meningkatkan bahaya seseorang melihat sandi yang diketik.
Jika pengguna menggunakan layar sentuh perangkat, sistem akan menerapkan setelan
show_passwords_touch baru.
Perlindungan OTP untuk pesan SMS standar
从 Android 17 开始,Android 将扩展其短信验证码保护功能,以适用于标准短信(包含验证码但不使用 WebOTP 或 SMS Retriever 格式的短信)。对于以 Android 17(API 级别 37)或更高版本为目标平台的应用,这些短信在收到后三小时内不会提供。此延迟旨在帮助防止动态密码劫持。在这三小时的延迟期间,系统会保留
SMS_RECEIVED_ACTION广播,并过滤
短信提供商数据库查询。延迟结束后,这些应用即可使用短信。
某些应用(例如默认短信助理应用、已连接的设备配套应用等)不受此延迟限制。所有依赖于读取短信 来提取动态密码的应用都应改用 SMS Retriever 或 SMS User Consent API,以确保功能持续可用。
Keamanan
Android 17 melakukan peningkatan berikut pada keamanan perangkat dan aplikasi.
Keamanan Aktivitas
Di Android 17, platform ini melanjutkan pergeserannya ke arah arsitektur "aman secara default", dengan memperkenalkan serangkaian peningkatan yang dirancang untuk mengurangi eksploitasi tingkat tinggi seperti phishing, pembajakan interaksi, dan serangan confused deputy. Update ini mengharuskan developer memilih secara eksplisit untuk menggunakan standar keamanan baru guna mempertahankan kompatibilitas aplikasi dan perlindungan pengguna.
Dampak utama bagi developer meliputi:
- Penguatan BAL & peningkatan pilihan ikut serta: Kami menyempurnakan batasan Peluncuran Aktivitas
Latar Belakang (BAL) dengan memperluas perlindungan ke
IntentSender. Developer harus bermigrasi dari konstanta lamaMODE_BACKGROUND_ACTIVITY_START_ALLOWED. Sebagai gantinya, Anda harus mengadopsi kontrol terperinci sepertiMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, yang membatasi aktivitas dimulai ke skenario saat aplikasi panggilan terlihat, sehingga mengurangi permukaan serangan secara signifikan. - Alat adopsi: Developer harus menggunakan mode ketat dan pemeriksaan lint yang diperbarui untuk mengidentifikasi pola lama dan memastikan kesiapan untuk persyaratan SDK target di masa mendatang.
Mengaktifkan CT secara default
If an app targets Android 17 (API level 37) or higher, certificate transparency (CT) is enabled by default. (On Android 16, CT is available but apps had to opt in.)
DCL Native yang Lebih Aman—C
如果您的应用以 Android 17(API 级别 37)或更高版本为目标平台,则 Android 14 中针对 DEX 和 JAR 文件引入的更安全的动态代码加载 (DCL) 保护功能现在也适用于原生库。
使用 System.load() 加载的所有原生文件都必须标记为只读。否则,系统会抛出 UnsatisfiedLinkError。
我们建议应用尽可能避免动态加载代码,因为这样做会大大增加应用因代码注入或代码篡改而遭到入侵的风险。
Membatasi kolom PII dalam tampilan data CP2
对于以 Android 17(API 级别 Android 17(API 级别 37))及更高版本为目标平台的应用,联系人提供程序 2 (CP2) 会限制数据视图中包含某些个人身份信息 (PII) 的列。启用此变更后,这些列将从数据视图中移除,以增强用户隐私保护。 受限列包括:
如果应用正在使用 ContactsContract.Data
中的这些列,则可以通过与 RAW_CONTACT_ID 联接,改为从 ContactsContract.RawContacts
中提取这些列。
Menerapkan pemeriksaan SQL yang ketat di CP2
Untuk aplikasi yang menargetkan Android 17 (level API Android 17 (level API 37)) dan
yang lebih tinggi, Penyedia Kontak 2 (CP2) menerapkan validasi kueri SQL yang ketat saat
tabel ContactsContract.Data diakses tanpa
READ_CONTACTS izin.
Dengan perubahan ini, jika aplikasi tidak memiliki READ_CONTACTS
izin, StrictColumns dan
StrictGrammar opsi akan ditetapkan saat membuat kueri
tabel ContactsContract.Data. Jika kueri menggunakan pola yang tidak kompatibel dengan pola ini, kueri akan ditolak dan menyebabkan pengecualian ditampilkan.
Media
Android 17 menyertakan perubahan berikut pada perilaku media.
Penguatan audio latar belakang
从 Android 17 开始,音频框架对后台音频互动(包括音频播放、音频焦点请求和音量更改 API)强制执行限制,以确保这些更改是由用户有意启动的。
部分音频限制适用于所有应用。不过,如果应用以 Android 17(API 级别 37)为目标平台,则限制会更加严格。如果这些应用在后台运行时与音频互动,则必须有前台服务正在运行。此外,应用还必须满足以下一项或两项要求:
- 前台服务必须具有仅在使用时授予的权限 (WIU)。
- 应用必须具有精确闹钟权限,并且正在与
USAGE_ALARM音频流互动。
如需了解详情(包括缓解措施),请参阅后台音频安全加固。
Faktor bentuk perangkat
Android 17 menyertakan perubahan berikut untuk meningkatkan pengalaman pengguna di berbagai ukuran dan faktor bentuk perangkat.
Perubahan API platform untuk mengabaikan batasan orientasi, perubahan ukuran, dan rasio aspek di layar besar (sw>=600dp)
We introduced Platform API changes in Android 16 to ignore orientation, aspect ratio, and resizability restrictions on large screens (sw >= 600dp) for apps targeting API level 36 or higher. Developers have the option to opt out of these changes with SDK 36, but this opt-out will no longer be available for apps that target Android 17 (API level 37) or higher.
For more information, see Restrictions on orientation and resizability are ignored.
Konektivitas
Android 17 memperkenalkan perubahan berikut untuk meningkatkan konsistensi dan
menyelaraskan dengan perilaku InputStream Java standar untuk soket RFCOMM Bluetooth.
Perilaku read() BluetoothSocket yang konsisten untuk RFCOMM
对于以 Android 17(API 级别 37)为目标平台的应用,
read() 方法从InputStream 获取的
基于 RFCOMM 的 BluetoothSocket 现在会在
套接字关闭或连接断开时返回 -1。
此更改使 RFCOMM 套接字行为与 LE CoC 套接字保持一致,并与标准 InputStream.read()
文档保持一致,该文档指出,当到达流的末尾时,系统会返回 -1。
仅依赖于捕获 IOException 以跳出读取循环的应用可能会受到此更改的影响,并且应更新 BluetoothSocket 读取循环以明确检查返回值 -1。这可确保在远程设备断开连接或套接字关闭时,循环正确终止。如需查看推荐的实现示例,请参阅传输蓝牙数据指南中的代码段。