`
kongweile
  • 浏览: 506856 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

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

分享到:
评论

相关推荐

    pcf8563_i2c1_r8_ruoge_ov2640通过给RTC驱动增加设备节点读取秒钟成功+直接读取I2C1获取秒钟值20160626_2201.7z

    pcf8563_i2c1_r8_ruoge_ov2640通过给RTC驱动增加设备节点读取秒钟成功+直接读取I2C1获取秒钟值20160626_2201.7z http://blog.csdn.net/21cnbao/article/details/7919055 在Android源码树中添加userspace I2C读写...

    ContentProvider

    arg2=(arg2==null||"".equals(arg2.trim()))? _id+"="+id:arg2+"and"+_id+"="+id; cursor=sqLiteDatabase.query(Table_Name, arg1, arg2, arg3, null, null,arg4); default: throw new ...

    QT,JPEG解码源代码(已完成)

    switch (Data[m_currentDataIndex+2]) { case 0x00: m_currentBitPosition=8; m_currentDataIndex+=2; m_currentData=0xFF; break; case 0xD9: return 0; break; default: m_currentBitPosition=8; m_...

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    Embrace the full stack of web development, from styling with Bootstrap, building an interactive user interface with Angular 2, to storing data quickly and reliably in PostgreSQL. With this fully ...

    QT,jpeg解码project(未完成)

    BYTE APP0[2]; /* 02h Application Use Marker */ BYTE Length[2]; /* 04h Length of APP0 Field */ BYTE Identifier[5]; /* 06h "JFIF" (zero terminated) Id String */ BYTE Version[2]; /* 0Bh JFIF Format ...

    49f47e3c111.xlsx

    最新国际疾病诊断编码库ICD-11,是非常全非常新的编码,我们公司项目正在使用,可用于电子病历提取、知识图谱构建

    ap6181调通SSH和SCP+ap6212a0_r16_tinav2.1.7z

    Tina wifi app demo R:\wyb\ap6181+ap6212a0_r16_tinav2.1\package\allwinner\wifimanager\demo\wifi_on_off_test.c R:\wyb\ap6181+ap6212a0_r16_tinav2.1\package\allwinner\wifimanager\demo\wifi_connect_ap....

    解决jar发布时的出现D:/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static

    springboot获取根目录及资源路径及解决jar发布时的出现D:/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static,采用该工具类可在发布成jar时访问到资源文件路径地址

    questionandanswer:问与答-NodeExpressAngularSequelizeMySQLPassport

    问题和答案 问与答应用程序-节点/快速/角度/序列化/ MySQL ... 在app.js末尾取消注释'dummyData'函数调用 请注意,todos.txt包含要在该应用程序上完成的其余工作**除非重构为使用https / ssl,否则此应用程序是不安全的

    三星9305收索

    [endif]--><style data-for="debug">#debug{display:none!important}</style><style index="index">#u1 a:link,#u1 a:visited{color:#666;text-decoration:none}#u1 a:hover,#u1 a:active{text-decoration:underline...

    RAD Studio 10.2 Toyko Update2 10.2.2 KEYGEN 亲测可用

    RAD Studio 10.2 Toyko Update2 10.2.2 KEYGEN 一键激活,安装时选择试用,安装完毕后一键激活即可。亲测可用!! Win10 Build 16299 旗舰版 亲测可用!!! 为了便于在 Lite 14.x 中使用大侠们的特别补丁,初步写成...

    Window 消息大全

    message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也 可以是自定义的常量。 wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。 lParam 通常是一个指向内存中数据的...

Global site tag (gtag.js) - Google Analytics