设为首页收藏本站

移动叔叔

搜索
查看: 3589|回复: 0
打印 上一主题 下一主题

有关app2sd的资料

[复制链接]
跳转到指定楼层
楼主
发表于 2010-10-24 17:26:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
教程类
教程类: 知识分享
这几天刷完双系统一直因android的小内存所困扰,也因此在网上寻找相关app2sd的教程,发现一般的教程都是基于修改过的rom所进行的,我也照着做了一下,方法也行不通,今天无事有在网上寻找,看到了一篇不错的文章,是基于原厂未修改过的rom进行的app2sd的。唯一的关键点是有懂对boot.img解包修改及封装的高手。只要稍微改动修改其中的init.rc文件,在其中mount一段中,加下以下一行:
     mount ext2 /dev/block/mmcblk0p2 /system/sd rw
就可以使用了。下面是原帖内容。大家可以看看有没有在a1-上实现的可能。

本帖最后由 大苦瓜 于 2010-3-30 11:23 编辑

注意:这是一个原理性验证过程,虽然偶现在就是这样在N1上实现APP2SD的,但您一定要读完整个帖子再决定你是否要干这个事!切记切记!
       APP2SD,顾名思义就是把APP程序装到SD卡中,特别适合那些整天泡电子市场,嫌N1内存不够的N友。
       网上有很多在G1~G5上刷ROM实现APP2SD的帖子,用APP2SD作关键字在坛子里搜索就能找到很。这些帖子里面有关如何分区,如何装busybox,如何用adb shell等都讲得很详细,偶就不再重复了。以下所有操作的假设的是,N1已经unlock并且root了,在/data里装了busybox并可以跑起来。至于SD卡的分区,偶是用N1 刷recovery后,在recovery里带的Partition 工具做的。这种做法又快又方便,也不用在PC里装一堆东西。偶的一张8G卡,swap分的是0(表示不分SWAP),ext2是640MB,剩余的给FAT32。
      下面言归正转,汇报验证的过程:
1、创建目录,加载分区
      分好区并reboot后,那个640MB的ext2分区是不会被N1自动加载的,更不会像坛子里很多APP2Sd教程说的那样,自动挂到/system/sd目录下。依次做以下操作(下文凡是#开头的内容均表示在Shell里的命令行操作):
      adb shell
     # ls -l /dev/block
     如果看到有一个mmcblk0p2,就说明分区是成功的,下面是偶的N1上显示的结果,注意标为蓝色字体那一行。
drwxr-xr-x root     root              2010-03-29 23:33 vold
brw------- root     root     179,   2 2010-03-29 23:33 mmcblk0p2
brw------- root     root     179,   1 2010-03-29 23:33 mmcblk0p1
brw------- root     root     179,   0 2010-03-29 23:33 mmcblk0
brw------- root     root      31,   6 2010-03-29 23:33 mtdblock6
brw------- root     root      31,   5 2010-03-29 23:33 mtdblock5
brw------- root     root      31,   4 2010-03-29 23:33 mtdblock4
brw------- root     root      31,   3 2010-03-29 23:33 mtdblock3
brw------- root     root      31,   2 2010-03-29 23:33 mtdblock2
brw------- root     root      31,   1 2010-03-29 23:33 mtdblock1
brw------- root     root      31,   0 2010-03-29 23:33 mtdblock0
brw------- root     root       7,   7 2010-03-29 23:33 loop7
brw------- root     root       7,   6 2010-03-29 23:33 loop6
brw------- root     root       7,   5 2010-03-29 23:33 loop5
brw------- root     root       7,   4 2010-03-29 23:33 loop4
brw------- root     root       7,   3 2010-03-29 23:33 loop3
brw------- root     root       7,   2 2010-03-29 23:33 loop2
brw------- root     root       7,   1 2010-03-29 23:33 loop1
brw------- root     root       7,   0 2010-03-29 23:33 loop0
       接着看一下分区被加载的情况
       #/data/busybox/df -h
       显示的内容是这样的:
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   193.1M         0    193.1M   0% /dev
tmpfs                     4.0M         0      4.0M   0% /sqlite_stmt_journals
/dev/block/mtdblock3    145.0M    114.1M     30.9M  79% /system
/dev/block/mtdblock5    196.3M      4.5M    191.8M   2% /data
/dev/block/mtdblock4     95.0M      1.6M     93.4M   2% /cache
/dev/block//vold/179:1
                          6.8G     35.1M      6.8G   1% /sdcard
     注意,在这里可以看到前面分那个640MB的ext2分区是没有被N1加截的,但6.8G的FAT32分区已经被N1自动加载了。
    我们要做的是在/system下建一个叫sd的子目录,并把640MB的ext2分区加载到/system/sd目录上。
    由于/system是只读的,要先remount加上写权限才能创建sd子目录,执行以下两行命令解锁只读和创建SD子目录:
    #mount -o remount rootfs /
    #mkdir /system/sd
    这样/system/sd目录就建好了。接着把640MB的分区mount上去,执行以下命令:
    #mount -t ext2 /dev/block/mmcblk0p2 /system/sd
    上述命令执行完,如果再用df -h命令去看,就会发现多一行输出,像下面这样的:
/dev/block/mmcblk0p2    572.4M     14.0k    541.8M   0% /system/sd
    这就说明SD卡上分的ext2分区已经被挂到/system/sd上了,也就说/system/sd是一个有640MB空间的目录。接下来,就可以参考坛子里前辈有关APP2SD的操作,把应用从/data/app迁移到/system/sd目录中去了。爱学习的童鞋可以参考这篇http://www.hiapk.com/bbs/thread-2341-1-1.html ,以下是偶操作的所有命令:
1)在新分区上建应用子目录
     # mkdir /system/sd/app
