`
songylwq
  • 浏览: 131758 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

浅谈android中的目录结构

 
阅读更多

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 。
转自:http://bbs.2cto.com/read.php?tid=254821


要实现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,这可以保存用户的个人资料,但是也可能造成系统莫名其妙的故障。

分享到:
评论

相关推荐

    浅谈Android重打包技术

    浅谈Android重打包技术 主讲人:沈明星 网易安全工程师沈明星解析Android重打包技术,从APK文件结构到文件转换,包括实战中会用到的工具和重打包技术的应用场景。 2013年1月12日由OWASP杭州区和“杭州谷歌开发者社区...

    浅谈Android MVP

    在Android开发中,MVP帮助开发者分离界面展示逻辑与业务逻辑,使得代码结构更加清晰。 **一、模型(Model)** 在MVP架构中,Model层负责处理数据和业务逻辑。它不关心视图或呈现者,只专注于获取和存储数据。通常,...

    浅谈Android五大布局.PDF

    在Android开发中,布局是UI界面的骨架,它决定了界面中组件的排列方式和位置。Android提供了多种布局方式来满足不同的界面需求,其中最常用的五大布局为LinearLayout(线性布局)、FrameLayout(单帧布局)、...

    浅谈Android中适配器的notifyDataSetChanged()为何有时不刷新

    在Android开发中,ListView是常用的数据展示控件,与之配套使用的适配器Adapter负责将数据转化为可显示的视图。适配器的核心方法之一就是`notifyDataSetChanged()`,它的作用是通知ListView数据集发生了变化,需要...

    浅谈Android开发环境搭建.pdf

    在Eclipse中创建新的Android项目,选择项目名称、包名、最小SDK版本等信息,Eclipse会自动生成项目的框架结构。接着,便可以在src目录下编写代码,使用Android的UI布局XML文件设计界面,最后通过Eclipse内置的模拟器...

    浅谈Android技术.pdf

    在系统结构方面,Android运行在Linux内核之上,但与传统的GNU/Linux系统不同,它去除了许多不必要的库和功能,如Cairo、X11、Alsa、FFmpeg等,以适应移动设备的需求和满足商业应用的要求。Android使用Bionic作为其C...

    浅谈Android LruCache的缓存策略

    在Android开发中,缓存策略对于提升应用性能和用户体验至关重要,尤其是在处理大量数据或资源时。本文主要讨论了Android中的LruCache缓存策略,它是一种高效的内存管理机制,尤其适用于图片或者其他大对象的缓存。 ...

    浅谈Android面向切面编程(AOP)

    通过这种方式,AOP在Android开发中扮演着重要的角色,它使得开发者可以专注于业务逻辑,而将通用功能的实现交给切面处理,从而提高了代码的组织结构和可读性。在实际项目中,合理运用AOP可以显著提升代码质量和开发...

    net技术在Android平台下的应用浅谈.pdf

    总的来说,《.NET技术在Android平台下的应用浅谈》揭示了如何巧妙地利用C#和Mono for Android工具在Android环境中进行开发。这种方法不仅简化了开发流程,降低了学习曲线,还极大地提升了开发效率。随着跨平台开发...

    浅谈J2me游戏如何快速移植到Android

    ### 浅谈J2me游戏如何快速移植到Android 对于许多从事J2ME开发工作的人员而言,可能会突然间面临一个紧迫的需求:那就是将原本在J2ME平台上的游戏移植到Android平台上。乍一看,这似乎是一项庞大且复杂的工程,但...

    浅谈高职Android应用开发课程的建设.pdf

    3. **教学目标**:学生通过课程学习,能够熟练使用Android SDK,理解Android应用程序结构,掌握常用控件和高级组件,了解非UI组件,并具备开发简单Android应用的能力。 4. **教学内容与任务**:课程内容围绕实际...

    浅谈设计模式在Android代码重构中的应用.pdf

    在Android开发中,设计模式可以帮助我们创建更加灵活、可维护的代码结构,应对不断变化的需求。 2. 代码重构的必要性 代码重构是为了改进软件的内部结构,而不改变其外部行为。随着应用程序的发展,代码可能会变得...

    浅谈Android开发中项目的文件结构及规范化部署建议

    在Android开发中,良好的项目文件结构和规范化部署是至关重要的,它们直接影响到代码的可读性、维护性和团队协作效率。以下是对标题和描述中提到的一些关键知识点的详细说明: 1. **Gradle及其项目框架**:Android...

    浅谈Android系统的基本体系结构与内存管理优化

    Dalvik VM是专为Android设计的轻量级虚拟机,使用寄存器架构以提高效率,每个应用程序都在独立的Dalvik进程中运行,确保了应用间的隔离和安全性。Dalvik VM通过dx工具将Java字节码转换为.dex格式,以适应移动设备的...

    浅谈android获取存储目录(路径)的几种方式和注意事项

    在Android开发中,获取存储目录和路径是常见的需求,特别是在处理文件操作时。本文将详细介绍在Android中获取存储目录的几种方法以及需要注意的事项。 首先,Android提供了多种方式来访问设备的存储空间,包括内部...

    浅谈Android Studio导出javadoc文档操作及问题的解决

    "浅谈Android Studio导出javadoc文档操作及问题的解决" Android Studio是当前Android应用开发的主流IDE之一,但是在实际开发中,我们经常需要生成javadoc文档以便于其他开发者或团队成员了解我们的代码结构和设计...

    浅谈Android官方MVP架构解读

    Google在官方样例项目`android-architecture`中提供了多个基于MVP的实现,如`todo-mvp`,展示了如何在实际应用中运用MVP架构。这些样例项目包括了不同的扩展和实践,如使用Loaders、数据绑定、Clean Architecture和...

    浅谈Android硬件加速原理与实现简介

    "浅谈Android硬件加速原理与实现简介" 本文主要介绍了Android硬件加速原理与实现简介,从底层硬件原理到上层代码实现,对硬件加速技术进行简单介绍。 硬件加速原理: 从底层硬件原理来看,硬件加速主要是通过将CPU...

    浅谈Android Classloader动态加载分析

    Android中的ClassLoader主要有三种类型,它们构成了一个层次结构,用于不同级别的类加载需求。 2. **Android ClassLoader分类** - **BootClassLoader**:这是Android系统的根类加载器,由Dalvik或ART虚拟机直接...

    浅谈针对《Android手机程序设计》进行CDIO模式的教学评价探索.pdf

    《Android手机程序设计》课程是IT领域中针对移动应用开发的重要教学内容,旨在培养学生的实际操作能力和创新思维。CDIO(Conceive-Design-Implement-Operate)是一种以工程教育为核心的教学模式,它强调学生在构思、...

Global site tag (gtag.js) - Google Analytics