Perubahan perilaku: semua aplikasi

Platform Android 16 menyertakan perubahan perilaku yang mungkin memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat dijalankan di Android 16, 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 16.

Fungsi inti

Android 16 (level API 36) mencakup perubahan berikut yang mengubah atau memperluas berbagai kemampuan inti sistem Android.

Pengoptimalan kuota JobScheduler

从 Android 16 开始,我们将根据以下因素调整常规作业和加急作业的执行运行时配额:

  • 应用所处的应用待机存储分区:在 Android 16 中,活跃待机存储分区将开始通过宽松的运行时配额强制执行。
  • 如果作业在应用处于前台状态时开始执行:在 Android 16 中,如果作业在应用对用户可见时开始执行,并在应用变为不可见后继续执行,则会遵守作业运行时配额。
  • 如果作业在运行前台服务时执行:在 Android 16 中,与前台服务同时执行的作业将遵守作业运行时配额。如果您利用作业进行用户发起的数据传输,请考虑改用用户发起的数据传输作业

此变更会影响使用 WorkManager、JobScheduler 和 DownloadManager 调度的任务。如需调试作业停止的原因,我们建议您通过调用 WorkInfo.getStopReason()(对于 JobScheduler 作业,请调用 JobParameters.getStopReason())来记录作业停止的原因。

如需了解应用的状态如何影响其可使用的资源,请参阅电源管理资源限制。 如需详细了解电池优化方面的最佳实践,请参阅有关针对任务调度 API 优化电池使用的指南。

我们还建议利用 Android 16 中引入的新 JobScheduler#getPendingJobReasonsHistory API 来了解作业未执行的原因。

测试

如需测试应用的行为,只要应用在 Android 16 设备上运行,您就可以启用对某些作业配额优化功能的替换。

如需停用“顶级状态将遵守作业运行时配额”的强制执行,请运行以下 adb 命令:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

如需停用“在与前台服务同时执行时,作业将遵守作业运行时配额”的强制执行,请运行以下 adb 命令:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

如需测试特定应用待机分桶行为,您可以使用以下 adb 命令设置应用的应用待机分桶:

adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted

如需了解应用所在的待机分桶,您可以使用以下 adb 命令获取应用的待机分桶:

adb shell am get-standby-bucket APP_PACKAGE_NAME

Alasan penghentian tugas kosong yang ditinggalkan

Tugas yang ditinggalkan terjadi saat objek JobParameters yang terkait dengan tugas telah dibersihkan sampah memorinya, tetapi JobService#jobFinished(JobParameters, boolean) belum dipanggil untuk menandakan penyelesaian tugas. Hal ini menunjukkan bahwa tugas mungkin sedang berjalan dan dijadwalkan ulang tanpa sepengetahuan aplikasi.

Aplikasi yang mengandalkan JobScheduler, tidak mempertahankan referensi yang kuat ke objek JobParameters, dan waktu tunggu kini akan diberi alasan penghentian tugas baru STOP_REASON_TIMEOUT_ABANDONED, bukan STOP_REASON_TIMEOUT.

Jika alasan perhentian yang ditinggalkan baru sering terjadi, sistem akan mengambil langkah mitigasi untuk mengurangi frekuensi tugas.

Aplikasi harus menggunakan alasan penghentian baru untuk mendeteksi dan mengurangi tugas yang ditinggalkan.

Jika menggunakan WorkManager, AsyncTask, atau DownloadManager, Anda tidak akan terpengaruh karena API ini mengelola siklus proses tugas atas nama aplikasi Anda.

Menghentikan penggunaan JobInfo#setImportantWhileForeground sepenuhnya

Metode JobInfo.Builder#setImportantWhileForeground(boolean) menunjukkan tingkat kepentingan tugas saat aplikasi penjadwalan berada di latar depan atau saat dikecualikan sementara dari pembatasan latar belakang.

Metode ini tidak digunakan lagi sejak Android 12 (API level 31). Mulai Android 16, metode ini tidak lagi berfungsi secara efektif dan memanggil metode ini akan diabaikan.

