转载:Android a2sd各种版本和技术解释
首先解釋一下這些縮寫,全部的意思就是Application To SD卡,就是說將應用安裝在卡上。為什麼要這麼做呢,那是因為HD2原版手機本地存儲只有512M(T版有1G的ROM空間),Android(MIUI)系統刷到手機內,主要有幾個目錄佔用了手機本地存儲:1、/system;2、/data、3;cache;4、 /boot等。這幾個目錄基本使用了512M的空間,我們在執行daf刷recovery的時候,其實就是對512M進行這幾個目錄的分區,其中主要佔用 512M空間的是/system和/data,而/system在使用過程中的增長不大,只要我們給足空間,讓刷機的ROM中/system目錄的文件總量能夠拷貝到/system分區就沒問題,目前MIUI的/system的目錄文件總量大概是105.36M,為了可能需要打補丁,我給到了128M,可能110M也夠,最早刷daf的recovery給/system有250M的空間,如果改為150或者128,就能夠給其他的分區比如/data增加 100M多空間(以為默認會將所有剩餘空間給到/data目錄)。/data是作為主要的軟件安裝地點,這裡除了安裝的軟件以及軟件的緩存都在這個目錄。那麼這個目錄最多也不過有不到300M空間(T版有800M的空間,不用太擔心),那麼像極品飛車這樣的軟件多安裝幾個,300M的空間很快就會被用光。那麼為了讓程序文件利用SD卡的空間,因此出現了app2sd、a2sd、data2sd、a2sd+的各種方案,其實這並不是MIUI的先例,在其他 Android手機上也是如此。那麼我就要分別說一下這四種方案的特點和區別:
(1)app2sd是google官方Android系統的一種官方方案,它類似WM將應用程序的部分主要執行文件放到SD卡上,這些文件是保存在 Fat32的SD卡上,這種方式不需要對SD卡做複雜分區,而是用Windows簡單格式化SD卡為Fat32分區就好,缺點就是並不是所有程序都能移動到卡上,因為有些程序需要常駐內存,並且在一些情況下,為了省電,可能需要斷開卡的供電,因此有可能導致程序運行出現問題。如果用91或者PC助手類似的軟件強制安裝在SD卡上,則會導致桌面插件不能正常運行。這也是我們不能接受的,所以這種方法基本玩家都不會採用。
(2)a2sd,其實在我搜索網絡的信息看到有兩種觀點,一是a2sd就是app2sd,二是a2sd就是a2sd+,通過我的分析,a2sd其實就是簡寫的app2sd,所以大家就把app2sd和a2sd都認為是官方提供的利用SD卡存儲程序文件的方案。這個和app2sd方案一樣,基本不被玩家採用。
(3)data2sd,這種技術類似於以前在卡上運行Android,這種方案是在卡上建立一個data.img的文件,其實這個文件就是系統 /data分區的數據,這種方案和以前在卡上運行這個Android方式類似,只不過除了data.img文件,其他文件都在手機存儲上。 data.img文件在Fat32分區的SD卡上,這種方式優勢是data.img文件大小可以比較自由的控制,從512M到2G甚至更多都可以設置,而且不用對SD卡進行複雜分區。但是問題是因為data.img在SD卡Fat32分區上,以前比如凍屏等類似問題還是存在,並且不能避免當手機電量不足,進入省電模式的時候會切斷SD卡供電,導致手機整體無**常運行。但是我看到很多朋友用data.img,主要是因為比較簡單,如果你是初學者,並且對我上面的教程關於分區的部分實在是搞不定,也可以採用這種方式(論壇有介紹,搜索一下data2sd,方法很簡單),但在我看來這並不是最佳的解決辦法,即使它的優點很多,但是缺點也很顯著。建議初級玩家使用,高級玩家不使用。
(4)a2sd+,從名字來看a2sd+只是比a2sd多了個+,但是技術是完全不一樣的。它採用的是將SD卡進行Andoird(Linux)可是別的分區進行使用SD卡的。因為採用了這種分區,從硬件上看雖然這些分區在SD卡上,但是Android則認為這是本地存儲硬件,大家可以通過超級終端在 /dev/block目錄下看到mmcblk0p1、mmcblk0p2、mmcblk0p3的文件,其實這就是我們做的Fat32、Ext3、Swap 分區的硬件名稱。我們則需要將/data目錄使用Ext3分區,那麼我們採用的是建立一個/sd-ext目錄,讓他加載(mount)mmcblk0p2(Ext3)這個分區,然後在/sd-ext下建立app、app-private、dalvik-cache三個目錄,然後利用Link技術,就是讓/data目錄下的app、app-private、dalvik-cache的目錄分別Link(Link技術是指將目錄連接到另一個目錄,在這兩個Link與被Link目錄裡做任何操作就相當於在被Link的目錄裡操作)到/sd-ext目錄下的那三個目錄,其實這個過程就是命令a2sd reinstall和a2sd cachesd的時候做的。a2sd reinstall主要的執行內容是將/data/app和/data/app-private目錄下的程序分別拷貝到/sd-ext/app和/sd- ext/app-private目錄下,然後將目錄Link過去,同樣a2sd cachesd是將/data/dalvik-cache目錄的文件拷貝到/sd-ext/dalvik-cache目錄下,然後將目錄Link過去。這樣我們的程序安裝在/data的這三個目錄下,實際上使用的是/sd-ext目錄所用的SD卡ext3分區的空間,因此大家發現安裝程序之後關於手機界面的手機存儲沒有太多變化。那麼app、app-private、dalvik-cache都是什麼呢?app是我們的apk程序所安裝的位置,如果你有加密的程序,則它會進入app-private的目錄,而dalvik-cache則是程序的緩存,這三個目錄佔用個主要的程序安裝所佔的空間,那麼大家依然會奇怪為什麼手機存儲依然會變小,只不過慢了一些。那是因為安裝程序的時候/data/data這個目錄也會有數據增加,但是不太多。但是a2sd+技術為什麼不將/data/data目錄也Link到/sd-ext目錄下,我認為可能/data/data需要更好的穩定性和速度,如果將/data /data目錄也Link到卡上,可能凍屏會出現,這純屬個人猜測。我曾經手動將/data/data轉移到/sd-ext的/data(我自己建立的目錄)下,系統會非常不穩定,而且有自動重啟現象。但是即使我們有不到300M的手機存儲(其實就是/data分區大小,可以用91或者PC助手的文件管理看到),但是主要的程序進入了app或者app-private目錄下,緩存的數據進入到dalvik-cache目錄下,/data/data不會佔用太多空間,是可以接受的。這種方案的缺點是技術比較複雜,新手能夠理解需要學習更多的知識(其實學會了會有成就感哦!)。但是這個順應Android(Linux)技術,因為Ext3和Swap分區並不認為成SD卡,所以在電量不足的情況下,只是將 Fat32那個分區的邏輯卷卸載,而不會觸及Ext3和Swap分區,並且這種方案是最穩定的。