Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Penyimpanan Tercakup

Penyimpanan tercakup membatasi akses aplikasi ke penyimpanan eksternal. Di Android 11 atau lebih tinggi, aplikasi yang menargetkan API 30 atau lebih tinggi harus menggunakan penyimpanan terbatas. Sebelumnya di Android 10, aplikasi dapat memilih keluar dari penyimpanan terbatas.

Pembatasan akses aplikasi

Tujuan penyimpanan terbatas adalah untuk melindungi privasi aplikasi dan data pengguna. Ini termasuk melindungi informasi pengguna (seperti metadata foto), mencegah aplikasi mengubah atau menghapus file pengguna tanpa izin eksplisit, dan melindungi dokumen sensitif pengguna yang diunduh ke Download atau folder lain.

Aplikasi yang menggunakan penyimpanan terbatas dapat memiliki tingkat akses berikut (akses sebenarnya tergantung pada implementasi).

  • Akses baca dan tulis ke file mereka sendiri tanpa izin
  • Akses baca ke file media aplikasi lain dengan izin READ_EXTERNAL_STORAGE
  • Akses tulis ke file media aplikasi lain hanya diperbolehkan dengan pengguna langsung persetujuan (pengecualian diberikan kepada Galeri dan aplikasi Sistem yang memenuhi syarat untuk akses All Files)
  • Tidak ada akses baca atau tulis ke direktori data aplikasi eksternal aplikasi lain

Menggunakan penyimpanan terbatas dengan FUSE

Android 11 atau lebih tinggi mendukung Filesystem in Userspace (FUSE), yang memungkinkan modul MediaProvider memeriksa operasi file di ruang pengguna dan untuk menyimpan akses ke file berdasarkan kebijakan untuk mengizinkan , menolak , atau menghapus akses. Aplikasi dalam penyimpanan terbatas yang menggunakan FUSE mendapatkan fitur privasi penyimpanan terbatas dan kemampuan untuk mengakses file menggunakan jalur file langsung (menjaga API File tetap berfungsi di aplikasi).

Android 10 memberlakukan aturan penyimpanan terbatas pada akses file oleh MediaProvider, tetapi tidak untuk akses jalur file langsung (misalnya, menggunakan API File dan API NDK) karena upaya yang diperlukan dalam mencegat panggilan kernel. Akibatnya, aplikasi dalam penyimpanan terbatas tidak dapat mengakses file menggunakan jalur file langsung. Pembatasan ini memengaruhi kemampuan pengembang aplikasi untuk beradaptasi karena diperlukan perubahan kode yang substansial untuk menulis ulang akses API File ke MediaProvider API.

FUSE dan SDCardFS

Dukungan Android 11 untuk FUSE tidak terkait dengan penghentian SDCardFS , tetapi menyediakan alternatif untuk Media Store untuk perangkat yang sebelumnya menggunakan SDCardFS. Perangkat:

  • Meluncurkan dengan Android 11 atau lebih tinggi menggunakan kernel 5.4 atau lebih tinggi tidak dapat menggunakan SDCardFS.
  • Mengupgrade ke Android 11 atau lebih tinggi dapat menghosting FUSE di atas SDCardFS untuk menghalangi operasi file dan memenuhi tujuan privasi.

Penyetelan kinerja FUSE

Android sebelumnya mendukung FUSE di Android 7 atau lebih rendah, di mana penyimpanan eksternal dipasang sebagai FUSE. Karena masalah kinerja dan kebuntuan dengan implementasi FUSE itu, Android 8 memperkenalkan SDCardFS. Android 11 memperkenalkan kembali dukungan untuk FUSE menggunakan implementasi libfuse yang lebih baik dan teruji lebih baik yang dapat disetel untuk menyelesaikan masalah kinerja di Android 7 atau yang lebih rendah.

Penyetelan FUSE mencakup penyesuaian berikut:

  • Melewati FUSE untuk direktori Android/data dan Android/obb guna meningkatkan kinerja aplikasi game yang mengandalkan direktori ini.
  • Pengoptimalan (seperti menyetel rasio read-ahead dan dirty dari sistem file FUSE) untuk menjaga performa pembacaan dan pemutaran media tetap lancar.
  • Menggunakan cache tulis kembali FUSE.
  • Izin cache untuk mengurangi IPC ke server sistem.
  • Pengoptimalan untuk aplikasi dengan akses Semua File untuk membuat operasi massal lebih cepat.

