淺談android中的目錄結構

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 。
轉自:http://bbs.2cto.com/read.php?tid=254821php


    要實現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,這能夠保存用戶的我的資料,可是也可能形成系統莫名其妙的故障。linux

相關文章
相關標籤/搜索