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

什么是app2sd,app2ext,data2ext?app移动到SD卡哪里去了? /mnt/asec /mnt/secure

 
阅读更多

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/sdcard 目录。
    /sdcard 目录,这是一个软链接(相当于windows的文件夹的快捷方式),链接到/mnt/sdcard 目录,即这个目录的内容就是sdcard的内容。
    在Android 2.2之后的版本允许将应用程序安装于SD卡,每一个安装在SD卡的应用程序,都可以在SD卡中的/sdcard/.android_secure 目录里找到名称中有出现它的程序名,和副文件名为asec的经过特殊加密处理后的档案。当SD卡挂载于手机时,/mnt/sdcard/.android_secure 目录会被映射到/mnt/asec 目录和 /mnt/secure 目录。其中/mnt/asec 目录中主要是程序的安装目录,包括其执行文件和lib文件等;而/mnt/secure 目录中就存放程序加密后的档案。也就是说,在/mnt路径下看到的/mnt/asec目录和/mnt/secure目录并不是真正存在在手机内存或者sd卡的分区挂载目录,它们只是/mnt/sdcard/.android_secure目录的一个影像而已。
    因此,用户程序安装到到sd卡上后,其内容可能分散到:/mnt/asec , /mnt/secure , /data/data 。

    要实现app2sd,目前比较流行有两种方案,分别是app2ext 和 data2ext,下面分别介绍下这2种方案。

    在Linux文件系统中,有一种特别的文件叫“软链接”,类似于Windows下的快捷方式,软链接可以把一个文件或者文件夹映射到别的地方,一个例子如上面介绍的/sdcard 就是/mnt/sdcard 的软链接。

    app2ext的原理是,删除data区中的app文件夹,然后在sd卡的ext分区上创建一个app文件,并通过软链接映射到data区。这样系统会以为,app这个软链接是一个真实的文件夹,会把程序都安装在里面,但实际上,这些程序都安装到卡上了。但由于操作系统并不知道,所以这种情况下,我们依然看到系统显示这个程序是安装在“内置空间”的。
    data2ext则更彻底,它不是用软链接,而是直接用“挂载”功能,Linux下所有的存储设备都必须挂载成一个文件夹才能进行文件操作(如sd卡就挂载在/mnt/sdcard目录下面)。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,这可以保存用户的个人资料,但是也可能造成系统莫名其妙的故障。

分享到:
评论
1 楼 cdtdx 2012-12-14  
好文, 相当不错啊. 收了.

