安卓软件从手机移至SD卡有关解释

2012/11/10 10:41:00  人气 669    安卓交流论坛  
在开发android应用的过程中,总要
去调试APP,安装时又想去了解
android的目录结构。然后搜到了一
点材料。
原文地址: http://
www.hiapk.com/viewthread.php?
tid=465392&page=4(非宣外)
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/sd*
目录。
/sd* 目录,这是一个软链接
(相当于windows的文件夹的快捷
方式),链接到/mnt/sd* 目
录,即这个目录的内容就是sd*
的内容。
在Android 2.2之后的版本允许将
应用程序安装于SD卡,每一个安装
在SD卡的应用程序,都可以在SD
卡中的/sd*/.android_secure 目
录里找到名称中有出现它的程序
名,和副文件名为asec的经过特殊
加密处理后的档案。当SD卡挂载于
手机时,/mnt/
sd*/.android_secure 目录会被
映射到/mnt/asec 目录和 /mnt/
secure 目录。其中/mnt/asec 目录
中主要是程序的安装目录,包括其
执行文件和lib文件等;而/mnt/
secure 目录中就存放程序加密后的
档案。也就是说,在/mnt路径下看
到的/mnt/asec目录和/mnt/secure
目录并不是真正存在在手机内存或
者sd卡的分区挂载目录,它们只
是/mnt/sd*/.android_secure目
录的一个影像而已。
因此,用户程序安装到到sd卡上
后,其内容可能分散到:/mnt/
asec , /mnt/secure , /data/data 。
要实现app2sd,目前比较流行
有两种方案,分别是app2ext 和
data2ext,下面分别介绍下这2种
方案。
在Linux文件系统中,有一种特
别的文件叫“软链接”,类似于
Windows下的快捷方式,软链接可
以把一个文件或者文件夹映射到别
的地方,一个例子如上面介绍的/
sd* 就是/mnt/sd* 的软链
接。
app2ext的原理是,删除data区
中的app文件夹,然后在sd卡的ext
分区上创建一个app文件,并通过
软链接映射到data区。这样系统会
以为,app这个软链接是一个真实
的文件夹,会把程序都安装在里
面,但实际上,这些程序都安装到
卡上了。但由于操作系统并不知
道,所以这种情况下,我们依然看
到系统显示这个程序是安装在“内
置空间”的。
data2ext则更彻底,它不是用软
链接,而是直接用“挂载”功能,
Linux下所有的存储设备都必须挂
载成一个文件夹才能进行文件操作
(如sd卡就挂载在/mnt/sd*目
录下面)。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,这可以保
存用户的个人资料,但是也可能造
成系统莫名其妙的故障。

. 我不断的洗澡,油腻的师姐在哪里。。

发表回复

   


  通知楼主

地板

『韩雅』雪碧.11-10 12:38
疼新手机管家pc版直接强行移动安卓2.3.5表示很好

回复只看TA

椅子

特无名.11-10 10:53
安卓能手组!欢迎你的加入

回复只看TA

沙发

『炎』帅少』.11-10 10:52
安卓我最行!

回复只看TA