Perubahan perilaku: semua aplikasi

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 intent ACTION_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 metode getSubscriptionId() 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 menetapkan TelephonyDisplayInfo ke OVERRIDE_NETWORK_TYPE_NR_NSA, mengubah estimasi bandwidth, dan memungkinkan Anda menetapkan status koneksi berbayar untuk memverifikasi bahwa aplikasi Anda merespons dengan tepat perubahan NET_CAPABILITY_TEMPORARILY_NOT_METERED status.

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.

Pemuatan library

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", ...).