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

On Android 14, the system can place context-registered broadcasts in a queue while the app is in the cached state. This is similar to the queuing behavior that Android 12 (API level 31) introduced for async binder transactions. Manifest-declared broadcasts aren't queued, and apps are removed from the cached state for broadcast delivery.

When the app leaves the cached state, such as returning to the foreground, the system delivers any queued broadcasts. Multiple instances of certain broadcasts might be merged into one broadcast. Depending on other factors, such as system health, apps might be removed from the cached state, and any previously queued broadcasts are delivered.

Aplikasi hanya dapat menghentikan proses latar belakangnya sendiri

Starting in Android 14, when your app calls killBackgroundProcesses(), the API can kill only the background processes of your own app.

If you pass in the package name of another app, this method has no effect on that app's background processes, and the following message appears in Logcat:

Invalid packageName: com.example.anotherapp

Your app shouldn't use the killBackgroundProcesses() API or otherwise attempt to influence the process lifecycle of other apps, even on older OS versions. Android is designed to keep cached apps in the background and kill them automatically when the system needs memory. If your app kills other apps unnecessarily, it can reduce system performance and increase battery consumption by requiring full restarts of those apps later, which takes significantly more resources than resuming an existing cached app.

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

Di Android 14 (API level 34) dan yang lebih baru, platform mengurangi memori maksimum yang dapat dikunci menggunakan mlock() menjadi 64 KB per proses. Di versi sebelumnya, batasnya adalah 64 MB per proses. Batasan ini mempromosikan pengelolaan memori yang lebih baik di seluruh aplikasi dan sistem. Untuk memberikan konsistensi yang lebih baik di seluruh perangkat, Android 14 menambahkan pengujian CTS baru untuk batas mlock() baru pada perangkat yang kompatibel.

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

Jika aplikasi Anda menampilkan notifikasi latar depan yang tidak dapat ditutup kepada pengguna, Android 14 telah mengubah perilaku itu untuk memungkinkan pengguna menutup notifikasi tersebut.

Perubahan ini berlaku untuk aplikasi yang mencegah pengguna menutup latar depan notifikasi dengan menyetel Notification.FLAG_ONGOING_EVENT melalui Notification.Builder#setOngoing(true) atau NotificationCompat.Builder#setOngoing(true). Perilaku FLAG_ONGOING_EVENT telah berubah untuk membuat notifikasi tersebut benar-benar dapat ditutup oleh pengguna.

Jenis notifikasi ini masih tidak dapat ditutup dalam kondisi berikut:

  • Saat ponsel dikunci
  • Jika pengguna memilih tindakan notifikasi Hapus semua (yang membantu mencegah penutupan yang tidak disengaja)

Selain itu, perilaku baru ini tidak berlaku untuk notifikasi di kasus penggunaan berikut:

  • Notifikasi CallStyle
  • Pengontrol kebijakan perangkat (DPC) dan paket pendukung untuk perusahaan
  • Notifikasi media
  • Paket Pemilih Penelusuran default

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%

Mulai Android 14, sistem mendukung penskalaan font hingga 200%, yang memberikan opsi aksesibilitas tambahan kepada pengguna yang mengalami gangguan penglihatan, sesuai dengan Pedoman Aksesibilitas Konten Web (WCAG).

Jika Anda telah menggunakan unit piksel yang diskalakan (sp) untuk menentukan ukuran teks, perubahan ini mungkin tidak akan memiliki dampak tinggi pada aplikasi Anda. Namun, Anda harus melakukan pengujian UI dengan ukuran font maksimum yang diaktifkan (200%) untuk memastikan aplikasi Anda dapat mengakomodasi ukuran font yang lebih besar tanpa memengaruhi kegunaan.

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.