posts - 33, comments - 0, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          1.          app2sd是什么
          app2sd
          就是把應(yīng)用程序放在SD卡上。有些android手機(jī)的用戶數(shù)據(jù)分區(qū)(userdata)比較小(比如G1只有76M),dalvikcache和用戶數(shù)據(jù)就占了大半,使得安裝了幾個軟件后就沒有空間了。為了安裝更多軟件,在SD卡上劃出部分空間用于存在新軟件和數(shù)據(jù),使我們的手機(jī)可以使用更多軟件。

          2.          原理
          一般情況下都SD卡都默認(rèn)分成一個windows可識別的分區(qū)(FAT)。因?yàn)橛?/span>linux系統(tǒng)的權(quán)限問題,為了讓它可以存放軟件,需要把SD卡的一部分劃分成Linux的使用的ext2文件系統(tǒng),然后在開機(jī)時(shí)把此分區(qū)掛載到某處,并通過鏈接的方法,讓系統(tǒng)從SD卡中讀取軟件

          3.          實(shí)現(xiàn)

          1)         SD卡分區(qū)

          a)          使用Linux系統(tǒng)中的工具fdisk,它是命令行工具,很快很簡單

          b)         Windows下的圖形化工具
          具體步驟見http://www.3haoweb.cn/a/digital/mobile/2010/0609/2273.html

          2)         修改boot.img使得新分區(qū)在啟動時(shí)被自動掛載

          a)          說明:

                                                 i.              也可以從網(wǎng)上下載帶app2sd功能的update.zip包,升級整個系統(tǒng),但是那樣的話還要備份設(shè)置、數(shù)據(jù)、軟件太麻煩,所以我選擇修改我手機(jī)中自帶的boot.img,以最小的修改來實(shí)現(xiàn)功能

                                                ii.              修改boot.img中的initrc(系統(tǒng)啟動時(shí)運(yùn)行的腳本,自動掛載SD卡的ext2分區(qū))

          b)         boot.img是什么
          boot.img
          包括了2K的文件頭,后面緊跟著是用gzip壓縮過的內(nèi)核,再后面是一個ramdisk內(nèi)存盤(系統(tǒng)基本目錄結(jié)構(gòu)的鏡像檔),然后緊跟著第二階段的載入器程序(這個載入器程序是可選的,在某些映像中或許沒有這部分)

          c)          修改本機(jī)的boot.img

                                                 i.              使用nandroid備份數(shù)據(jù)
          任何對系統(tǒng)的修改都要先備份系統(tǒng)數(shù)據(jù)

                                                ii.              從機(jī)器中取出當(dāng)前的boot.img
          $ export PATH=$PATH:$ANDROID_DIR/out/host/linux-x86/bin/
          $ adb shell
          # cat /proc/mtd/
          查看boot對應(yīng)的mtdx,一般是mtd2
          # cat /dev/mtd/mtd2 > /sdcard/boot.img
          假設(shè)boot對應(yīng)mtd2
          # mkdir /system/sd1
          建立目錄以掛載分區(qū)
          # exit
          $ adb pull /sdcard/boot.img ./                 
          復(fù)制到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                  
          解包,解出內(nèi)核和ramdisk包兩部分
          $ mkdir ramdisk; cd ramdisk
          $ gzip -dc ../boot.img-ramdisk.gz |cpio -i

                                              iv.              修改啟動腳本
          $ vi init.rc 
          如果是亂碼,請使用reset命令恢復(fù)一下
          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.              燒寫新包到手機(jī)
          $ adb push boot_new.img /sdcard
          $ adb shell
          # cat /dev/zero > /dev/mtd/mtd2 (
          可能找錯沒空間,沒關(guān)系)
          # flash_image boot /sdcard/boot_new.im

                                             vii.              驗(yàn)證是否成功
          然后重啟手機(jī)即可,重啟后用以下命令看一下是否分區(qū)是否被掛載
          $ adb shell
          $ df 
          如果看到/system/sd1項(xiàng)就成功了

          3)         做鏈接,使系統(tǒng)從SD卡讀取軟件
          建立只對軟件安裝目錄做修改(/data/app),這樣撥出SD后除了后來安裝的軟件不能使用之外,不影響手機(jī)基本功能的使用
          $ 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

          ……
          其它目錄以此類推
          然后重啟手機(jī)即可

          4)         注意
          由于launcher數(shù)據(jù)庫的關(guān)系,可能桌面上看不到原來的那些應(yīng)用了,不過主菜單里是有的,再建一遍快捷方式即可

          4.          參考
          http://kb.cnblogs.com/a/1743704/


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 新乐市| 鄱阳县| 金乡县| 陆丰市| 临桂县| 虹口区| 塘沽区| 买车| 那曲县| 垣曲县| 东阿县| 德保县| 榕江县| 通辽市| 柳林县| 如东县| 广昌县| 界首市| 营口市| 西乌珠穆沁旗| 连南| 湾仔区| 康乐县| 济源市| 滨海县| 右玉县| 越西县| 周口市| 通河县| 石棉县| 如皋市| 鹤庆县| 博兴县| 离岛区| 新巴尔虎右旗| 元氏县| 瓦房店市| 河池市| 巧家县| 玉龙| 井陉县|