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

Penyimpanan

Ikon HAL penyimpanan eksternal Android

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

Mulai di Android 6.0, Android mendukung penyimpanan adoptable , yang disediakan oleh media fisik, seperti kartu SD atau USB, yang dienkripsi dan diformat untuk 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 di Android 1.0, akses tulis dilindungi dengan WRITE_EXTERNAL_STORAGE izin. Mulai di Android 4.1, akses baca dilindungi dengan READ_EXTERNAL_STORAGE izin.

Mulai Android 4.4, pemilik, grup, dan mode file pada perangkat penyimpanan eksternal kini disintesis berdasarkan struktur direktori. Hal ini memungkinkan aplikasi untuk mengelola direktori paket-spesifik mereka pada penyimpanan eksternal tanpa memerlukan mereka memegang luas WRITE_EXTERNAL_STORAGE izin. Sebagai contoh, aplikasi dengan nama paket com.example.foo sekarang dapat dengan bebas mengakses Android/data/com.example.foo/ pada perangkat penyimpanan eksternal tanpa izin. Izin yang disintesis ini dicapai dengan membungkus perangkat penyimpanan mentah dalam daemon FUSE.

Mulai di Android 10, apps target Android 9 dan standar yang lebih rendah untuk penyimpanan warisan, dan dapat memilih untuk penyimpanan terisolasi. Aplikasi target Android 10 dan standar untuk penyimpanan terisolasi dapat sementara memilih keluar dari itu. Menggunakan atribut manifest requestLegacyExternalStorage , yang mengontrol model penyimpanan, untuk mengubah keadaan default.

Karena kedua READ_EXTERNAL_STORAGE dan WRITE_EXTERNAL_STORAGE hak akses yang lembut dibatasi, jika installer tidak daftar putih aplikasi, kontrol izin akses ke koleksi aural dan visual saja, tanpa akses ke kartu SD. Ini berlaku bahkan jika aplikasi meminta penyimpanan lama. Untuk informasi lebih lanjut tentang kedua pembatasan keras dan pembatasan lembut, lihat keras dan pembatasan lembut di Android 10 .

Jika penginstal mengizinkan izin, aplikasi yang berjalan dalam mode lama mendapatkan perilaku izin yang tidak terisolasi. Izin mengontrol akses kartu SD, dan koleksi aural dan visual. Ini terjadi saat aplikasi menargetkan Android 9 atau lebih rendah dan tidak memilih untuk menggunakan penyimpanan terisolasi, atau menargetkan Android 10 dan memilih untuk tidak ikut.

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

Untuk informasi lebih lanjut tentang pengaturan READ_EXTERNAL_STORAGE izin, lihat setWhitelistedRestrictedPermissions() di PackageInstaller.SessionParams kelas.

Izin waktu proses

Android 6.0 memperkenalkan baru izin runtime Model mana aplikasi meminta kemampuan bila diperlukan pada saat runtime. Karena model baru termasuk READ/WRITE_EXTERNAL_STORAGE izin, kebutuhan platform ke akses penyimpanan dinamis hibah tanpa membunuh atau restart aplikasi yang sudah berjalan. Ini dilakukan dengan mempertahankan tiga tampilan berbeda dari semua perangkat penyimpanan yang terpasang:

  • /mnt/runtime/default ditampilkan untuk aplikasi tanpa izin penyimpanan khusus, dan untuk namespace akar di mana adbd dan komponen sistem lainnya hidup.
  • /mnt/runtime/read ditampilkan untuk aplikasi dengan READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE untuk Android 10)
  • /mnt/runtime/write ditunjukkan untuk aplikasi dengan WRITE_EXTERNAL_STORAGE

Pada waktu fork Zygote, kami membuat mount namespace untuk setiap aplikasi yang berjalan dan mengikat mount tampilan awal yang sesuai ke tempatnya. Kemudian, ketika izin runtime diberikan, vold melompat ke mount namespace dari yang sudah-menjalankan aplikasi dan tunggangan mengikat upgrade pandangan ke tempat. Perhatikan bahwa penurunan izin selalu mengakibatkan aplikasi dimatikan.

The setns() fungsi yang digunakan untuk mengimplementasikan fitur ini memerlukan setidaknya Linux 3.8, tapi patch telah backported berhasil untuk Linux 3.4. The PermissionsHostTest uji CTS dapat digunakan untuk memverifikasi perilaku kernel yang benar.