Perubahan perilaku: semua aplikasi

Platform Android 14 menyertakan perubahan perilaku yang mungkin memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat dijalankan di Android 14, terlepas dari targetSdkVersion. Sebaiknya uji aplikasi Anda lalu modifikasi sesuai kebutuhan untuk mendukung perubahan ini dengan tepat, jika memungkinkan.

Selain itu, pastikan Anda meninjau daftar perubahan perilaku yang hanya memengaruhi aplikasi yang menargetkan Android 14.

Fungsi inti

Menjadwalkan alarm yang tepat ditolak secara default

Exact alarms are meant for user-intentioned notifications, or for actions that need to happen at a precise time. Starting in Android 14, the SCHEDULE_EXACT_ALARM permission is no longer being pre-granted to most newly installed apps targeting Android 13 and higher—the permission is denied by default.

Learn more about the changes to the permission for scheduling exact alarms.

Siaran yang terdaftar dalam konteks dimasukkan ke dalam antrean saat aplikasi di-cache

Di Android 14, sistem dapat menempatkan siaran yang terdaftar dalam konteks ke dalam antrean saat aplikasi dalam status cache. Ini mirip dengan perilaku antrean yang diperkenalkan oleh Android 12 (API level 31) untuk transaksi binder asinkron. Siaran yang dideklarasikan manifes tidak dimasukkan dalam antrean, dan aplikasi dihapus dari status cache untuk pengiriman siaran.

Saat aplikasi keluar dari status yang di-cache, misalnya kembali ke latar depan, sistem akan mengirim siaran dalam antrean. Beberapa instance siaran tertentu mungkin digabungkan menjadi satu siaran. Tergantung pada faktor lain, seperti sistem aplikasi mungkin dihapus dari status cache, dan aplikasi apa pun yang sebelumnya dimasukkan ke dalam antrean siaran tetap dikirimkan.

Aplikasi hanya dapat menghentikan proses latar belakangnya sendiri

Mulai Android 14, saat aplikasi memanggil killBackgroundProcesses(), API hanya dapat menghentikan proses latar belakang aplikasi Anda sendiri.

Jika Anda meneruskan nama paket aplikasi lain, metode ini tidak akan memengaruhi proses latar belakang aplikasi tersebut, dan pesan berikut akan muncul di Logcat:

Invalid packageName: com.example.anotherapp

Aplikasi Anda tidak boleh menggunakan killBackgroundProcesses() API atau mencoba memengaruhi siklus proses aplikasi lain, bahkan pada versi OS yang lebih lama. Android didesain untuk menyimpan aplikasi yang di-cache di latar belakang dan menghentikannya secara otomatis saat sistem memerlukan memori. Jika aplikasi Anda menghentikan aplikasi lain secara tidak perlu, hal tersebut dapat mengurangi performa sistem dan meningkatkan konsumsi baterai dengan mewajibkan aplikasi tersebut dimulai ulang sepenuhnya, yang memerlukan lebih banyak resource secara signifikan daripada melanjutkan aplikasi yang ada di cache.

MTU ditetapkan ke 517 untuk klien GATT pertama yang meminta MTU

Mulai Android 14, stack Bluetooth Android lebih mematuhi Spesifikasi Inti Bluetooth Versi 5.2 dan meminta MTU ATT BLE menjadi 517 byte saat klien GATT pertama meminta MTU menggunakan BluetoothGatt#requestMtu(int) API, dan mengabaikan semua permintaan MTU berikutnya pada koneksi ACL tersebut.

Untuk mengatasi perubahan ini dan membuat aplikasi Anda lebih andal, pertimbangkan opsi berikut:

  • Perangkat periferal Anda harus merespons permintaan MTU perangkat Android dengan nilai yang wajar yang dapat diakomodasi oleh periferal. Nilai akhir yang dinegosiasikan akan menjadi minimum dari nilai yang diminta Android dan nilai yang disediakan jarak jauh (misalnya, min(517, remoteMtu))
    • Mengimplementasikan perbaikan ini mungkin memerlukan update firmware untuk periferal
  • Atau, batasi penulisan karakteristik GATT berdasarkan minimum antara nilai periferal yang didukung dan perubahan MTU yang diterima
    • Pengingat bahwa Anda harus mengurangi 5 byte dari ukuran yang didukung untuk header
    • Contoh: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Alasan baru aplikasi dapat ditempatkan di bucket standby terbatas

Android 14 memperkenalkan alasan baru aplikasi dapat ditempatkan ke dalam bucket standby yang dibatasi. Tugas aplikasi memicu error ANR beberapa kali karena waktu tunggu metode onStartJob, onStopJob, atau onBind habis. (Lihat JobScheduler memperkuat perilaku callback dan jaringan untuk perubahan pada onStartJob dan onStopJob.)

Untuk melacak apakah aplikasi telah memasuki bucket standby yang dibatasi atau tidak, sebaiknya lakukan logging dengan API UsageStatsManager.getAppStandbyBucket() saat eksekusi tugas atau UsageStatsManager.queryEventsForSelf() saat startup aplikasi.