Penghapusan fungsi ini juga berlaku untuk JobInfo#isImportantWhileForeground(). Mulai Android 16, jika metode dipanggil, metode akan menampilkan false.

Cakupan prioritas siaran berurutan tidak lagi global

Aplikasi Android diizinkan untuk menentukan prioritas pada penerima siaran untuk mengontrol urutan penerima menerima dan memproses siaran. Untuk penerima yang dideklarasikan dalam manifes, aplikasi dapat menggunakan atribut android:priority untuk menentukan prioritas dan untuk penerima yang terdaftar dalam konteks, aplikasi dapat menggunakan IntentFilter#setPriority() API untuk menentukan prioritas. Saat siaran dikirim, sistem akan mengirimkannya ke penerima sesuai urutan prioritasnya, dari yang tertinggi ke yang terendah.

Di Android 16, urutan pengiriman siaran menggunakan atribut android:priority atau IntentFilter#setPriority() di berbagai proses tidak akan dijamin. Prioritas siaran hanya akan dihormati dalam proses aplikasi yang sama, bukan di semua proses.

Selain itu, prioritas siaran akan otomatis dibatasi pada rentang (SYSTEM_LOW_PRIORITY + 1, SYSTEM_HIGH_PRIORITY - 1). Hanya komponen sistem yang akan diizinkan untuk menetapkan SYSTEM_LOW_PRIORITY, SYSTEM_HIGH_PRIORITY sebagai prioritas siaran.

Aplikasi Anda mungkin terpengaruh jika melakukan salah satu hal berikut:

  1. Aplikasi Anda telah mendeklarasikan beberapa proses dengan intent siaran yang sama, dan memiliki ekspektasi seputar penerimaan intent tersebut dalam urutan tertentu berdasarkan prioritas.
  2. Proses aplikasi Anda berinteraksi dengan proses lain dan memiliki ekspektasi tentang menerima intent siaran dalam urutan tertentu.

Jika proses perlu berkoordinasi satu sama lain, proses tersebut harus berkomunikasi menggunakan saluran koordinasi lain.

Perubahan internal ART

Android 16 包含 Android 运行时 (ART) 的最新更新,这些更新可提升 Android 运行时 (ART) 的性能,并支持更多 Java 功能。通过 Google Play 系统更新,搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备也将受益于这些改进。

发布这些变更后,依赖于 ART 内部结构的库和应用代码在搭载 Android 16 的设备以及通过 Google Play 系统更新来更新 ART 模块的较低 Android 版本上可能无法正常运行。

依赖于内部结构(例如非 SDK 接口)始终会导致兼容性问题,但避免依赖于利用内部 ART 结构的代码(或包含代码的库)尤为重要,因为 ART 更改与设备所运行的平台版本无关,并且会通过 Google Play 系统更新推送到超过 10 亿部设备。

所有开发者都应在 Android 16 上对其应用进行全面测试,以检查其应用是否受到影响。此外,请查看已知问题,了解您的应用是否依赖于我们发现的任何依赖于内部 ART 结构的库。如果您的应用代码或库依赖项受到影响,请尽可能寻找公共 API 替代方案,并在问题跟踪器中创建功能请求,为新用例请求公共 API。

Mode kompatibilitas ukuran halaman 16 KB

Android 15 引入了对 16 KB 内存页面的支持,以优化平台性能。Android 16 添加了兼容模式,让一些针对 4 KB 内存页面构建的应用可以在配置为 16 KB 内存页面的设备上运行。

当您的应用在搭载 Android 16 或更高版本的设备上运行时,如果 Android 检测到您的应用具有 4 KB 对齐的内存页面,则会自动使用兼容模式并向用户显示通知对话框。在 AndroidManifest.xml 中设置 android:pageSizeCompat 属性以启用向后兼容模式,将会阻止应用启动时显示对话框。如需使用 android:pageSizeCompat 属性,请使用 Android 16 SDK 编译您的应用。

