Platform Android 17 menyertakan perubahan perilaku yang dapat memengaruhi aplikasi Anda.
Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat dijalankan di Android 17,
terlepas dari targetSdkVersion. Sebaiknya uji aplikasi Anda, lalu modifikasi sesuai kebutuhan untuk mendukung perubahan ini, jika memungkinkan.
Pastikan Anda juga meninjau daftar perubahan perilaku yang hanya memengaruhi aplikasi yang menargetkan Android 17.
Keamanan
Android 17 menyertakan peningkatan berikut pada keamanan perangkat dan aplikasi.
Rencana penghentian penggunaan usesClearTraffic
我们计划在未来的版本中弃用 usesCleartextTraffic 元素。需要建立未加密 (HTTP) 连接的应用应迁移为使用网络安全配置文件,该文件可让您指定应用需要与哪些网域建立明文连接。
请注意,网络安全配置文件仅在 API 级别 24 及更高版本上受支持。如果应用的最低 API 级别低于 24,您应执行以下两项操作:
- 将
usesCleartextTraffic属性设置为true - 使用网络配置文件
如果应用的最低 API 级别为 24 或更高,您可以使用网络配置文件,而无需设置 usesCleartextTraffic。
Membatasi pemberian URI implisit
Saat ini, jika aplikasi meluncurkan intent dengan URI yang memiliki tindakan Send, SendMultiple, atau ImageCapture, sistem akan otomatis memberikan izin baca dan tulis URI ke aplikasi target. Kami berencana mengubah perilaku ini di Android 18. Oleh karena itu, sebaiknya aplikasi memberikan izin URI yang relevan secara eksplisit, bukan mengandalkan sistem untuk memberikannya.
Batas keystore per aplikasi
应用应避免在 Android 密钥库中创建过多的密钥,因为它是设备上所有应用的共享资源。从 Android 17 开始,系统会强制限制应用可拥有的密钥数量。对于以 Android 17 或更高版本为目标平台的非系统应用,此限制为 50,000 个键;对于所有其他应用,此限制为 200,000 个键。无论系统应用以哪个 API 级别为目标,其密钥数量上限均为 20 万个。
如果应用尝试创建超出限制的密钥,则创建会失败并显示 KeyStoreException。异常的消息字符串包含有关密钥限制的信息。如果应用针对异常调用 getNumericErrorCode(),则返回值取决于应用的目标 API 级别:
- 以 Android 17 或更高版本为目标平台的应用:
getNumericErrorCode()会返回新的ERROR_TOO_MANY_KEYS值。 - 所有其他应用:
getNumericErrorCode()返回ERROR_INCORRECT_USAGE。
Pengalaman pengguna dan UI sistem
Android 17 mencakup perubahan berikut yang dimaksudkan untuk menciptakan pengalaman pengguna yang lebih konsisten dan intuitif.
Memulihkan visibilitas IME default setelah rotasi
Beginning with Android 17, when the device's configuration changes (for example, through rotation), and this is not handled by the app itself, the previous IME visibility is not restored.
If your app undergoes a configuration change that it does not handle, and the app needs the keyboard to be visible after the change, you must explicitly request this. You can make this request in one of the following ways:
- Set the
android:windowSoftInputModeattribute tostateAlwaysVisible. - Programmatically request the soft keyboard in your activity's
onCreate()method, or add theonConfigurationChanged()method.
Input manusia
Android 17 menyertakan perubahan berikut yang memengaruhi cara aplikasi berinteraksi dengan perangkat input manusia seperti keyboard dan touchpad.
Touchpad mengirimkan peristiwa relatif secara default selama pengambilan pointer
Mulai Android 17, jika aplikasi meminta pengambilan pointer menggunakan
View.requestPointerCapture() dan pengguna menggunakan touchpad, sistem akan
mengenali gerakan pointer dan gestur men-scroll dari sentuhan pengguna dan
melaporkannya ke aplikasi dengan cara yang sama seperti gerakan pointer dan roda scroll
dari mouse yang diambil. Dalam sebagian besar kasus, hal ini menghilangkan kebutuhan aplikasi yang mendukung mouse yang direkam untuk menambahkan logika penanganan khusus untuk touchpad. Untuk mengetahui detail selengkapnya, lihat dokumentasi untuk View.POINTER_CAPTURE_MODE_RELATIVE.
Sebelumnya, sistem tidak mencoba mengenali gestur dari touchpad,
dan malah mengirimkan lokasi jari absolut mentah ke aplikasi dalam format yang serupa
dengan sentuhan layar sentuh. Jika aplikasi masih memerlukan data absolut ini, aplikasi
harus memanggil metode View.requestPointerCapture(int) baru dengan
View.POINTER_CAPTURE_MODE_ABSOLUTE.
Media
Android 17 menyertakan perubahan berikut pada perilaku media.
Penguatan audio latar belakang
从 Android 17 开始,音频框架对后台音频互动(包括音频播放、音频焦点请求和音量更改 API)强制执行限制,以确保这些更改是由用户有意启动的。
如果应用尝试在应用处于无效生命周期时调用音频 API,则音频播放和音量更改 API 会静默失败,而不会抛出异常或提供失败消息。音频焦点 API 失败,结果代码为 AUDIOFOCUS_REQUEST_FAILED。
如需了解详情(包括缓解策略),请参阅后台音频强化。