Google berkomitmen untuk memajukan ekuitas ras untuk komunitas kulit hitam. Lihat bagaimana.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Penyimpanan

Ikon HAL penyimpanan eksternal Android

Android telah berkembang dari waktu ke waktu untuk mendukung berbagai jenis dan fitur perangkat penyimpanan. Semua versi perangkat pendukung Android dengan penyimpanan tradisional , yang mencakup penyimpanan portabel dan emulasi. Penyimpanan portabel dapat disediakan oleh media fisik, seperti kartu SD atau USB, yaitu untuk transfer data sementara / penyimpanan file. Media fisik dapat tetap bersama perangkat untuk jangka waktu yang lama, tetapi tidak terikat pada 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 memaparkan sebagian penyimpanan internal melalui lapisan emulasi dan telah tersedia sejak Android 3.0.

Dimulai pada Android 6.0, Android mendukung penyimpanan yang dapat diadopsi , 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 izin WRITE_EXTERNAL_STORAGE . Mulai di Android 4.1, akses baca dilindungi dengan izin READ_EXTERNAL_STORAGE .

Mulai Android 4.4, pemilik, grup, dan mode file pada perangkat penyimpanan eksternal sekarang disintesis berdasarkan struktur direktori. Ini memungkinkan aplikasi untuk mengelola direktori khusus paket mereka pada penyimpanan eksternal tanpa mengharuskan mereka memegang izin WRITE_EXTERNAL_STORAGE luas. Misalnya, 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 dilakukan dengan membungkus perangkat penyimpanan mentah dalam daemon FUSE.

Mulai di Android 10, aplikasi yang menargetkan Android 9 dan menurunkan standar ke penyimpanan lawas, dan dapat memilih untuk penyimpanan terisolasi. Aplikasi yang menargetkan Android 10 dan default ke penyimpanan terisolasi untuk sementara dapat menyisih dari itu. Gunakan atribut manifest requestLegacyExternalStorage , yang mengontrol model penyimpanan, untuk mengubah keadaan default.

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

Jika penginstal mendaftar masuk 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 ketika aplikasi menargetkan Android 9 atau lebih rendah dan tidak memilih penyimpanan terpisah, atau menargetkan Android 10 dan memilih keluar.

Status daftar putih hanya dapat ditentukan pada waktu instalasi, dan tidak dapat diubah sampai aplikasi telah diinstal.

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

Izin runtime

Android 6.0 memperkenalkan model izin runtime baru di mana aplikasi meminta kemampuan saat dibutuhkan saat runtime. Karena model baru menyertakan izin READ/WRITE_EXTERNAL_STORAGE , platform perlu memberikan akses penyimpanan secara dinamis tanpa membunuh atau memulai kembali 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 hidup.
  • /mnt/runtime/read ditampilkan ke aplikasi dengan READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE untuk Android 10)
  • /mnt/runtime/write ditampilkan ke aplikasi dengan WRITE_EXTERNAL_STORAGE

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

setns() 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.