为了实现最佳性能、可靠性和稳定性,应用仍应以 16 KB 对齐。如需了解详情,请参阅我们近期发布的博文,了解如何更新应用以支持 16 KB 的内存页面。

兼容模式对话框:当系统检测到 4 KB 对齐的应用在 16 KB 对齐的情况下可以更高效地运行时,系统会显示此对话框。

Pengalaman pengguna dan UI sistem

Android 16 (level API 36) menyertakan perubahan berikut yang dimaksudkan untuk menciptakan pengalaman pengguna yang lebih konsisten dan intuitif.

Menghentikan penggunaan pengumuman aksesibilitas yang mengganggu

Android 16 废弃了无障碍功能通告,其特征是使用 announceForAccessibility 或调度 TYPE_ANNOUNCEMENT 无障碍功能事件。这可能会给 TalkBack 和 Android 屏幕阅读器用户带来不一致的用户体验,而替代方案可以更好地满足各种 Android 辅助技术的用户需求。

替代方案示例:

已废弃的 announceForAccessibility API 的参考文档中包含有关建议替代方案的更多详细信息。

Dukungan untuk navigasi 3 tombol

Android 16 menghadirkan dukungan kembali prediktif ke navigasi 3 tombol untuk aplikasi yang telah dimigrasikan dengan benar ke kembali prediktif. Menekan lama tombol kembali akan memulai animasi kembali prediktif, yang memberi Anda pratinjau tempat geser kembali akan membawa Anda.

Perilaku ini berlaku di semua area sistem yang mendukung animasi kembali prediktif, termasuk animasi sistem (kembali ke layar utama, lintas tugas, dan lintas aktivitas).

Animasi kembali prediktif dalam mode navigasi 3 tombol.

Ikon aplikasi bertema otomatis

Mulai dari Android 16 QPR 2, Android secara otomatis menerapkan tema ke ikon aplikasi untuk menciptakan pengalaman layar utama yang kohesif. Hal ini terjadi jika aplikasi tidak menyediakan ikon aplikasi bertemanya sendiri. Aplikasi dapat mengontrol desain ikon aplikasi bertema dengan menyertakan lapisan monokrom dalam ikon adaptif dan melihat pratinjau tampilan ikon aplikasi di Android Studio.

Faktor bentuk perangkat

Android 16 (level API 36) menyertakan perubahan berikut untuk aplikasi saat diproyeksikan ke layar oleh pemilik perangkat virtual.

Penggantian pemilik perangkat virtual

Pemilik perangkat virtual adalah aplikasi tepercaya atau istimewa yang membuat dan mengelola perangkat virtual. Pemilik perangkat virtual menjalankan aplikasi di perangkat virtual, lalu memproyeksikan aplikasi ke layar perangkat jarak jauh, seperti komputer pribadi, perangkat virtual reality, atau sistem infotainment mobil. Pemilik perangkat virtual berada di perangkat lokal, seperti ponsel.

Pemilik perangkat virtual di ponsel membuat perangkat virtual yang memproyeksikan aplikasi ke layar jarak jauh.

Penggantian per aplikasi

Di perangkat yang menjalankan Android 16 (level API 36), pemilik perangkat virtual dapat mengganti setelan aplikasi di perangkat virtual tertentu yang dikelola pemilik perangkat virtual. Misalnya, untuk meningkatkan tata letak aplikasi, pemilik perangkat virtual dapat mengabaikan batasan orientasi, rasio aspek, dan kemampuan pengubahan ukuran saat memproyeksikan aplikasi ke layar eksternal.

Perubahan umum yang dapat menyebabkan gangguan

Perilaku Android 16 dapat memengaruhi UI aplikasi Anda pada faktor bentuk layar besar seperti layar mobil atau Chromebook, terutama tata letak yang didesain untuk layar kecil dalam orientasi potret. Untuk mempelajari cara membuat aplikasi Anda adaptif untuk semua faktor bentuk perangkat, lihat Tentang tata letak adaptif.

Referensi

Streaming aplikasi pendamping

Keamanan

Android 16 (level API 36) menyertakan perubahan yang meningkatkan keamanan sistem untuk membantu melindungi aplikasi dan pengguna dari aplikasi berbahaya.

