Android 不分区使用link2sd(app2ext APP2SD)

来源:互联网 发布:fedora和ubuntu 编辑:程序博客网 时间:2024/05/17 07:04

KEYWORDS: SD卡上创建创建ext2、ext3、ext4文件 挂载SD卡上的EXT分区文件

 

最近换了张SD卡,由于某些原因不能分区,老卡用了link2sd,很多程序装在了ext分区里,为了在新卡中继续使用link2sd,于是有了这篇文章。

 

一开始想的很简单,在SD卡中建立一个sdext文件用loop挂载到/data/sdext就行了,后来发现这种做法因为绕过了Android的vold导致Framework上层无法识别SD卡,最直接的影响就是相机提示未插入SD卡。于是对脚本改进等待vold挂载sd后再挂载loop,发现此时已经太晚,已经错过了Framework识别apk的过程,虽然sdext挂载上了,程序依然无法运行,一个临时的解决办法是使用link2sd的快速重启功能(即只重启UI),这样程序和SD卡都可以正常使用了,美中不足的是安到ext分区程序的桌面widget就显示不正常了。几经周折,查阅android源码,终于弄明白了SD卡的挂载流程,于是有了以下的完美解决方案:

/etc/init.d 中建立启动脚本20sdext

#!/system/bin/sh#init.d中的脚本是在vold启动之前执行的(参见init.rc、/system/bin/sysinit),所以要nohupnohup /data/sdsh/sd.sh > /data/sdsh/sd.log
 

/data/sdsh/sd.sh

#!/system/bin/shwhile [ true ] ;do   #挂载参数是严格从源码里抄的,有出入的话可能产生权限问题,上层依旧无法读写SD卡,挂载点自己新建了个文件夹,不影响vold的挂载流程  mount -t vfat -o nodev,nosuid,dirsync,noexec,utf8,uid=1000,gid=1015,fmask=0602,dmask=0602,shortname=mixed /dev/block/mmcblk0p1 /data/sdsh/sdcard  mount -t ext3 /data/sdsh/sdcard/sdext /data/sdext2  if [ $? -eq 0 ];then     break  fisleep 1donemount echo "$(date) mount finished"

 

至此,挂载SD卡上的EXT分区文件完美解决!

 

 

 

这就是为什么我喜欢开源,有问题你总是可以找到解决的办法。只有想不到,没有做不到。

 

Ps:参考文章:

在线Vold源码:source-android.frandroid.com/system/vold/

Android挂载SD卡的流程:http://blog.csdn.net/gzshun/article/category/958018


原创粉丝点击