Platform Android 17 menyertakan perubahan perilaku yang mungkin 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.
Selain itu, pastikan Anda 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
目前,如果应用启动的 intent 包含具有操作 Send、SendMultiple 或 ImageCapture 的 URI,系统会自动向目标应用授予读取和写入 URI 权限。我们计划在 Android 18 中更改此行为。因此,我们建议应用明确授予相关的 URI 权限,而不是依赖系统来授予这些权限。
Batas keystore per aplikasi
应用应避免在 Android Keystore 中创建过多的密钥,因为它是设备上所有应用的共享资源。从 Android 17 开始,系统会对应用可拥有的密钥数量强制执行限制。对于以 Android 17(API 级别 37)或更高版本为目标平台的非系统应用,密钥数量上限为 50,000 个,对于所有其他应用,密钥数量上限为 200,000 个。 无论系统应用以哪个 API 级别为目标平台,密钥数量上限均为 200,000 个。
如果应用尝试创建超出上限的密钥,则创建会失败并显示
KeyStoreException。该异常的消息字符串包含有关密钥上限的信息。如果应用对该异常调用 getNumericErrorCode(),则返回值取决于应用以哪个 API 级别为目标平台:
- 以 Android 17(API 级别 37)或更高版本为目标平台的应用:
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 pengguna seperti keyboard dan touchpad.
Touchpad mengirimkan peristiwa relatif secara default selama pengambilan pointer
从 Android 17 开始,如果应用使用 View.requestPointerCapture() 请求捕获指针,并且用户使用触控板,系统会识别用户触摸操作产生的指针移动和滚动手势,并以与捕获的鼠标产生的指针和滚轮移动相同的方式将这些信息报告给应用。在大多数情况下,这使得支持捕获鼠标的应用无需为触控板添加特殊的处理逻辑。如需了解详情,请参阅 View.POINTER_CAPTURE_MODE_RELATIVE 的文档。
以前,系统不会尝试识别触控板的手势,而是以类似于触摸屏触摸的格式将原始的绝对手指位置传递给应用。如果应用仍需要此绝对数据,则应改为使用 View.POINTER_CAPTURE_MODE_ABSOLUTE 调用新的 View.requestPointerCapture(int) 方法。
Media
Android 17 menyertakan perubahan berikut pada perilaku media.
Penguatan audio latar belakang
Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.
If the app tries to call audio APIs while the app is not in a valid lifecycle,
the audio playback and volume change APIs fail silently without throwing an
exception or providing a failure message. The audio focus API fails with the
result code AUDIOFOCUS_REQUEST_FAILED.
For more information, including mitigation strategies, see Background audio hardening.
Konektivitas
Android 17 mencakup perubahan berikut untuk meningkatkan kualitas konektivitas perangkat.
Penyambungan ulang otomatis untuk kehilangan koneksi Bluetooth
Android 17 memperkenalkan penyambungan ulang otonom, peningkatan tingkat sistem yang dirancang untuk otomatis menyelesaikan masalah hilangnya sambungan Bluetooth.
Sebelumnya, jika koneksi hilang, pengguna harus membuka Setelan secara manual untuk membatalkan penyambungan, lalu menyambungkan kembali perangkat periferal. Fitur ini dibuat berdasarkan peningkatan keamanan Android 16 dengan memungkinkan sistem membangun kembali koneksi di latar belakang tanpa mengharuskan pengguna membuka Setelan secara manual untuk membatalkan penyambungan dan menyambungkan kembali perangkat periferal.
Meskipun sebagian besar aplikasi tidak memerlukan perubahan kode, developer harus mengetahui perubahan perilaku berikut dalam stack Bluetooth:
- Konteks penyandingan baru:
ACTION_PAIRING_REQUESTkini menyertakan ekstraEXTRA_PAIRING_CONTEXTyang memungkinkan aplikasi membedakan antara permintaan penyandingan standar dan upaya penyandingan ulang yang dimulai sistem secara mandiri. - Update kunci bersyarat: Kunci keamanan yang ada hanya akan diganti jika penyambungan ulang berhasil dan koneksi baru memenuhi atau melampaui tingkat keamanan sambungan sebelumnya.
- Waktu intent yang diubah: Intent
ACTION_KEY_MISSINGkini disiarkan hanya jika upaya penyambungan ulang otomatis gagal. Hal ini mengurangi penanganan error yang tidak perlu di aplikasi jika sistem berhasil memulihkan koneksi di latar belakang. - Notifikasi pengguna: Sistem mengelola penyambungan ulang melalui notifikasi dan dialog UI baru. Pengguna akan diminta untuk mengonfirmasi upaya penyambungan ulang untuk memastikan mereka mengetahui upaya penyambungan ulang tersebut.
Produsen perangkat periferal dan developer aplikasi pendamping harus memverifikasi bahwa hardware dan aplikasi menangani transisi penggabungan dengan baik. Untuk menguji perilaku ini, simulasikan hilangnya koneksi jarak jauh menggunakan salah satu metode berikut:
- Menghapus informasi pengaitan secara manual dari perangkat periferal
- Batalkan penyandingan perangkat secara manual di: Setelan > Perangkat terhubung