Platform Android 14 menyertakan perubahan perilaku yang dapat memengaruhi aplikasi Anda.
Perubahan perilaku berikut 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 dalam antrean saat aplikasi berada 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 dapat digabungkan menjadi satu siaran. Bergantung pada faktor lain, seperti kesehatan sistem, aplikasi mungkin dihapus dari status cache, dan siaran dalam antrean sebelumnya akan dikirimkan.
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 disetel ke 517 untuk klien GATT pertama yang meminta MTU
Mulai dari Android 14, stack Bluetooth Android secara ketat mematuhi
Spesifikasi Bluetooth Core Versi 5.2 dan meminta
MTU BLE ATT hingga 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 tangguh, 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 berupa minimum dari nilai yang diminta Android dan
nilai yang diberikan jarak jauh (misalnya,
min(517, remoteMtu)
)- Menerapkan perbaikan ini dapat memerlukan update firmware untuk periferal
- Atau, batasi penulisan karakteristik GATT Anda berdasarkan nilai minimum
antara nilai periferal yang didukung yang diketahui dan perubahan MTU
yang diterima
- Perlu diingat 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 yang dibatasi
Android 14 introduces a new reason an app can be placed into the restricted standby bucket.
The app's jobs trigger ANR errors multiple times due to onStartJob
,
onStopJob
, or onBind
method timeouts.
(See JobScheduler reinforces callback and network behavior for changes
to onStartJob
and onStopJob
.)
To track whether or not the app has entered the restricted standby bucket,
we recommend logging with the API UsageStatsManager.getAppStandbyBucket()
on job execution or UsageStatsManager.queryEventsForSelf()
on app startup.
mlock dibatasi hingga 64 KB
Di Android 14 (level API 34) dan yang lebih baru, platform mengurangi memori maksimum
yang dapat dikunci menggunakan mlock()
menjadi 64 KB per proses. Pada
versi sebelumnya, batasnya adalah 64 MB per proses. Pembatasan ini
meningkatkan manajemen memori yang lebih baik di seluruh aplikasi dan sistem. Agar lebih
konsisten di seluruh perangkat, Android 14 menambahkan pengujian CTS baru untuk
batas mlock()
baru pada perangkat yang kompatibel.
Sistem memberlakukan penggunaan resource aplikasi dalam 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 notifikasi
latar depan dengan menetapkan 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 dalam 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
To enhance user privacy, Android 14 increases the number of places where the system shows the information you have declared in the Play Console form. Currently, users can view this information in the Data safety section on your app's listing in Google Play.
We encourage you to review your app's location data sharing policies and take a moment to make any applicable updates to your app's Google Play Data safety section.
Learn more in the guide about how data safety information is more visible on 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
Starting with Android 14, apps with a
targetSdkVersion
lower than 23
can't be installed. Requiring apps to meet these minimum target API level
requirements improves security and privacy for users.
Malware often targets older API levels in order to bypass security and privacy
protections that have been introduced in newer Android versions. For example,
some malware apps use a targetSdkVersion
of 22 to avoid being subjected to the
runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API
level 23). This Android 14 change makes it harder for malware to avoid security
and privacy improvements.
Attempting to install an app targeting a lower API level will result in an
installation failure, with the following message appearing in Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
On devices upgrading to Android 14, any apps with a targetSdkVersion
lower
than 23 will remain installed.
If you need to test an app targeting an older API level, use the following ADB command:
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:
- Aplikasi yang menyimpan file media memiliki nama paket yang selalu terlihat oleh aplikasi lain.
Aplikasi yang mengkueri penyimpanan media meminta izin
QUERY_ALL_PACKAGES
.
Pelajari lebih lanjut cara Android memfilter visibilitas paket untuk tujuan privasi.