Google Android手機(jī)的軟件為了安全性和穩(wěn)定性都是默認(rèn)安裝到手機(jī)內(nèi)存里,但是手機(jī)內(nèi)存有限,所以我們會(huì)做app2sd操作,來(lái)讓我們安裝的軟件放到sd卡上,這個(gè)操作是需要rom的支持的。
Android 2.2 可以將手機(jī)程序安裝在外置的sd卡上,也就是我們平常所說(shuō)的app2sd。但是,官方的app2sd非常雞肋,需要軟件自身支持安裝在內(nèi)存卡上才可以,也就是說(shuō)用官方的app2sd,要把程序安裝在內(nèi)存卡上,并不是我們使用者說(shuō)了算,而是軟件開發(fā)者說(shuō)了算。經(jīng)測(cè)試安裝60多個(gè)軟件,其中僅有可憐的5個(gè)程序能使用官方的app2sd安裝在內(nèi)存卡上。所以,官方的這個(gè)app2sd就是忽悠人的。當(dāng)然,現(xiàn)在很多第三方ROM都自帶了第三方的app2sd,可以將任何程序都安裝在sd卡上。
在正式介紹app2sd之前,我先要介紹下android系統(tǒng)的幾個(gè)比較重要的目錄,這是理解后面內(nèi)容的基礎(chǔ)。
/system 存放的是rom的信息;/system/app 存放rom本身附帶的軟件即系統(tǒng)軟件;/system/data 存放/system/app 中核心系統(tǒng)軟件的數(shù)據(jù)文件信息。
/data 存放的是用戶的軟件信息(非自帶rom安裝的軟件);/data/app 存放用戶安裝的軟件;/data/data 存放所有軟件(包括/system/app 和 /data/app 和 /mnt/asec中裝的軟件)的一些lib和xml文件等數(shù)據(jù)信息;/data/dalvik-cache 存放程序的緩存文件,這里的文件都是可以刪除的。
/mnt 目錄,熟悉linux的人都清楚,linux默認(rèn)掛載外部設(shè)備都會(huì)掛到這個(gè)目錄下面去,如將sd卡掛載上去后,會(huì)生成一個(gè)/mnt/sdcard 目錄。
/sdcard 目錄,這是一個(gè)軟鏈接(相當(dāng)于windows的文件夾的快捷方式),鏈接到/mnt/sdcard 目錄,即這個(gè)目錄的內(nèi)容就是sdcard的內(nèi)容。
在Android 2.2之后的版本允許將應(yīng)用程序安裝于SD卡,每一個(gè)安裝在SD卡的應(yīng)用程序,都可以在SD卡中的/sdcard/.android_secure 目錄里找到名稱中有出現(xiàn)它的程序名,和副文件名為asec的經(jīng)過(guò)特殊加密處理后的檔案。當(dāng)SD卡掛載于手機(jī)時(shí),/mnt/sdcard/.android_secure 目錄會(huì)被映射到/mnt/asec 目錄和 /mnt/secure 目錄。其中/mnt/asec 目錄中主要是程序的安裝目錄,包括其執(zhí)行文件和lib文件等;而/mnt/secure 目錄中就存放程序加密后的檔案。也就是說(shuō),在/mnt路徑下看到的/mnt/asec目錄和/mnt/secure目錄并不是真正存在在手機(jī)內(nèi)存或者sd卡的分區(qū)掛載目錄,它們只是/mnt/sdcard/.android_secure目錄的一個(gè)影像而已。
因此,用戶程序安裝到到sd卡上后,其內(nèi)容可能分散到:/mnt/asec , /mnt/secure , /data/data 。
要實(shí)現(xiàn)app2sd,目前比較流行有兩種方案,分別是app2ext 和 data2ext,下面分別介紹下這2種方案。
在Linux文件系統(tǒng)中,有一種特別的文件叫“軟鏈接”,類似于Windows下的快捷方式,軟鏈接可以把一個(gè)文件或者文件夾映射到別的地方,一個(gè)例子如上面介紹的/sdcard 就是/mnt/sdcard 的軟鏈接。
app2ext的原理是,刪除data區(qū)中的app文件夾,然后在sd卡的ext分區(qū)上創(chuàng)建一個(gè)app文件,并通過(guò)軟鏈接映射到data區(qū)。這樣系統(tǒng)會(huì)以為,app這個(gè)軟鏈接是一個(gè)真實(shí)的文件夾,會(huì)把程序都安裝在里面,但實(shí)際上,這些程序都安裝到卡上了。但由于操作系統(tǒng)并不知道,所以這種情況下,我們依然看到系統(tǒng)顯示這個(gè)程序是安裝在“內(nèi)置空間”的。
data2ext則更徹底,它不是用軟鏈接,而是直接用“掛載”功能,Linux下所有的存儲(chǔ)設(shè)備都必須掛載成一個(gè)文件夾才能進(jìn)行文件操作(如sd卡就掛載在/mnt/sdcard目錄下面)。data文件夾本來(lái)是對(duì)應(yīng)手機(jī)內(nèi)部Flash中的一個(gè)分區(qū)(為了保持術(shù)語(yǔ)的準(zhǔn)確,這里要把內(nèi)部Flash和內(nèi)存相區(qū)別,內(nèi)部Flash是ROM,內(nèi)存是RAM)。而data2ext則是修改了掛載對(duì)應(yīng)關(guān)系,使data文件夾掛載的不是內(nèi)置Flash,而是sd卡的整個(gè)ext分區(qū)。這樣,不僅是app,連存儲(chǔ)程序設(shè)置的data和緩存dalvik-cache都會(huì)存儲(chǔ)到sd卡中。
可以看到,dalvik-cache和data這兩個(gè)文件夾的位置,是這兩種方式的一個(gè)重大區(qū)別。其中dalvik-cache是虛擬機(jī)預(yù)編譯緩存,data(不同于/data,這個(gè)是/data/data)是存儲(chǔ)程序數(shù)據(jù)的地方,例如游戲的存檔記錄,軟件的配置信息等。這樣有什么區(qū)別,區(qū)別在于假如你重刷了ROM,app2ext的話,所有的程序都可以保留,但是這些程序的配置信息和游戲的存檔都會(huì)丟失。而data2ext則可以連同配置和存檔都保留,但是dalvik-cache也是一個(gè)容易積累垃圾的地方,這些垃圾也會(huì)一同保留。
data2ext由于是把整個(gè)data分區(qū)都放在sd卡上,因此,我們刷ROM需要WIPE的時(shí)候,這個(gè)data分區(qū)的內(nèi)容就可能不會(huì)被wipe,這可以保存用戶的個(gè)人資料,但是也可能造成系統(tǒng)莫名其妙的故障。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。