Penyimpanan yang dapat diadaptasi

Android selalu mendukung aksesori penyimpanan eksternal (seperti kartu SD), tetapi aksesori ini secara historis terbatas pada penyimpanan file sederhana, karena sifatnya yang tidak permanen dan perlindungan data minimal yang ditawarkan ke penyimpanan eksternal tradisional. Android 6.0 memperkenalkan kemampuan untuk mengadaptasi media penyimpanan eksternal agar berfungsi seperti penyimpanan internal.

Saat media penyimpanan eksternal diadopsi, media tersebut akan diformat dan dienkripsi agar hanya berfungsi dengan satu perangkat Android dalam satu waktu. Karena media sangat terikat dengan perangkat Android yang mengadopsinya, media dapat menyimpan aplikasi dan data pribadi dengan aman untuk semua pengguna.

Saat pengguna memasukkan media penyimpanan baru (seperti kartu SD) di lokasi yang dapat diadopsi, Android akan menanyakan cara mereka ingin menggunakan media tersebut. Mereka dapat memilih untuk menggunakan media, yang memformat dan mengenkripsinya, atau mereka dapat terus menggunakannya seperti apa adanya untuk penyimpanan file sederhana. Jika pengguna memilih untuk mengadopsi, platform akan menawarkan untuk memigrasikan konten penyimpanan bersama utama (biasanya dipasang di /sdcard) ke media yang baru diadopsi, sehingga mengosongkan ruang yang berharga di penyimpanan internal. Tidak seperti penyimpanan tradisional, yang dibatasi hingga 2 TB karena penggunaan MBR, penyimpanan yang dapat diadopsi menggunakan GPT sehingga memiliki batas penyimpanan file sebesar ~9 ZB.

Aplikasi hanya dapat ditempatkan di media penyimpanan yang diadopsi jika developer telah menunjukkan dukungan melalui atribut android:installLocation. Penginstalan baru aplikasi yang didukung secara otomatis ditempatkan di perangkat penyimpanan dengan ruang kosong terbanyak, dan pengguna dapat memindahkan aplikasi yang didukung di antara perangkat penyimpanan di aplikasi Setelan. Aplikasi yang dipindahkan ke media yang diadopsi akan diingat saat media dikeluarkan, dan ditampilkan kembali saat media dimasukkan kembali.

Keamanan

Platform ini secara acak membuat kunci enkripsi untuk setiap perangkat yang diadopsi dan menyimpannya di penyimpanan internal perangkat Android. Tindakan ini secara efektif membuat media yang diadopsi sama aman dengan penyimpanan internal. Kunci dikaitkan dengan perangkat yang diadopsi berdasarkan GUID partisi yang diadopsi.

Jika perangkat dikonfigurasi untuk menggunakan enkripsi berbasis file (FBE) di penyimpanan internalnya, penyimpanan yang dapat diadopsi akan menggunakan FBE dan enkripsi metadata. Jika tidak, penyimpanan yang dapat diadopsi akan menggunakan enkripsi disk penuh (FDE).

Tata letak di disk perangkat yang diadopsi sangat mencerminkan partisi data internal, termasuk label SELinux, dll. Jika multi-pengguna didukung di perangkat Android, perangkat penyimpanan yang diadopsi juga mendukung multi-pengguna dengan tingkat isolasi yang sama seperti penyimpanan internal.

Karena konten perangkat penyimpanan yang diadopsi sangat terkait dengan perangkat Android yang mengadopsinya, kunci enkripsi tidak boleh diekstrak dari perangkat induk, sehingga perangkat penyimpanan tidak dapat dipasang di tempat lain.

Jika perangkat Anda menggunakan FBE, lihat dokumentasi FBE dan dokumentasi enkripsi metadata untuk mengetahui cara mengonfigurasi FBE dan enkripsi metadata di penyimpanan yang dapat diadopsi.

Performa dan stabilitas

Hanya media penyimpanan eksternal di lokasi yang stabil, seperti slot di dalam kompartemen baterai atau di belakang penutup pelindung, yang harus dipertimbangkan untuk diadopsi guna membantu menghindari kehilangan atau kerusakan data yang tidak disengaja. Secara khusus, perangkat USB yang terhubung ke ponsel atau tablet tidak boleh dipertimbangkan untuk diadopsi. Satu pengecualian umum adalah drive USB eksternal yang terhubung ke perangkat gaya TV, karena seluruh TV biasanya dipasang di lokasi yang stabil.

Saat pengguna menggunakan perangkat penyimpanan baru, platform akan menjalankan benchmark dan membandingkan performanya dengan penyimpanan internal. Jika perangkat yang diadopsi secara signifikan lebih lambat daripada penyimpanan internal, platform akan memperingatkan pengguna tentang kemungkinan pengalaman yang menurun. Benchmark ini berasal dari perilaku I/O aktual aplikasi Android populer. Saat ini, implementasi AOSP hanya akan memberi peringatan kepada pengguna di luar satu nilai minimum, tetapi produsen perangkat dapat menyesuaikannya lebih lanjut, seperti menolak adopsi sepenuhnya jika kartu sangat lambat.

Perangkat yang diadopsi harus diformat dengan sistem file yang mendukung izin POSIX dan atribut yang diperluas, seperti ext4 atau f2fs. Untuk performa yang optimal, sistem file f2fs direkomendasikan untuk perangkat penyimpanan berbasis flash.

Saat melakukan pemeliharaan tidak ada aktivitas berkala, platform akan mengeluarkan FI_TRIM ke media yang diadopsi seperti yang dilakukan untuk penyimpanan internal. Spesifikasi kartu SD saat ini tidak mendukung perintah DISCARD; tetapi kernel kembali ke perintah ERASE, yang dapat dipilih firmware kartu SD untuk tujuan pengoptimalan.

Pengujian

Untuk menguji apakah penyimpanan yang dapat diadopsi berfungsi, jalankan pengujian CTS ini:

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

Untuk memverifikasi perilaku drive USB dan kartu SD saat perangkat tidak memiliki slot bawaan atau saat konektor USB digunakan untuk koneksi adb aktif, gunakan:

adb shell sm set-virtual-disk true