Platform Android 13 menyertakan perubahan perilaku yang dapat memengaruhi aplikasi Anda.
Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat dijalankan di Android 13,
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 13.
Performa dan baterai
Pengelola Tugas
Mulai Android 13 (API level 33), pengguna dapat menyelesaikan alur kerja dari panel samping notifikasi untuk menghentikan aplikasi yang memiliki layanan latar depan yang sedang berjalan, seperti yang ditunjukkan pada gambar 1. Kemampuan ini dikenal sebagai Pengelola Tugas. Aplikasi harus dapat menangani penghentian yang dimulai oleh pengguna ini.
Meningkatkan penanganan tugas pengambilan data menggunakan JobScheduler
JobScheduler menyediakan cara bagi aplikasi untuk menandai tugas tertentu sebagai tugas
"pengambilan data" (menggunakan JobInfo.Builder.setPrefetch()
), yang berarti aplikasi tersebut idealnya harus dijalankan
mendekati, dan sebelum, peluncuran aplikasi berikutnya untuk meningkatkan pengalaman pengguna.
Secara historis, JobScheduler hanya menggunakan sinyal untuk memungkinkan tugas
pengambilan data secara oportunistik menggunakan data gratis atau berlebih.
Di Android 13 (API level 33) dan yang lebih tinggi, sistem mencoba menentukan kapan aplikasi akan diluncurkan lagi, dan menggunakan estimasi tersebut untuk menjalankan tugas pengambilan data. Aplikasi harus mencoba menggunakan tugas pengambilan data untuk pekerjaan apa pun yang ingin dilakukannya sebelum peluncuran aplikasi berikutnya.
Pemakaian Resource Baterai
Android 13 (API level 33) menyediakan cara berikut agar sistem dapat mengelola masa pakai baterai di perangkat dengan lebih baik:
- Aturan yang diupdate tentang kapan sistem akan menempatkan aplikasi Anda di Bucket Aplikasi Standby yang "dibatasi".
- Batasan baru pada tugas yang dapat dilakukan aplikasi Anda saat pengguna menempatkan aplikasi pada status "dibatasi" untuk penggunaan baterai di latar belakang.
Saat menguji aplikasi dengan perubahan ini, pastikan untuk memeriksa hal-hal berikut:
Uji respons aplikasi Anda saat sistem menempatkannya di Bucket Aplikasi Standby yang"dibatasi". Gunakan perintah Android Debug Bridge (ADB) berikut untuk menetapkan aplikasi Anda ke bucket ini:
adb shell am set-standby-bucket PACKAGE_NAME restricted
Uji respons aplikasi Anda terhadap batasan berikut yang biasanya berlaku untuk aplikasi yang berada dalam status "dibatasi" untuk penggunaan baterai di latar belakang:
- Tidak dapat meluncurkan layanan latar depan
- Layanan latar depan yang ada dihapus dari latar depan
- Alarm tidak terpicu
- Tugas tidak dijalankan
Gunakan perintah ADB berikut untuk menempatkan aplikasi Anda dalam status "dibatasi" ini:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Kuota Firebase Cloud Message (FCM) Prioritas Tinggi
Android 13 (API level 33) memperbarui kuota Firebase Cloud Messaging (FCM) untuk meningkatkan keandalan pengiriman FCM prioritas tinggi bagi aplikasi yang menampilkan notifikasi sebagai respons terhadap FCM prioritas tinggi. Hal berikut telah berubah di Android 13 (API level 33):
- Bucket Aplikasi Standby tidak lagi menentukan berapa banyak FCM prioritas tinggi yang dapat digunakan aplikasi.
- Skala kuota FCM prioritas tinggi sebanding dengan jumlah notifikasi yang ditampilkan kepada pengguna sebagai respons terhadap FCM Prioritas Tinggi.
Seperti pada versi Android sebelumnya, FCM prioritas tinggi yang melebihi kuota akan didowngrade ke prioritas normal. Saat memulai Layanan Latar Depan (FGS) sebagai respons terhadap FCM, sebaiknya Anda memeriksa hasil RemoteMessage.getPriority()
dan memastikannya PRIORITY_HIGH
dan/atau menangani setiap potensi pengecualian ForegroundServiceStartNotAllowedException
.
Jika aplikasi Anda tidak selalu memposting notifikasi sebagai respons atas FCM Prioritas Tinggi, sebaiknya ubah prioritas FCM ini ke normal sehingga pesan yang menghasilkan notifikasi tidak didowngrade.
Privasi
Izin runtime untuk notifikasi
Android 13 (API level 33) memperkenalkan
izin notifikasi runtime:
POST_NOTIFICATIONS
.
Perubahan ini membantu pengguna untuk berfokus pada notifikasi yang paling penting bagi
mereka.
Sebaiknya Anda menargetkan Android 13 atau yang lebih tinggi sesegera mungkin untuk mendapatkan efek kontrol dan fleksibilitas tambahan dari fitur ini.
Pelajari praktik terbaik izin aplikasi lebih lanjut.
Menyembunyikan konten sensitif dari papan klip
Jika aplikasi Anda mengizinkan pengguna untuk menyalin konten sensitif, seperti sandi atau informasi
kartu kredit, Anda harus menambahkan flag ke ClipDescription
ClipData di papan klip sebelum memanggil ClipboardManager#setPrimaryClip()
. Menambahkan
flag ini akan mencegah konten sensitif muncul dalam pratinjau konten.
Untuk menambahkan flag pada konten sensitif, sertakan tambahan boolean ke ClipDescription
. Semua
aplikasi harus melakukan ini, apa pun API level yang ditargetkan.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
Untuk mempelajari UI papan klip baru lebih lanjut, kunjungi halaman fitur Salin dan tempel.
Keamanan
Bermigrasi dari ID pengguna bersama
Jika aplikasi Anda menggunakan atribut
android:sharedUserId
yang tidak digunakan lagi
dan tidak lagi bergantung pada fungsi atribut, Anda dapat menetapkan
atribut android:sharedUserMaxSdkVersion
ke 32
, seperti yang ditampilkan dalam cuplikan
kode berikut:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
Atribut ini memberi tahu sistem bahwa aplikasi Anda tidak lagi bergantung pada ID pengguna
bersama. Jika aplikasi Anda mendeklarasikan android:sharedUserMaxSdkVersion
dan baru
diinstal di perangkat yang menjalankan Android 13 atau lebih tinggi, aplikasi
akan berperilaku seolah-olah Anda tidak pernah menentukan android:sharedUserId
. Aplikasi yang diupdate tetap menggunakan
ID pengguna bersama yang ada.
ID pengguna bersama menyebabkan perilaku nondeterministik dalam pengelola paket. Aplikasi Anda sebaiknya menggunakan mekanisme komunikasi yang tepat, seperti layanan dan penyedia konten, untuk memfasilitasi interoperabilitas antara komponen bersama.
Pengalaman pengguna
Notifikasi layanan latar depan yang dapat ditutup
Pada perangkat yang menjalankan Android 13 atau yang lebih tinggi, pengguna dapat menutup notifikasi yang terkait dengan layanan latar depan secara default.
Fungsi inti
Salinan implementasi layanan ucapan lama dihapus
Android 13 menghapus implementasi SpeechService
—termasuk
IME Voice, RecognitionService
dan API berbasis intent —dari aplikasi Google.
Di Android 12, perubahan berikut terjadi:
- Fungsi
SpeechService
dimigrasikan ke Layanan Ucapan dari aplikasi Google, yang menjadi penyediaSpeechService
default. - Fungsi
RecognitionService
dipindahkan ke aplikasi Android System Intelligence untuk mendukung pengenalan ucapan di perangkat.
Untuk membantu mempertahankan kompatibilitas aplikasi di Android 12, aplikasi Google menggunakan trampolin untuk mengalihkan traffic ke aplikasi Layanan Ucapan dari Google. Di Android 13, trampolin ini dihapus.
Aplikasi harus menggunakan penyedia default perangkat untuk SpeechService
, bukan
melakukan hard code pada aplikasi tertentu.