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

Penyimpanan

Ikon HAL penyimpanan eksternal Android

Android telah berevolusi dari waktu ke waktu untuk mendukung berbagai jenis dan fitur perangkat penyimpanan. Semua versi Android mendukung perangkat dengan penyimpanan tradisional , yang meliputi penyimpanan portabel dan penyimpanan yang ditiru. Penyimpanan portabel dapat disediakan oleh media fisik, seperti kartu SD atau USB, yaitu untuk transfer data/penyimpanan file sementara. Media fisik mungkin tetap berada di perangkat untuk waktu yang lama, tetapi tidak terikat ke perangkat dan dapat dihapus. Kartu SD telah tersedia sebagai penyimpanan portabel sejak Android 1.0; Android 6.0 menambahkan dukungan USB. Penyimpanan yang ditiru disediakan dengan mengekspos sebagian penyimpanan internal melalui lapisan emulasi dan telah tersedia sejak Android 3.0.

Mulai Android 6.0, Android mendukung penyimpanan yang dapat diadopsi , yang disediakan oleh media fisik, seperti kartu SD atau USB, yang dienkripsi dan diformat agar berperilaku seperti penyimpanan internal. Penyimpanan yang dapat diadopsi dapat menyimpan semua jenis data aplikasi.

Izin

Akses ke penyimpanan eksternal dilindungi oleh berbagai izin Android. Mulai Android 1.0, akses tulis dilindungi dengan izin WRITE_EXTERNAL_STORAGE . Mulai Android 4.1, akses baca dilindungi dengan izin READ_EXTERNAL_STORAGE .

Mulai Android 4.4, pemilik, grup, dan mode file di perangkat penyimpanan eksternal kini disintesis berdasarkan struktur direktori. Ini memungkinkan aplikasi untuk mengelola direktori khusus paket mereka pada penyimpanan eksternal tanpa mengharuskan mereka memegang izin WRITE_EXTERNAL_STORAGE yang luas. Misalnya, aplikasi dengan nama paket com.example.foo sekarang dapat dengan bebas mengakses Android/data/com.example.foo/ di perangkat penyimpanan eksternal tanpa izin. Izin yang disintesis ini dilakukan dengan membungkus perangkat penyimpanan mentah dalam daemon FUSE.

Mulai Android 10, aplikasi yang menargetkan Android 9 dan lebih rendah secara default menggunakan penyimpanan lama, dan dapat ikut serta ke penyimpanan terisolasi. Aplikasi yang menargetkan Android 10 dan secara default menggunakan penyimpanan terisolasi dapat menyisih darinya untuk sementara . Gunakan atribut manifes requestLegacyExternalStorage , yang mengontrol model penyimpanan, untuk mengubah status default.

Karena izin READ_EXTERNAL_STORAGE dan WRITE_EXTERNAL_STORAGE dibatasi secara lunak, jika penginstal tidak memasukkan aplikasi ke daftar putih, izin mengontrol akses ke koleksi aural dan visual saja, tanpa akses ke kartu SD. Ini berlaku bahkan jika aplikasi meminta penyimpanan lama. Untuk informasi selengkapnya tentang pembatasan keras dan pembatasan lunak, lihat Pembatasan keras dan lunak di Android 10 .

Jika penginstal memasukkan izin ke dalam daftar putih, aplikasi yang berjalan dalam mode lawas mendapatkan perilaku izin yang tidak terisolasi. Izin mengontrol akses kartu SD, dan koleksi aural dan visual. Hal ini terjadi jika aplikasi menargetkan Android 9 atau lebih rendah dan tidak ikut serta ke penyimpanan terisolasi, atau menargetkan Android 10 dan memilih tidak ikut.

Status daftar putih hanya dapat ditentukan pada waktu penginstalan, dan tidak dapat diubah hingga aplikasi diinstal.

Untuk informasi selengkapnya tentang menyetel izin READ_EXTERNAL_STORAGE , lihat setWhitelistedRestrictedPermissions() di kelas PackageInstaller.SessionParams .

Android 13 memperkenalkan izin media terperinci untuk mendukung aplikasi yang mengakses file media yang dibuat oleh aplikasi lain. Aplikasi harus meminta satu atau beberapa izin media terperinci yang tercantum di Izin media terperinci , bukan izin READ_EXTERNAL_STORAGE .

Izin waktu proses

Android 6.0 memperkenalkan model izin waktu proses baru tempat aplikasi meminta kemampuan saat diperlukan saat waktu proses. Karena model baru menyertakan izin READ/WRITE_EXTERNAL_STORAGE , platform perlu memberikan akses penyimpanan secara dinamis tanpa mematikan atau memulai ulang aplikasi yang sudah berjalan. Ini dilakukan dengan mempertahankan tiga tampilan berbeda dari semua perangkat penyimpanan yang terpasang:

  • /mnt/runtime/default ditampilkan ke aplikasi tanpa izin penyimpanan khusus, dan ke root namespace tempat adbd dan komponen sistem lainnya berada.
  • /mnt/runtime/read ditampilkan ke aplikasi dengan READ_EXTERNAL_STORAGE (Setel LEGACY_STORAGE untuk Android 10)
  • /mnt/runtime/write ditampilkan ke aplikasi dengan WRITE_EXTERNAL_STORAGE

Pada waktu garpu Zygote, kami membuat mount namespace untuk setiap aplikasi yang berjalan dan mengikat mount tampilan awal yang sesuai ke tempatnya. Kemudian, saat izin runtime diberikan, vold melompat ke mount namespace dari aplikasi yang sudah berjalan dan mengikat mount tampilan yang ditingkatkan ke tempatnya. Perhatikan bahwa penurunan izin selalu mengakibatkan aplikasi dimatikan.

Fungsionalitas setns() yang digunakan untuk mengimplementasikan fitur ini membutuhkan setidaknya Linux 3.8, tetapi tambalan telah berhasil di-backport ke Linux 3.4. Uji CTS PermissionsHostTest dapat digunakan untuk memverifikasi perilaku kernel yang benar.