2026年10月30日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
只看作者:洞房 查看全部
1000
Lv9有为九子能等级图标
勋章勋章勋章勋章勋章
帖子
9.3万
回复
2,089
积分
60.3万
注册
2006-12-06
[安卓交流]

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

[复制链接]
查看 516 回复 0
楼主 发表于 | 查看全部
3 人收藏

在开发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,这可以保

存用户的个人资料,但是也可能造

成系统莫名其妙的故障。

登录回复

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块