1. app2sd是什么
app2sd就是把应用程序放在SD卡上。有些android手机的用户数据分区(userdata)比较小(比如G1只有76M),dalvik和cache和用户数据就占了大半,使得安装了几个软件后就没有空间了。为了安装更多软件,在SD卡上划出部分空间用于存在新软件和数据,使我们的手机可以使用更多软件。
2. 原理
一般情况下都SD卡都默认分成一个windows可识别的分区(FAT)。因为有linux系统的权限问题,为了让它可以存放软件,需要把SD卡的一部分划分成Linux的使用的ext2文件系统,然后在开机时把此分区挂载到某处,并通过链接的方法,让系统从SD卡中读取软件
3. 实现
1) SD卡分区
a) 使用Linux系统中的工具fdisk,它是命令行工具,很快很简单
b) Windows下的图形化工具
具体步骤见http://www.3haoweb.cn/a/digital/mobile/2010/0609/2273.html
2) 修改boot.img使得新分区在启动时被自动挂载
a) 说明:
i. 也可以从网上下载带app2sd功能的update.zip包,升级整个系统,但是那样的话还要备份设置、数据、软件太麻烦,所以我选择修改我手机中自带的boot.img,以最小的修改来实现功能
ii. 修改boot.img中的initrc(系统启动时运行的脚本,自动挂载SD卡的ext2分区)
b) boot.img是什么
boot.img包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk内存盘(系统基本目录结构的镜像档),然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)
c) 修改本机的boot.img包
i. 使用nandroid备份数据
任何对系统的修改都要先备份系统数据
ii. 从机器中取出当前的boot.img
$ export PATH=$PATH:$ANDROID_DIR/out/host/linux-x86/bin/
$ adb shell
# cat /proc/mtd/ 查看boot对应的mtdx,一般是mtd2
# cat /dev/mtd/mtd2 > /sdcard/boot.img 假设boot对应mtd2
# mkdir /system/sd1 建立目录以挂载分区
# exit
$ adb pull /sdcard/boot.img ./ 复制到PC中
iii. 解包
下载工具split_boot.img.pl
http://cid-f8aecd2a067a6b17.office.live.com/self.aspx/.Public/android/reference/split^_bootimg.zip
$ ./split_boot.img.pl boot.img 解包,解出内核和ramdisk包两部分
$ mkdir ramdisk; cd ramdisk
$ gzip -dc ../boot.img-ramdisk.gz |cpio -i
iv. 修改启动脚本
$ vi init.rc 如果是乱码,请使用reset命令恢复一下
在mount 最后加入
mount ext2 /dev/block/mmcblk0p2 /system/sd1 rw
v. 重新打包
$ cd ../
$ mkbootfs ramdisk |gzip > ramdisk-new.gz
$ mkbooting --cmdline ‘no_console_suspend=1 console=null’ --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot_new.img
(mkbootfs,mkbootimg可以android源码包中取得,和adb在一个目录)
vi. 烧写新包到手机
$ adb push boot_new.img /sdcard
$ adb shell
# cat /dev/zero > /dev/mtd/mtd2 (可能找错没空间,没关系)
# flash_image boot /sdcard/boot_new.im
vii. 验证是否成功
然后重启手机即可,重启后用以下命令看一下是否分区是否被挂载
$ adb shell
$ df 如果看到/system/sd1项就成功了
3) 做链接,使系统从SD卡读取软件
建立只对软件安装目录做修改(/data/app),这样拨出SD后除了后来安装的软件不能使用之外,不影响手机基本功能的使用
$ adb shell
# mkdir /system/sd1/data/
# cd /system/sd1/data/
# busybox cp -a /data/app ./ 建议做
# busybox cp -a /data/app-private ./ 不建议做
# busybox cp -a /data/dalvik-cache ./ 不建议做
# busybox cp -a /data/data ./ 不建议做
# rm -r /data/app
# ln -s /system/sd1/data/app /data/app
……
其它目录以此类推
然后重启手机即可
4) 注意
由于launcher数据库的关系,可能桌面上看不到原来的那些应用了,不过主菜单里是有的,再建一遍快捷方式即可