Penyimpanan tradisional

Ikon HAL penyimpanan eksternal Android

Android mendukung perangkat dengan penyimpanan tradisional, yang ditentukan sebagai sistem file yang tidak peka huruf besar/kecil dengan mode dan class izin POSIX yang tidak dapat diubah. Istilah penyimpanan tradisional mencakup penyimpanan portabel dan yang diemulasi. Penyimpanan portabel didefinisikan sebagai penyimpanan eksternal yang tidak diadopsi oleh sistem sehingga tidak diformat dan dienkripsi atau terikat dengan perangkat tertentu. Karena penyimpanan eksternal tradisional menawarkan perlindungan minimal untuk data yang disimpan, kode sistem tidak boleh menyimpan data sensitif di penyimpanan eksternal. Secara khusus, file konfigurasi dan log hanya boleh disimpan di penyimpanan internal tempat file tersebut dapat dilindungi secara efektif.

Penyimpanan eksternal multi-pengguna

Mulai Android 4.2, perangkat dapat mendukung beberapa pengguna, dan penyimpanan eksternal harus memenuhi batasan berikut:

  • Setiap pengguna harus memiliki penyimpanan eksternal utama yang terisolasi, dan tidak boleh memiliki akses ke penyimpanan eksternal utama pengguna lain.
  • Jalur /sdcard harus di-resolve ke penyimpanan eksternal primer khusus pengguna yang benar berdasarkan pengguna yang menjalankan proses.
  • Penyimpanan untuk file OBB besar di direktori Android/obb dapat dibagikan di antara beberapa pengguna sebagai pengoptimalan.
  • Penyimpanan eksternal sekunder tidak boleh ditulis oleh aplikasi, kecuali di direktori khusus paket seperti yang diizinkan oleh izin gabungan.

Implementasi platform default untuk fitur ini memanfaatkan namespace kernel Linux untuk membuat tabel pemasangan terisolasi bagi setiap proses yang di-fork Zygote, lalu menggunakan pemasangan bind untuk menawarkan penyimpanan eksternal primer khusus pengguna yang benar ke namespace pribadi tersebut.

Saat booting, sistem akan memasang satu daemon FUSE penyimpanan eksternal yang diemulasi di EMULATED_STORAGE_SOURCE, yang disembunyikan dari aplikasi. Setelah fork Zygote, aplikasi akan mengikat dan memasang subdirektori khusus pengguna yang sesuai dari bawah daemon FUSE ke EMULATED_STORAGE_TARGET sehingga jalur penyimpanan eksternal di-resolve dengan benar untuk aplikasi. Karena aplikasi tidak memiliki titik pemasangan yang dapat diakses untuk penyimpanan pengguna lain, aplikasi hanya dapat mengakses penyimpanan untuk pengguna yang memulainya.

Implementasi ini juga menggunakan fitur kernel sub-pohon bersama untuk menyebarkan peristiwa pemasangan dari namespace root default ke namespace aplikasi, yang memastikan bahwa fitur seperti penampung ASEC dan pemasangan OBB terus berfungsi dengan benar. Hal ini dilakukan dengan memasang rootfs sebagai bersama, lalu memasang ulang sebagai slave setelah setiap namespace Zygote dibuat.

Beberapa perangkat penyimpanan eksternal

Mulai Android 4.4, beberapa perangkat penyimpanan eksternal ditampilkan kepada developer melalui Context.getExternalFilesDirs(), Context.getExternalCacheDirs(), dan Context.getObbDirs().

Perangkat penyimpanan eksternal yang muncul melalui API ini harus merupakan bagian semi-permanen dari perangkat (seperti slot kartu SD di kompartemen baterai). Developer mengharapkan data yang disimpan di lokasi ini tersedia dalam jangka waktu yang lama. Oleh karena itu, perangkat penyimpanan sementara (seperti drive penyimpanan massal USB) tidak boleh ditampilkan melalui API ini.

Izin WRITE_EXTERNAL_STORAGE hanya boleh memberikan akses tulis ke penyimpanan eksternal utama di perangkat. Aplikasi tidak boleh diizinkan untuk menulis ke perangkat penyimpanan eksternal sekunder, kecuali dalam direktori khusus paketnya seperti yang diizinkan oleh izin yang disintesis. Membatasi operasi tulis dengan cara ini memastikan sistem dapat membersihkan file saat aplikasi di-uninstal.

Dukungan media USB

Android 6.0 mendukung perangkat penyimpanan portabel yang hanya terhubung ke perangkat dalam waktu singkat, seperti flash drive USB. Saat pengguna memasukkan perangkat portabel baru, platform akan menampilkan notifikasi untuk mengizinkan mereka menyalin atau mengelola konten perangkat tersebut.

Di Android 6.0, setiap perangkat yang tidak diadopsi dianggap portabel. Karena penyimpanan portabel hanya terhubung dalam waktu singkat, platform ini menghindari operasi berat seperti pemindaian media. Aplikasi pihak ketiga harus melalui Storage Access Framework untuk berinteraksi dengan file di penyimpanan portabel; akses langsung secara eksplisit diblokir karena alasan privasi dan keamanan.