解决Android系统中虚拟SD卡和真实SD卡二者的矛盾!
2013-04-03 17:06
274 查看
解决Android系统中虚拟SD卡和真实SD卡二者的矛盾!
因为手机存储理念的进化,现在Android4.1和4.2对虚拟SD卡和真实SD卡的表述有点复杂,如下:
虚拟SD卡,即系统设置中称为手机存储,习惯上称为内置SD卡,系统目录结构中又表述为/sdcard、/mnt/sdcard或/storage/sdcard0三种,有兼容性好,速度快的优势,但空间有限不能任意扩展;
真实SD卡,即系统设置中称为SD卡,习惯上称为外置SD卡,系统目录中又表述为/sdcard、/sdcard-ext、/mnt/sdcard2或/storage/sdcard1几种,容量大可自己选择,但有不兼容老应用,速度略慢的劣势;
而这也导致了种种使用上的问题,典型的如大型游戏数据包因容量大,无法放在虚拟SD卡目录,那放在真实SD卡中,却会造成游戏找不数据包。
而通过修改/system/etc/vold.fstab文件让内外卡互换的做法是修改目录与硬件设备的映射,虽然简单,但让却会存在各种问题,如不兼容某些应用、重刷系统后失效、每次互换都得重启、应用中表述混乱,应用找错合理的存储位置、浪费内置存储空间、降低系统运行速度、不兼容某些机型!
其实,现在很多软件,如高德导航5.X,支持手动或自动指定地图目录,Android4.1的照相机也会把照片存在真实SD卡上,EasyVoiceRecorder、CallRecorder等软件是支持自定义保存目录,而对于大型游戏的数据包和不能自定义存储目录的应用那怎么办呢?
经过再三考虑,为了适应大型游戏应用,不影响读写性能、让虚拟SD卡和真实SD卡优势互补,保证真实SD卡的目录结构整洁、系统运行中随时可变换、避免修改vold.fstab带来的各种问题,我决定回归本源,采用最早的做法,也最符合Linux的习惯——用自启动脚本来映射目录解决这个问题!
方法如下:
(以Android4.1中映射ColorDict的字典文件目录为例)
1.下载Script_Manager并安装;
2.在/storage/sdcard0(虚拟SD卡)和/storage/sdcard1(真实SD卡)两个分区的根目录各新建文件夹dictdata(ColorDict的字典文件目录);
3.打开Script_Manager,进入/storage/sdcard1分区根目录,“menu”-“新建”-“新建脚本”,输入脚本名字如“sdmnt.sh”,弹出“打开方式”界面中以文本编辑器的方式打开;
4.在文本编辑器中输入以下内容并保存:
#!/system/bin/sh
mount -o bind /storage/sdcard1/dictdata /storage/sdcard0/dictdata
5.按“返回”,在文件列表中找到“sdmnt.sh”并单击;
6.在弹出的界面中选择“Su”、“Boot”两个项目,点“保存”,再点“Run”执行,便可立即生效,你会发现虚拟SD卡的/dictdata指向真实SD卡/dictdata,实际上也是使用真实SD卡来进行读写,如果要增加其它目录映射,只需要编辑sdmnt.sh文件即可,编辑完不用重启,执行一下立即生效。
因为手机存储理念的进化,现在Android4.1和4.2对虚拟SD卡和真实SD卡的表述有点复杂,如下:
虚拟SD卡,即系统设置中称为手机存储,习惯上称为内置SD卡,系统目录结构中又表述为/sdcard、/mnt/sdcard或/storage/sdcard0三种,有兼容性好,速度快的优势,但空间有限不能任意扩展;
真实SD卡,即系统设置中称为SD卡,习惯上称为外置SD卡,系统目录中又表述为/sdcard、/sdcard-ext、/mnt/sdcard2或/storage/sdcard1几种,容量大可自己选择,但有不兼容老应用,速度略慢的劣势;
而这也导致了种种使用上的问题,典型的如大型游戏数据包因容量大,无法放在虚拟SD卡目录,那放在真实SD卡中,却会造成游戏找不数据包。
而通过修改/system/etc/vold.fstab文件让内外卡互换的做法是修改目录与硬件设备的映射,虽然简单,但让却会存在各种问题,如不兼容某些应用、重刷系统后失效、每次互换都得重启、应用中表述混乱,应用找错合理的存储位置、浪费内置存储空间、降低系统运行速度、不兼容某些机型!
其实,现在很多软件,如高德导航5.X,支持手动或自动指定地图目录,Android4.1的照相机也会把照片存在真实SD卡上,EasyVoiceRecorder、CallRecorder等软件是支持自定义保存目录,而对于大型游戏的数据包和不能自定义存储目录的应用那怎么办呢?
经过再三考虑,为了适应大型游戏应用,不影响读写性能、让虚拟SD卡和真实SD卡优势互补,保证真实SD卡的目录结构整洁、系统运行中随时可变换、避免修改vold.fstab带来的各种问题,我决定回归本源,采用最早的做法,也最符合Linux的习惯——用自启动脚本来映射目录解决这个问题!
方法如下:
(以Android4.1中映射ColorDict的字典文件目录为例)
1.下载Script_Manager并安装;
2.在/storage/sdcard0(虚拟SD卡)和/storage/sdcard1(真实SD卡)两个分区的根目录各新建文件夹dictdata(ColorDict的字典文件目录);
3.打开Script_Manager,进入/storage/sdcard1分区根目录,“menu”-“新建”-“新建脚本”,输入脚本名字如“sdmnt.sh”,弹出“打开方式”界面中以文本编辑器的方式打开;
4.在文本编辑器中输入以下内容并保存:
#!/system/bin/sh
mount -o bind /storage/sdcard1/dictdata /storage/sdcard0/dictdata
5.按“返回”,在文件列表中找到“sdmnt.sh”并单击;
6.在弹出的界面中选择“Su”、“Boot”两个项目,点“保存”,再点“Run”执行,便可立即生效,你会发现虚拟SD卡的/dictdata指向真实SD卡/dictdata,实际上也是使用真实SD卡来进行读写,如果要增加其它目录映射,只需要编辑sdmnt.sh文件即可,编辑完不用重启,执行一下立即生效。
相关文章推荐
- android调用系统相机和相册进行拍照裁剪处理,解决不同安卓版本存在无法加载相册的问题,处理了是否有sd卡的存在的情况
- 解决Android手机接收不到XP系统的虚拟热点信号
- Android安卓系统提示应用程序未安装的解决方法
- Android Service被系统回收的解决方法
- android 自定义弹出框被系统底部虚拟键盘挡住、Pad上点击空白区域弹出框不dismiss BUG解决
- Android虚拟机中创建虚拟SD卡
- Android系统利用uinput设备驱动实现虚拟输入设备
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
- android系统信息(内存、cpu、sd卡、电量、版本)获取
- 丢失Android系统库或者Conversion to Dalvik format failed with error 1错误的解决
- 解决android手机sd卡安装pak后直接打开,按home键异常问题
- android--- Linux Proc虚拟文件系统—Android CPU、内存、网络流量获取
- (4.1.35.2)Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
- Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
- Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
- Android 监听系统虚拟导航栏按键
- Android获取SD卡总容量,可用大小,机身内存总容量及可用大小的系统方法
- Android 虚拟设备(AVD)启动失败报 Failed to allocate memory: 8 解决方法
- Android跳转到系统Activity关闭并返回原Activity的解决办法
- Andoid应用更新,解决andrid5.0获取系统权限把下载APK存到SD卡中,版本号的比较,有手动更新和自动更新