关于app2sd、a2sd、data2sd、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或者豌豆荚类似的软件强制安装在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目录下的那三个目录,其实这个过程就是命令a2sdreinstall和a2sdcachesd的时候做的。a2sdreinstall主要的执行内容是将/data/app和/data/app-private目录下的程序分别拷贝到/sd-ext/app和/sd-ext/app-private目录下,然后将目录Link过去,同样a2sdcachesd是将/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或者豌豆荚的文件管理看到),但是主要的程序进入了app或者app-private目录下,缓存的数据进入到dalvik-cache目录下,/data/data不会占用太多空间,是可以接受的。这种方案的缺点是技术比较复杂,新手能够理解需要学习更多的知识(其实学会了会有成就感哦!)。但是这个顺应Android(Linux)技术,因为Ext3和Swap分区并不认为成SD卡,所以在电量不足的情况下,只是将Fat32那个分区的逻辑卷卸载,而不会触及Ext3和Swap分区,并且这种方案是最稳定的。我个人建议大家使用此方法。

以上是app2sd、a2sd、data2sd、a2sd+的介绍,希望大家能够理解。

相关推荐