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數據庫的關系,可能桌面上看不到原來的那些應用了,不過主菜單里是有的,再建一遍快捷方式即可