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
Starting from Android 14, the Android Bluetooth stack more strictly adheres to
Version 5.2 of the Bluetooth Core Specification and requests
the BLE ATT MTU to 517 bytes when the first GATT client requests an MTU using
the BluetoothGatt#requestMtu(int) API, and disregards all subsequent MTU
requests on that ACL connection.
To address this change and make your app more robust, consider the following options:
- Your peripheral device should respond to the Android device's MTU request
with a reasonable value that can be accommodated by the peripheral. The
final negotiated value will be a minimum of the Android requested value and
the remote provided value (for example,
min(517, remoteMtu))- Implementing this fix could require a firmware update for peripheral
- Alternatively, limit your GATT characteristic writes based on the minimum
between the known supported value of your peripheral and the received MTU
change
- A reminder that you should reduce 5 bytes from the supported size for the headers
- For example:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
Alasan baru aplikasi dapat ditempatkan di bucket standby terbatas
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 (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
By design, an app's process is in a cached state when it's moved to the
background and no other app process components are running. Such an app process
is subject to being killed due to system memory pressure. Any work that
Activity instances perform after the onStop() method has been called and
returned, while in this state, is unreliable and strongly discouraged.
Android 14 introduces consistency and enforcement to this design. Shortly after an app process enters a cached state, background work is disallowed, until a process component re-enters an active state of the lifecycle.
Apps that use typical framework-supported lifecycle APIs – such as
services, JobScheduler, and Jetpack WorkManager – shouldn't be
impacted by these changes.
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
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 peningkatan skala font hingga 200%, yang memberikan opsi aksesibilitas tambahan kepada pengguna.
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
The media store supports queries for the OWNER_PACKAGE_NAME column, which
indicates the app that stored a particular media file. Starting in Android
14, this value is redacted unless at least one of the following conditions is
true:
- The app that stored the media file has a package name that is always visible to other apps.
The app that queries the media store requests the
QUERY_ALL_PACKAGESpermission.
Learn more about how Android filters package visibility for privacy purposes.