2)把应用程序数据复制过去,有4个目录要复制
    # ./cp -a /data/app /system/sd/
    # ./cp -a /data/app-private /system/sd/
    # ./cp -a /data/dalvik-cache /system/sd/
    # ./cp -a /data/data /system/sd/
3)删掉/data目录中与app相关的内容,也就是删除上述4个目录,一边删除一边用ln关联指向到新的SD卡分区上,完成应用迁移
    # ./rm -rf /data/app
    # ./ln -s /system/sd/app /data/app
    # ./rm -rf /data/app-private
    # ./ln -s /system/sd/app-private /data/app-private
    # ./rm -rf /data/data
    # ./ln -s /system/sd/data /data/data
    # ./rm -rf /data/dalvik-cache
    # ./ln -s /system/sd/dalvik-cache /data/dalvik-cache
     上述操作做完后,应用就已经迁移到SD卡了。经偶测试,内存确实释放了,到电子市场里新下载应用也会自动装到SD卡上。但是,这个帖子没有解决的一个问题是,如果重启N1,就了!重启后,机子会一直停留在播放光线动画的界面,进不了系统。此时要把机子通过USB线和电脑接起来,进ADB shell,然后执行#mount -t ext2 /dev/block/mmcblk0p2 /system/sd命令,机子才能顺利启动。
    这也是这个帖子之所以叫原理性验证的原因。
以上过程证明,Nexus one是可以像早前的G1、G2....一样,做到APP2SD的,而且是用原厂的ROM就能做到(偶没刷新过其他的ROM)。但上述方法的缺憾是,由于不能把mount ext2分区的指令加入到N1的自动启动SHELL里,导致每次重启都要连PC,通过ADB  SHELL手工MOUNT,因此实用性不强。为解决这个问题,偶已经努力学习了一番,应该说已经找到下一步解决这个问题的思路,先汇报如下:
1、导出本机的boot.img,解开后,修改其中的init.rc文件,在其中mount一段中,加下以下一行:
     mount ext2 /dev/block/mmcblk0p2 /system/sd rw
2、重新封装boot.img,flash回本机,这样就可以实现完美的Nexus one APP2SD。
     上面话说起来是简单,但改boot.img是一个复杂的过程,需要Ubuntu的LINUX环境。由于偶还没有真正掌握如何改boot.img,因此上述两步还没做。偶已经查到一个网上介绍修改boot.img的帖子,链接是:http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images 。或者请哪位高人学学雷锋,改一个boot.img出来,贡献给大家用,其中,基于ERE27的boot.img应该是适用所有Update到2.1的N1手机的。
**********----
3月30日补充建议只有class6的卡才做APP2SD,否则会慢得让人难以忍受。如果是Class6的卡,其读取/写入速度约为19MB/S和6MB/秒。可以用一个名ATTO Disk Benchmark的免费软件测试。后面这个链接给出了一个如何测试SD卡读取速度的例子:http://www.zol.com/labs/638718_20729.html
**********----
您需要登录后才可以回帖 登录 | 注册

© 2008-2025 移动叔叔. 版权所有,专业的网络售后平台 ( 闽ICP备18006692号-3 )

商务合作点击这里给我发消息|Email:service@mobileuncle.com|手机版|移动叔叔     

GMT+8, 2025-1-17 01:16 , Processed in 0.149936 second(s), 12 queries , Gzip On, Memcache On.

返回顶部