1.前言
从所有的Nexus手机和平板都没有MicroSd卡槽,可以知道谷歌并不喜欢在Android设备上使用外部存储,从软件工程师的角度来讲是可以理解的,但是主流消费者明显有更强烈的需求。在Android M系统中,谷歌观念发生了改变,终于提供了官方的方式让用户将应用移动到外部存储上,其新功能名字叫“Adoptable Storage Devices”。
2.Adoptable Storage Devcies的作用
Adoptable Storage Devices使系统获得了更大的存储容量,并且使用户可以自由移动应用和隐私数据到外部存储设备,不在需要第三方工具。用户使用Android设备时,可以主动的选择把外部存储设备格式化为常规移动存储或者系统内部存储。在格式化时系统给了两种选择:(1)Use as portable storage(for moving photos and other media between divices),仅仅作为外部存储设备;(2)Use as internal storage(for storing anything on this device only,including apps and photos),包裹一个加密层后,能够作为内部存储空间存储应用和隐私数据,经过加密后,该存储设备就不能再被别的设备使用。
3.Adpotable Storage Decices实现过程
本节主要介绍从framework层到vold层的过程。主要涉及类如下:
StorageSettings–>StorageWizardInit–>StorageWizardFormatConfirm–>StorageWizardFormatProgress–>MountService–>NativeDaemonConnector–>commandlistener.cpp
3.1 当需要格式化时,用户进入格式化选择界面(StorageWizardInit类),在StorageSettings:: onPreferenceTreeClick()中DiskInitFragment.show(this, R.string.storage_dialog_unmountable, vol.getDiskId())将触发格式化选择界面。相关代码如下:
public static class DiskInitFragment extends DialogFragment {
…
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
…
builder.setPositiveButton(R.string.storage_menu_set_up,