zoukankan      html  css  js  c++  java
  • 转载:Android a2sd各种版本和技术解释

    From: http://como0925.pixnet.net/blog/post/29390286-%5Bandroid%5D%E9%97%9C%E6%96%BCapp2sd,a2sd,data2sd,a2sd%2B%E4%B9%8B%E9%96%93%E7%9A%84%E5%8D%80%E5%88%A5%E5%92%8C

    首先解釋一下這些縮寫,全部的意思就是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分區,並且這種方案是最穩定的。

  • 相关阅读:
    (转载)C++ string中find() ,rfind() 等函数 用法总结及示例
    UVA 230 Borrowers (STL 行读入的处理 重载小于号)
    UVA 12100 打印队列(STL deque)
    uva 12096 The SetStack Computer(STL set的各种库函数 交集 并集 插入迭代器)
    uva 1592 Database (STL)
    HDU 1087 Super Jumping! Jumping! Jumping!
    hdu 1176 免费馅饼
    HDU 1003 Max Sum
    转战HDU
    hust 1227 Join Together
  • 原文地址:https://www.cnblogs.com/super119/p/2769897.html
Copyright © 2011-2022 走看看