Penyesuaian tuning di atas dapat menghasilkan kinerja yang sebanding antara perangkat FUSE dan non-FUSE. Misalnya, pengujian Pixel 2 yang disetel menggunakan FUSE dan Pixel 2 menggunakan Media Store menemukan performa pembacaan berurutan yang sebanding (misalnya, pemutaran video) antara akses jalur file dan Media Store. Namun, penulisan berurutan sedikit lebih buruk dengan FUSE, dan pembacaan dan penulisan acak bisa dua kali lebih lambat.

Pengukuran kinerja dapat berubah dari perangkat ke perangkat dan di antara kasus penggunaan tertentu. Karena MediaProvider API memberikan kinerja yang paling konsisten, pengembang aplikasi yang memperhatikan kinerja harus menggunakan MediaProvider API untuk aplikasinya.

Mengurangi dampak kinerja FUSE

Dampak kinerja FUSE terbatas pada pengguna berat file yang disimpan di penyimpanan bersama eksternal saja. Penyimpanan pribadi eksternal (yang mencakup direktori android/data dan android/obb ) dilewati oleh FUSE, sedangkan penyimpanan internal (seperti /data/data , tempat banyak aplikasi menyimpan data untuk menjaganya tetap terenkripsi dan aman) tidak dipasang pada FUSE.

  • Aplikasi yang merupakan pengguna ringan penyimpanan eksternal bersama sering berinteraksi dengan sekumpulan file terbatas (biasanya kurang dari 100 file). Aplikasi ini mendapatkan keuntungan dari pengoptimalan operasi baca dan tulis umum yang sudah ada dan tidak akan melihat dampak kinerja terkait FUSE di Android 11.

  • Aplikasi yang merupakan pengguna berat penyimpanan eksternal bersama biasanya melakukan operasi file massal, seperti membuat daftar atau menghapus direktori dengan 1000 file, atau membuat atau menghapus direktori dengan satu juta file di sistem file. Operasi file massal mungkin dipengaruhi oleh FUSE di Android 11, tetapi jika aplikasi tersebut memenuhi syarat untuk izin MANAGE_EXTERNAL_STORAGE , mereka mendapatkan keuntungan dari pengoptimalan kinerja yang disertakan dalam pembaruan Oktober 2020.

Untuk menghindari kelebihan kinerja FUSE, aplikasi dapat menyimpan data di penyimpanan pribadi eksternal atau menggunakan API massal di kelas ContentProvider untuk melewati FUSE dan mendapatkan jalur yang dioptimalkan untuk kinerja. Selain itu, pembaruan Oktober 2020 untuk komponen sistem MediaProvider mencakup pengoptimalan kinerja untuk pengelola file dan aplikasi serupa (seperti pencadangan / pemulihan, antivirus) yang memegang izin MANAGE_EXTERNAL_STORAGE .

Privasi atas kinerja

Pada perangkat yang telah disetel untuk FUSE, sebagian besar perjalanan pengguna penting memiliki performa yang sama antara Android 10 dan Android 11. Namun, saat menguji tolok ukur melalui serangkaian operasi file, Android 11 mungkin berperforma lebih buruk daripada Android 10. Untuk pola akses file yang berperforma lebih buruk lagi di Android 11 (misalnya, pembacaan atau penulisan acak), kami merekomendasikan penggunaan MediaProvider API untuk memberi aplikasi mode akses non-FUSE, yang merupakan opsi terbaik dan berkinerja konsisten.

MediaProvider dan pembaruan FUSE

Perilaku komponen sistem MediaProvider berbeda di antara rilis Android.

  • Di Android 10 dan lebih rendah, SDCardFS adalah sistem file dan MediaProvider menyediakan antarmuka ke kumpulan file (misalnya, gambar, video, file musik, dll.). Saat aplikasi membuat file menggunakan File API, itu bisa meminta MediaProvider untuk memindai file dan merekamnya dalam database.

  • Di Android 11 atau lebih tinggi, SDCardFS tidak digunakan lagi dan MediaProvider menjadi penangan sistem file (untuk FUSE) untuk penyimpanan eksternal, membuat sistem file di penyimpanan eksternal dan database MediaProvider konsisten. Sebagai penangan ruang pengguna untuk sistem file FUSE, MediaProvider dapat mencegat panggilan kernel dan memastikan bahwa operasi file adalah privasi yang aman.

Di Android 11 dan lebih tinggi, MediaProvider juga merupakan komponen sistem modular (modul Mainline) yang dapat diupdate di luar rilis Android. Artinya, masalah kinerja, privasi, atau keamanan yang ditemukan di MediaProvider dapat diperbaiki dan dikirimkan melalui udara dari Google Play Store atau mekanisme lain yang disediakan mitra. Apa pun dalam lingkup apa yang diharapkan dari penangan FUSE juga dapat diperbarui, memungkinkan pembaruan untuk memperbaiki regresi dan bug kinerja FUSE.