本帖最后由 杨晓惠 于 2014-11-25 09:24 编辑 浅论虚拟SD卡在Android系统中的实现 我们知道,Android的设计中,SD卡(ExternalStorage)是非常重要 APK的manifest.xml中可以定义prefer external或auto 来选择安装到SD卡 有些APK在运行中需要SD卡来存储数据,而有些大型游戏需要大量的SD卡空间 这样如果系统没有接入SD卡,某些APK就会碰到安装或运行的问题 但对于现在的硬件平台,很多都内置了几个G的存储空间(Nand/iNand Flash) 放着这么大的空间不用,却要依赖于SD卡插入才能运行某些APK 这样似乎有点说不过去 所以要想办法把内置空间用起来 现在主流的做法是怎样的呢 三星、联想好像是这样做的 把内部flash mount为sdcard,然后把外部sd卡 mout到 /mnt/sdcard/下面的某个子目录 比如 /mnt/sdcard/externalsdcard 这种做法的优点是可以有一个一直存在的SD卡 缺点是内置flash要足够大,mediascanner中要增加/mnt/sdcard/externalsdcard的扫描、mount/unmount处理 而APK是没有机会安装到实际的外置SD卡上的 另外的一种办法是 在没有SD卡插入时把一部分内置flash mount到/mnt/sdcard 在SD卡插入时把实际SD卡重新mount到/mnt/sdcard 这种做法的优点是SD卡插入时APK会安装到实际SD卡上,可以把flash上的某个目录作为虚拟SD卡,比较灵活 缺点是相当于两个SD卡在切换,就是说安装到虚拟SD卡上的APK在第二个SD卡插入时消失 第一种的代码修改比较多,主要是增加/mnt/sdcard/externalsdcard设备的mount/unmount, mediascan处理 第二种的修改比较少,只需要在vold里面做workaround |