Platform Android 11 menyertakan perubahan perilaku yang dapat
memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat
dijalankan di Android 11, terlepas dari targetSdkVersion
aplikasi. 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 11.
Privasi
Android 11 memperkenalkan perubahan dan pembatasan untuk menyempurnakan privasi pengguna, termasuk hal berikut:
- Izin satu kali: Memberikan opsi kepada pengguna untuk memberikan lebih banyak akses sementara untuk lokasi, mikrofon, dan izin kamera.
- Visibilitas dialog izin: Penolakan izin yang berulang berarti "jangan tanya lagi".
- Audit akses data: Dapatkan laporan tentang tempat aplikasi Anda mengakses data pribadi, dalam kode aplikasi Anda sendiri maupun dalam kode library yang menjadi dependensi.
- Izin jendela pemberitahuan
sistem: Class aplikasi
tertentu secara otomatis diberi izin
SYSTEM_ALERT_WINDOW
atas permintaan. Selain itu, intent yang menyertakan tindakan intentACTION_MANAGE_OVERLAY_PERMISSION
selalu membawa pengguna ke layar di setelan sistem. - ID SIM
permanen:
Pada Android 11 dan versi yang lebih tinggi, akses ke ICCID yang tidak dapat direset
melalui metode
getIccId()
dibatasi. Metode ini menampilkan string kosong dan non-null. Sebagai gantinya, gunakan metodegetSubscriptionId()
untuk mengidentifikasi SIM yang terpasang di perangkat secara unik. ID Langganan memberikan nilai indeks (mulai dari 1) untuk mengidentifikasi SIM yang terpasang secara unik, termasuk fisik dan elektronik. Nilai ID ini stabil untuk SIM yang diberikan kecuali perangkat direset ke setelan pabrik.
Untuk mempelajari lebih lanjut, lihat halaman Privasi.
Notifikasi Paparan
Android 11 memperbarui platform dengan mempertimbangkan Sistem Notifikasi Paparan. Pengguna kini dapat menjalankan aplikasi Notifikasi Paparan di Android 11 tanpa perlu mengaktifkan setelan lokasi perangkat. Cara ini merupakan pengecualian untuk Sistem Notifikasi Paparan saja, mengingat bahwa sistem tersebut telah didesain dengan cara tertentu sehingga aplikasi yang menggunakannya tidak dapat menyimpulkan lokasi perangkat melalui pemindaian Bluetooth.
Untuk melindungi privasi pengguna, semua aplikasi lainnya masih dilarang melakukan pemindaian Bluetooth kecuali jika setelan lokasi perangkat aktif dan pengguna telah memberi izin akses lokasi kepada mereka. Anda dapat membaca lebih lanjut di postingan Pembaruan tentang Notifikasi Paparan kami.
Keamanan
Soket SSL menggunakan mesin SSL Conscrypt secara default
Implementasi SSLSocket
default Android didasarkan pada Conscrypt.
Mulai di Android 11, implementasi tersebut dikembangkan
secara internal dari SSLEngine
Conscrypt.
Scudo Hardened Allocator
Android 11 menggunakan
Scudo Hardened Allocator
secara internal untuk alokasi heap layanan. Scudo dapat mendeteksi dan mengurangi
beberapa jenis pelanggaran keamanan memori. Jika Anda melihat error terkait Scudo
(misalnya Scudo ERROR:
) dalam laporan masalah pada native code, baca dokumentasi
Pemecahan masalah Scudo.
Statistik penggunaan aplikasi
Agar dapat melindungi pengguna dengan lebih baik, Android 11 menyimpan setiap statistik penggunaan aplikasi pengguna
dalam penyimpanan yang dienkripsi dengan
kredensial. Oleh karena itu,
baik sistem maupun aplikasi apa pun tidak dapat mengakses data tersebut kecuali
isUserUnlocked()
menampilkan true
, yang terjadi setelah salah satu kondisi berikut terpenuhi:
- Pengguna membuka kunci perangkatnya untuk pertama kalinya setelah memulai sistem.
- Pengguna beralih ke akunnya di perangkat.
Jika aplikasi Anda sudah terikat pada instance
UsageStatsManager
, pastikan
apakah Anda memanggil metode pada objek ini setelah pengguna membuka kunci perangkatnya.
Jika tidak, API akan menampilkan nilai kosong atau null.
Dukungan emulator untuk 5G
Android 11 menambahkan 5G API untuk memungkinkan
aplikasi Anda menambahkan fitur mutakhir. Untuk menguji fitur saat menambahkannya,
Anda dapat menggunakan kemampuan baru emulator
Android SDK. Fungsi
baru ditambahkan di Emulator versi 30.0.22. Memilih setelan jaringan
5G akan menetapkan
TelephonyDisplayInfo
ke
OVERRIDE_NETWORK_TYPE_NR_NSA
,
mengubah perkiraan bandwidth, dan memungkinkan Anda menyetel nilai berbayar untuk memverifikasi
bahwa aplikasi Anda merespons perubahan
status NET_CAPABILITY_TEMPORARILY_NOT_METERED
dengan tepat.
Performa dan proses debug
Proses debug batasan pemanggilan JobScheduler API
Android 11 menawarkan dukungan proses debug untuk aplikasi guna mengidentifikasi
potensi pemanggilan JobScheduler
API yang telah melampaui batas kapasitas tertentu.
Developer dapat menggunakan fasilitas ini untuk mengidentifikasi potensi masalah performa. Untuk
aplikasi dengan atribut manifes debuggable
yang ditetapkan ke benar, pemanggilan JobScheduler
API
yang melampaui batas kapasitas akan menampilkan RESULT_FAILURE
.
Pembatasan ditetapkan agar kasus penggunaan yang sah tidak terpengaruh.
File descriptor sanitizer (fdsan)
Android 10 memperkenalkan fdsan
(file descriptor sanitizer).
fdsan
mendeteksi kesalahan penanganan kepemilikan deskriptor file, seperti
use-after-close dan double-close. Mode default untuk fdsan
berubah di
Android 11. fdsan
sekarang akan dibatalkan setelah mendeteksi error;
perilaku sebelumnya adalah mencatat log peringatan dan melanjutkan proses. Jika Anda menemukan error
karena fdsan
di aplikasi Anda, referensikan
fdsan documentation
.
Pembatasan antarmuka non-SDK
Android 11 menyertakan daftar terbaru antarmuka non-SDK yang dibatasi berdasarkan kolaborasi dengan developer Android dan pengujian internal terbaru. Jika memungkinkan, kami akan memastikan ketersediaan alternatif publik sebelum membatasi antarmuka non-SDK.
Jika aplikasi Anda tidak menargetkan Android 11, beberapa perubahan ini mungkin tidak langsung memengaruhi Anda. Namun, meskipun saat ini Anda dapat menggunakan beberapa antarmuka non-SDK (bergantung pada API level target aplikasi Anda), penggunaan metode atau kolom non-SDK tetap sangat berisiko merusak aplikasi Anda.
Jika tidak yakin apakah aplikasi Anda menggunakan antarmuka non-SDK atau tidak, Anda dapat menguji aplikasi untuk mencari tahu. Jika aplikasi Anda mengandalkan antarmuka non-SDK, sebaiknya mulailah merencanakan migrasi ke alternatif SDK. Meskipun begitu, kami paham bahwa beberapa aplikasi memiliki kasus penggunaan yang valid untuk menggunakan antarmuka non-SDK. Jika tidak dapat menemukan alternatif penggunaan antarmuka non-SDK untuk fitur dalam aplikasi Anda, sebaiknya minta API publik baru.
Untuk mempelajari perubahan dalam rilis Android ini lebih lanjut, baca Update pembatasan antarmuka non-SDK di Android 11. Untuk mempelajari antarmuka non-SDK secara umum lebih lanjut, baca Pembatasan antarmuka non-SDK.
Library bersama Maps v1 dihapus
Library bersama Maps v1 telah dihapus sepenuhnya di Android 11. Library ini sebelumnya sudah tidak digunakan lagi dan berhenti berfungsi untuk aplikasi di Android 10. Aplikasi yang sebelumnya mengandalkan library bersama ini untuk perangkat yang menjalankan Android 9 (API level 28) atau yang lebih rendah harus menggunakan Maps SDK untuk Android.
Interaksi dengan aplikasi lain
Berbagi URI konten
Jika aplikasi berbagi URI konten dengan aplikasi lain, intent tersebut harus memberikan izin akses URI
dengan menetapkan setidaknya salah satu flag intent berikut:
FLAG_GRANT_READ_URI_PERMISSION
dan
FLAG_GRANT_WRITE_URI_PERMISSION
.
Dengan begitu, jika aplikasi lain menargetkan Android 11, aplikasi masih dapat mengakses URI
konten. Aplikasi Anda harus menyertakan flag intent meskipun URI konten
dikaitkan dengan penyedia konten yang bukan milik aplikasi Anda.
Jika aplikasi Anda memiliki penyedia konten yang dikaitkan dengan URI konten, verifikasi bahwa penyedia konten tidak diekspor. Kami telah merekomendasikan praktik terbaik keamanan ini.
Library sedang dimuat
Memuat library umum ICU dengan jalur absolut
Aplikasi yang menargetkan API 28 dan yang lebih rendah tidak dapat menggunakan dlopen(3)
untuk memuat libicuuc
dengan jalur absolut "/system/lib/libicuuc.so". Untuk aplikasi tersebut,
dlopen("/system/lib/libicuuc.so", ...)
akan menampilkan handle null.
Sebagai gantinya, untuk memuat library, gunakan nama library sebagai nama file, misalnya
dlopen("libicuuc.so", ...)
.