Google Android手機的軟體為了安全性和穩定性都是預設安裝到手機記憶體裡,但是手機記憶體有限,所以我們會做app2sd操作,來讓我們安裝的軟體放到sd卡上,這個操作是需要rom的支援的。
Android 2.2 可以將手機程式安裝在外置的sd卡上,也就是我們平常所說的app2sd。但是,官方的app2sd非常雞肋,需要軟體自身支援安裝在記憶卡上才可以,也就是說用官方的app2sd,要把程式安裝在記憶卡上,並不是我們使用者說了算,而是軟體開發人員說了算。經測試安裝60多個軟體,其中僅有可憐的5個程式能使用官方的app2sd安裝在記憶卡上。所以,官方的這個app2sd就是忽悠人的。當然,現在很多第三方ROM都內建了第三方的app2sd,可以將任何程式都安裝在sd卡上。
在正式介紹app2sd之前,我先要介紹下android系統的幾個比較重要的目錄,這是理解後面內容的基礎。
/system 存放的是rom的資訊;/system/app 存放rom本身附帶的軟體即系統軟體;/system/data 存放/system/app 中核心系統軟體的資料檔案資訊。
/data 存放的是使用者的軟體資訊(非內建rom安裝的軟體);/data/app 存放使用者安裝的軟體;/data/data 存放所有軟體(包括/system/app 和 /data/app 和 /mnt/asec中裝的軟體)的一些lib和xml檔案等資料資訊;/data/dalvik-cache 存放程式的快取檔案,這裡的檔案都是可以刪除的。
/mnt 目錄,熟悉linux的人都清楚,linux預設掛載外部裝置都會掛到這個目錄下面去,如將sd卡掛載上去後,會產生一個/mnt/sdcard 目錄。
/sdcard 目錄,這是一個軟連結(相當於windows的檔案夾的捷徑),連結到/mnt/sdcard 目錄,即這個目錄的內容就是sdcard的內容。
在Android 2.2之後的版本允許將應用程式安裝於SD卡,每一個安裝在SD卡的應用程式,都可以在SD卡中的/sdcard/.android_secure 目錄裡找到名稱中有出現它的程式名,和副檔案名稱為asec的經過特殊加密處理後的檔案。當SD卡掛載於手機時,/mnt/sdcard/.android_secure 目錄會被映射到/mnt/asec 目錄和 /mnt/secure 目錄。其中/mnt/asec 目錄中主要是程式的安裝目錄,包括其執行檔案和lib檔案等;而/mnt/secure 目錄中就存放程式加密後的檔案。也就是說,在/mnt路徑下看到的/mnt/asec目錄和/mnt/secure目錄並不是真正存在在手機記憶體或者sd卡的分區掛載目錄,它們只是/mnt/sdcard/.android_secure目錄的一個影像而已。
因此,使用者程式安裝到到sd卡上後,其內容可能分散到:/mnt/asec , /mnt/secure , /data/data 。
要實現app2sd,目前比較流行有兩種方案,分別是app2ext 和 data2ext,下面分別介紹下這2種方案。
在Linux檔案系統中,有一種特別的檔案叫“軟連結”,類似於Windows下的捷徑,軟連結可以把一個檔案或者檔案夾映射到別的地方,一個例子如上面介紹的/sdcard 就是/mnt/sdcard 的軟連結。
app2ext的原理是,刪除data區中的app檔案夾,然後在sd卡的ext分區上建立一個app檔案,並通過軟連結映射到data區。這樣系統會以為,app這個軟連結是一個真實的檔案夾,會把程式都安裝在裡面,但實際上,這些程式都安裝到卡上了。但由於作業系統並不知道,所以這種情況下,我們依然看到系統顯示這個程式是安裝在“內建空間”的。
data2ext則更徹底,它不是用軟連結,而是直接用“掛載”功能,Linux下所有的存放裝置都必須掛載成一個檔案夾才能進行檔案操作(如sd卡就掛載在/mnt/sdcard目錄下面)。data檔案夾本來是對應手機內部Flash中的一個分區(為了保持術語的準確,這裡要把內部Flash和記憶體相區別,內部Flash是ROM,記憶體是RAM)。而data2ext則是修改了掛載對應關係,使data檔案夾掛載的不是內建Flash,而是sd卡的整個ext分區。這樣,不僅是app,連儲存程式設定的data和緩衝dalvik-cache都會儲存到sd卡中。
可以看到,dalvik-cache和data這兩個檔案夾的位置,是這兩種方式的一個重大區別。其中dalvik-cache是虛擬機器先行編譯緩衝,data(不同於/data,這個是/data/data)是儲存程式資料的地方,例如遊戲的存檔記錄,軟體的配置資訊等。這樣有什麼區別,區別在於假如你重刷了ROM,app2ext的話,所有的程式都可以保留,但是這些程式的配置資訊和遊戲的存檔都會丟失。而data2ext則可以連同配置和存檔都保留,但是dalvik-cache也是一個容易積累垃圾的地方,這些垃圾也會一同保留。
data2ext由於是把整個data分區都放在sd卡上,因此,我們刷ROM需要WIPE的時候,這個data分區的內容就可能不會被wipe,這可以儲存使用者的設定檔,但是也可能造成系統莫名其妙的故障。
摘自:http://www.hiapk.com/viewthread.php?tid=465392&page=4