Peningkatan keamanan terhadap serangan pengalihan Intent

Android 16 memberikan keamanan default terhadap serangan pengalihan Intent umum, dengan kompatibilitas minimum dan perubahan developer yang diperlukan.

Kami memperkenalkan solusi penguatan keamanan secara default untuk Intenteksploitasi pengalihan. Pada umumnya, aplikasi yang menggunakan intent biasanya tidak akan mengalami masalah kompatibilitas; kami telah mengumpulkan metrik selama proses pengembangan untuk memantau aplikasi mana yang mungkin mengalami kerusakan.

Pengalihan intent di Android terjadi saat penyerang dapat mengontrol sebagian atau seluruh konten intent yang digunakan untuk meluncurkan komponen baru dalam konteks aplikasi yang rentan, sementara aplikasi korban meluncurkan intent sub-level yang tidak tepercaya di kolom tambahan Intent ("level teratas"). Hal ini dapat menyebabkan aplikasi penyerang meluncurkan komponen pribadi dalam konteks aplikasi korban, memicu tindakan istimewa, atau mendapatkan akses URI ke data sensitif, yang berpotensi menyebabkan pencurian data dan eksekusi kode arbitrer.

Memilih tidak ikut penanganan pengalihan Intent

Android 16 memperkenalkan API baru yang memungkinkan aplikasi memilih untuk tidak menggunakan perlindungan keamanan peluncuran. Hal ini mungkin diperlukan dalam kasus tertentu saat perilaku keamanan default mengganggu kasus penggunaan aplikasi yang sah.

Untuk aplikasi yang dikompilasi terhadap SDK Android 16 (level API 36) atau yang lebih tinggi

Anda dapat langsung menggunakan metode removeLaunchSecurityProtection() pada objek Intent.

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
Untuk aplikasi yang dikompilasi terhadap Android 15 (level API 35) atau yang lebih rendah

Meskipun tidak direkomendasikan, Anda dapat menggunakan refleksi untuk mengakses metode removeLaunchSecurityProtection().

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
    val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
    removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
    // Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }

Aplikasi pendamping tidak lagi diberi tahu tentang waktu tunggu penemuan

Android 16 在配套设备配对流程期间引入了一种新行为,以防恶意应用侵犯用户的位置信息隐私。在 Android 16 上运行的所有配套应用都不再直接通过 RESULT_DISCOVERY_TIMEOUT 收到发现超时通知。而是通过可视对话框通知用户超时事件。当用户关闭对话框时,系统会通过 RESULT_USER_REJECTED 提醒应用关联失败。

搜索时长也从原来的 20 秒延长到了 30 秒,并且用户可以在搜索期间的任何时间停止设备发现。如果在开始搜索的前 20 秒内发现了至少 1 部设备,CDM 会停止搜索其他设备。

Konektivitas

Android 16 (level API 36) menyertakan perubahan berikut dalam stack Bluetooth untuk meningkatkan konektivitas dengan perangkat periferal.

Peningkatan penanganan kehilangan ikatan

Mulai Android 16, stack Bluetooth telah diupdate untuk meningkatkan keamanan dan pengalaman pengguna saat kehilangan ikatan jarak jauh terdeteksi. Sebelumnya, sistem akan otomatis menghapus ikatan dan memulai proses penyambungan baru, yang dapat menyebabkan penyambungan ulang yang tidak disengaja. Kami telah melihat dalam banyak kasus aplikasi tidak menangani peristiwa kehilangan ikatan secara konsisten.

Untuk menyatukan pengalaman, Android 16 meningkatkan penanganan kehilangan ikatan ke sistem. Jika perangkat Bluetooth yang sebelumnya tersambung tidak dapat diautentikasi setelah terhubung kembali, sistem akan memutuskan hubungan link, mempertahankan informasi ikatan lokal, dan menampilkan dialog sistem yang memberi tahu pengguna tentang hilangnya ikatan dan mengarahkan mereka untuk menyambungkan kembali.