mlock dibatasi hingga 64 KB

In Android 14 (API level 34) and higher, the platform reduces the maximum memory that can be locked using mlock() to 64 KB per process. In previous versions, the limit was 64 MB per process. This restriction promotes better memory management across apps and the system. To provide more consistency across devices, Android 14 adds a new CTS test for the new mlock() limit on compatible devices.

Sistem menerapkan penggunaan resource aplikasi yang di-cache

Menurut desain, proses aplikasi berada dalam status cache saat dipindahkan ke latar belakang dan tidak ada komponen proses aplikasi lain yang berjalan. Proses aplikasi tersebut dapat dihentikan karena tekanan memori sistem. Setiap pekerjaan yang dilakukan oleh instance Activity setelah metode onStop() dipanggil dan ditampilkan, dalam keadaan ini tidak dapat diandalkan dan sangat tidak disarankan.

Android 14 memperkenalkan konsistensi dan penerapan dalam desain ini. Segera setelah proses aplikasi memasuki status cache, pekerjaan latar belakang tidak diizinkan, sampai komponen proses memasuki kembali status aktif siklus proses.

Aplikasi yang menggunakan API siklus proses yang didukung framework standar, seperti layanan, JobScheduler, dan Jetpack WorkManager, tidak akan terpengaruh oleh perubahan ini.

Pengalaman pengguna

Perubahan pada cara pengguna menerima notifikasi yang tidak dapat ditutup

If your app shows non-dismissable foreground notifications to users, Android 14 has changed the behavior to allow users to dismiss such notifications.

This change applies to apps that prevent users from dismissing foreground notifications by setting Notification.FLAG_ONGOING_EVENT through Notification.Builder#setOngoing(true) or NotificationCompat.Builder#setOngoing(true). The behavior of FLAG_ONGOING_EVENT has changed to make such notifications actually dismissable by the user.

These kinds of notifications are still non-dismissable in the following conditions:

  • When the phone is locked
  • If the user selects a Clear all notification action (which helps with accidental dismissals)

Also, this new behavior doesn't apply to notifications in the following use cases:

  • CallStyle notifications
  • Device policy controller (DPC) and supporting packages for enterprise
  • Media notifications
  • The default Search Selector package

Informasi keamanan data terlihat lebih jelas

Untuk meningkatkan privasi pengguna, Android 14 meningkatkan jumlah tempat sistem menampilkan informasi yang telah Anda deklarasikan dalam formulir Konsol Play. Saat ini, pengguna dapat melihat informasi ini di bagian Keamanan data di listingan aplikasi Anda di Google Play.

Sebaiknya Anda meninjau kebijakan berbagi data lokasi aplikasi dan meluangkan waktu untuk melakukan update yang berlaku pada bagian Keamanan Data Google Play di aplikasi Anda.

Pelajari lebih lanjut dalam panduan tentang bagaimana informasi keamanan data lebih terlihat di Android 14.

Aksesibilitas

Penskalaan font non-linear ke 200%

Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).

If you already use scaled pixels (sp) units to define text sizing, then this change probably won't have a high impact on your app. However, you should perform UI testing with the maximum font size enabled (200%) to ensure that your app can accommodate larger font sizes without impacting usability.

Keamanan

API level target minimum yang dapat diinstal

Mulai Android 14, aplikasi dengan targetSdkVersion di bawah 23 tidak dapat diinstal. Mewajibkan aplikasi memenuhi persyaratan API level target minimum akan meningkatkan keamanan dan privasi bagi pengguna.

Malware sering kali menargetkan API level lama untuk mengabaikan perlindungan privasi dan keamanan yang telah diperkenalkan dalam versi Android yang lebih baru. Misalnya, beberapa aplikasi malware menggunakan targetSdkVersion dari 22 agar tidak dikenai model izin runtime yang diperkenalkan pada tahun 2015 oleh Android 6.0 Marshmallow (API level 23). Perubahan Android 14 ini mempersulit malware untuk menghindari peningkatan keamanan dan privasi. Mencoba menginstal aplikasi yang menargetkan API level yang lebih rendah akan mengakibatkan kegagalan penginstalan, dengan pesan berikut muncul di Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

Pada perangkat yang diupgrade ke Android 14, aplikasi dengan targetSdkVersion yang lebih rendah dari 23 akan tetap diinstal.

Jika Anda perlu menguji aplikasi yang menargetkan API level lama, gunakan perintah ADB berikut:

adb install --bypass-low-target-sdk-block FILENAME.apk

Nama paket pemilik media mungkin akan disamarkan

Penyimpanan media mendukung kueri untuk kolom OWNER_PACKAGE_NAME, yang menunjukkan aplikasi yang menyimpan file media tertentu. Mulai Android 14, nilai ini disamarkan kecuali jika setidaknya salah satu kondisi berikut terpenuhi:

Pelajari lebih lanjut cara Android memfilter visibilitas paket untuk tujuan privasi.