相关推荐

    重新安装wmware找不到/mnt/hgfs/下共享目录解决方法

    重新安装新版wmware后,加载ubuntu10.04后,找不到/mnt/hgfs/下共享目录解决方法

    Errno 14 curl#37 - "Couldn't open file /mnt/repodata/repomd.xml

    解压后,将这些文件复制到`/mnt/repodata/`目录下,可以恢复`yum`的功能。但请确保先备份现有文件,以防覆盖了重要的数据。 总之,`Errno 14 curl#37`错误通常指示了`yum`在尝试访问仓库数据时遇到了问题。通过排查...

    制作ext2文件系统的方法 .

    在Linux操作系统中,EXT2(Second Extended File System)是一种经典的文件系统,由Rene Rebeau于1992年开发。它最初是为了解决当时存在的MINIX和EXT文件系统的局限性而设计的,特别是在处理大文件和大量小文件方面...

    多线程写文件实现应用与性能测试

    java -jar ThreadIOReadWriteTest.jar iowrite 4096 /mnt/user1/test /mnt/user2/test /mnt/user3/test /mnt/user4/test /mnt/user5/test /mnt/user6/test /mnt/user7/test /mnt/user8/test /mnt/user9/test /mnt/...

    安卓目录结构

    - **/mnt/asec**:当SD卡被挂载到手机时,安装在SD卡上的应用程序会在此目录中找到它们的加密文件。 - **/mnt/secure**:存储安装在SD卡上的应用程序的加密文件。 ##### 4. /sdcard - **描述**:指向/mnt/sdcard...

    安卓电视盒子ttl获取root权限教程及工具

    cp /mnt/sda/sda1/system/app/kinguser.apk /system/app cp /mnt/sda/sda1/system/etc/install-recovery.sh /system/etc cp /mnt/sda/sda1/system/xbin/ksud /system/xbin cp /mnt/sda/sda1/system/xbin/ku.sud /...

    fuse-ext2-0.0.7

    【标题】"fuse-ext2-0.0.7" 是一个专用于Linux系统的开源软件,其主要功能是允许用户在Linux环境下挂载并操作EXT2文件系统。EXT2(Second Extended File System)是Linux早期广泛使用的文件系统之一,主要用于存储和...

    基于http构建yum网络源 和‘/mnt/packages/*’: No such file or directory问题?

    挂载光盘镜像文件到 /mnt mount /dev/cdrom /mnt/ 复制 /mnt/Packages目录下的所有软件包到 /var/www/html/centos/ mkdir -p /var/www/centos/ cp -R /mnt/Packages/* /var/www/html/centos/ 3.使用createrepo创建...

    手机导航软件

    /mnt/ext_sd /mnt/sdcard/sdcard2(联想s2005) /mnt/sdcard/extStorages/SdCard(三星P6800平板) /sdcard/removable_sdcard /mnt/sdcard/extStorages/SdCard 安装了A和B都没有外卡的请试下kldttt-C.apk,卡名就...

    将文件夹生成ext2文件系统镜像的工具genext2fs

    在Linux世界中,文件系统是组织和管理存储设备上数据的一种方式。常见的文件系统类型有ext2、ext3、ext4等。其中,ext2是最早期的Linux日志文件系统,虽然现在已经被更先进的系统取代,但在某些特定场景下仍然有其...

    Mycloud 可执行svn文件

    使用mycloud app 将subversion.tar.gz 拷贝到 mycloud 目标机Public中使用ssh client 连接到mycloud,解压文件cd /mnt/HD/HD_a2/Publictar xvzf subversion.tar.gzln -s /mnt/HD/HD_a2/Public/subversion/bin/...

    EXT2文件系统

    EXT2文件系统存取结构详细介绍 EXT2文件系统是 Linux 系统中的标准文件系统,由 Minix 文件系统扩展而来,具有高效的存取性能。在 EXT2 文件系统中,文件由 inode 进行唯一标识,每个文件可能对应多个文件名,只有...

    sgs4ext4fs

    本教程将详细解释如何解包三星Galaxy S4(SGS4)的`system.img`文件,进行补丁应用并制作卡刷系统。我们将探讨`ext4fs`文件系统,这是`system.img`通常使用的格式,并讨论如何操作这个文件系统以实现自定义修改。 ...

    获取SD卡 TF卡 内置 外置存储卡路径例子

    在Android系统中,获取SD卡或TF卡(外部存储卡)以及内置存储卡的路径是开发者经常遇到的任务,尤其在处理文件操作时。本示例提供了优化的方法,以提高读取速度,这对于处理大量数据或者频繁访问存储卡的应用至关...

    Nativesd教程

    DataOnExt模式是将/data分区移到SD卡上,以解决内部存储不足的问题。步骤与NativeSD类似,但主要区别在于只移动/data分区: - 同样需要挂载MTD分区,尤其是将/system挂载为读写以保存文件系统检查点。 - 不像...

    SD卡介绍_介绍命令_英文资料.zip

    SD卡,全称为Secure Digital Memory Card,是一种便携式存储设备,广泛应用于移动电话、数码相机、摄像机、平板电脑等各种电子设备中。它提供了一种便捷的方式来扩展设备的存储容量,使得用户可以存储大量的照片、...

    SD卡制作步骤

    在嵌入式系统开发过程中,通过SD卡来进行系统的启动或数据存储是非常常见的做法。本篇文章将详细介绍如何利用U-Boot工具进行SD卡的制作过程,包括SD卡的基本配置、U-Boot固件及内核镜像的烧写以及文件系统的构建等...

    使用mdev来实现arm linux自动识别挂载sd卡,支持热插拔

    "使用mdev实现arm linux自动识别挂载sd卡,支持热插拔" mdev是一个Device Manager for Linux,它可以自动识别和挂载设备,包括SD卡和U盘。下面是使用mdev实现arm linux自动识别和挂载sd卡的详细步骤: 首先,在...

    docker /var/lib/docker/aufs/mnt 目录清理方法

    在本篇文章里小编给各位整理的是关于docker /var/lib/docker/aufs/mnt 目录清理方法,有需要的朋友们可以参考下。

    floppylinux

    创建了 ext2 文件 # mount /dev/fd0 /mnt/floppy 现在,创建一些目录,并将一些关键文件复制到软盘: # mkdir /mnt/floppy/boot # mkdir /mnt/floppy/boot/grub # cp /boot/grub/stage1 /mnt/floppy/boot/grub #...

Global site tag (gtag.js) - Google Analytics