我们知道,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


#一不小心写成了梨花体,借此向梨花姐姐致敬





更多相关文章

  1. Android(安卓)核心分析 之六 -----IPC框架分析 Binder,Service,Se.
  2. AppCompat实现Action Bar
  3. Android安装软件提示:“INSTALL_FAILED_DEXOPT”的解决方案
  4. android 控件的隐藏和显示
  5. Android直接连接数据库服务器
  6. Android(安卓)核心分析 -----IPC框架分析 Binder,Service,Service
  7. 四十四、Android之android:layout_weight详解
  8. Android(安卓)Study -- pmem driver代码分析
  9. Android如何实现计算缓存空间大小和删除缓存文件功能

随机推荐

  1. timestampdiff返回正确但负面的分钟
  2. 腾讯云数据库团队:GreenPlum简单性能测试
  3. CentOS使用MySQL的详细步骤,及C API编程
  4. MySQL中mysqldump导出数据的使用
  5. 现在开发用的都是PDO还是Mysqli
  6. 如何在php中测量mysql时间,sql查询的时间
  7. 【错误】:MySql Host is blocked because
  8. MariaDB 和 MySQL 全面对比:选择数据库需
  9. mysql管理之安全机制
  10. 在社交新闻网站上处理上/下投票