搜档网
当前位置:搜档网 › Android的文件系统根目录的结构

Android的文件系统根目录的结构

Android的文件系统根目录的结构
Android的文件系统根目录的结构

经过这几天在网上搜索关于Android文件系统的相关资料,发现已经有很多高手分析了Android的文件系统,这些高手多从不同的方面分析了其文件系统的结构和运行原理。我这里就写一下自己的理解。首先是Android的文件系统根目录的结构:

# pwd && ls -a -l

/

drwxrwxrwt root root 2009-06-10 09:53 sqlite_stmt_journals

drwxrwx--- system cache 2008-09-06 22:51 cache

d---rwxrwx system system 1970-01-01 08:00 sdcard

lrwxrwxrwx root root 2009-06-09 22:11 etc -> /system/etc

drwxr-xr-x root root 2008-09-06 22:45 system

drwxr-xr-x root root 1970-01-01 08:00 sys

drwxr-x--- root root 1970-01-01 08:00 sbin

-rw-r--r-- root root 117 1970-01-01 08:00 runme.sh

dr-xr-xr-x root root 1970-01-01 08:00 proc

-rwxr-x--- root root 1704 1970-01-01 08:00 init.trout.rc

-rwxr-x--- root root 9329 1970-01-01 08:00 init.rc

-rwxr-x--- root root 1677 1970-01-01 08:00 init.goldfish.rc

-rwxr-x--- root root 106636 1970-01-01 08:00 init

-rw-r--r-- root root 118 1970-01-01 08:00 default.prop

drwxrwx--x system system 2008-09-06 22:51 data

drwx------ root root 2009-06-07 16:29 root

drwxr-xr-x root root 2009-06-09 22:11 dev

sqlite_stmt_journals:一个根目录下的tmpfs文件系统,用于存放临时文件数据。

cache :是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。

sdcard:是SD卡中的FAT32文件系统挂载的目录

etc :指向 /system/etc ,众所周知的配置文件存放目录

system :是一个很重要的目录,系统中的大部分东西都在这里了,以下是目录结构:

# ls -a -l /system

drwxr-xr-x root 208 1970-01-01 08:00 xbin

drwxr-xr-x root root 1970-01-01 08:00 modules

drwxr-xr-x root root 2008-08-01 20:00 framework

drwxr-xr-x root root 2008-08-01 20:00 fonts

drwxr-xr-x root root 2008-08-01 20:00 etc

-rw-r--r-- root root 2197 2008-08-01 20:00 build.prop

drwxr-xr-x root root 2008-08-01 20:00 media

drwxr-xr-x root shell 2008-08-01 20:00 bin

drwxr-xr-x root root 2008-08-01 20:00 usr

drwxr-xr-x root root 2008-08-01 20:00 app

drwxr-xr-x root root 2008-09-06 22:45 lost+found

drwxr-xr-x root root 2008-08-01 20:00 lib

drwxr-xr-x root root 2008-08-01 20:00 sd

-rw-r--r-- root root 145 2008-08-01 20:00 init.rc

sys :用于挂载sysfs文件系统。在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值

sbin:只放了一个用于调试的adbd程序。

proc :/proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。

data :存放用户安装的软件以及各种数据。

root :什么都没有。

dev :不用多说了,设备节点文件的存放地。

下面介绍非目录的文件:

runme.sh用于SD 卡中EXT2文件系统的自动挂载动作的脚本。

init.trout.rc,init.rc,init.goldfish.rc 是初始化文件.

init是系统启动到文件系统的时候第一个运行的程序。

从以上的根目录分析来看,Android的根文件系统并非标准的Linux文件系统,所以以后还得仔细分析一下启动过程,才能认识Android系统。

今天要来分析一下Android文件系统的/system目录的结构。 /system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下,我看来是一个真正的rootfs。他在Android手机中存放在nand flash的mtd3中,是一个yaffs2文件系统,在启动时被挂载在root的/system 目录下,其中包含有:

# pwd && ls -a -l

/system

drwxr-xr-x root 208 1970-01-01 08:00 xbin

drwxr-xr-x root root 1970-01-01 08:00 modules

drwxr-xr-x root root 2008-08-01 20:00 framework

drwxr-xr-x root root 2008-08-01 20:00 fonts

drwxr-xr-x root root 2008-08-01 20:00 etc

-rw-r--r-- root root 2197 2008-08-01 20:00 build.prop

drwxr-xr-x root root 2008-08-01 20:00 media

drwxr-xr-x root shell 2008-08-01 20:00 bin

drwxr-xr-x root root 2008-08-01 20:00 usr

drwxr-xr-x root root 2008-08-01 20:00 app

drwxr-xr-x root root 2008-09-06 22:45 lost+found

drwxr-xr-x root root 2008-08-01 20:00 lib

drwxr-xr-x root root 2008-08-01 20:00 sd

-rw-r--r-- root root 145 2008-08-01 20:00 init.rc

下面逐个分析其中的目录:

xbin :下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当于标准Linux文件系统中的/sbin。我的手机此目录下有busybox,肯定是改过的,应该是破解者加上的。

modules:使用来存放内核模块(主要是fs和net)和模块配置文件的地方。

framework:是JAVA平台的一些核心文件,属于JAVA平台系统框架文件。里面的文件都是.jar和.odex 文件。

备注:什么是odex文件? odex是被优化过的JAVA程序文件,体积通常是.jar 的4倍左右。执行效率比.jar高。

fonts :很显然,这是字体库文件的存放目录。

etc :这里存放了系统中几乎所有的配置文件,根目录下的/etc就链结于此。

build.prop :是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类

似于/etc中的文件。

media :里面主要是存放了系统的铃声的,分为 notifications(通知)、ui(界面)、alarms (警告)和ringtones(铃声),里面都是.ogg音频文件。

bin :众所周知,是存放用户常用的工具程序的,其中大部分是到toolbox的链接(类似嵌入式Linux中的busybox)。toolbox应该是google简化版的busybox,我还没深入研究过。

usr :用户的配置文件,如键盘布局、共享、时区文件等等。您可以cat 来看看。

app :顾名思义,存放的是Android系统自带的JAVA应用程序。

lost+found :yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。

lib :存放几乎所有的共享库(.so)文件。

sd :SD卡中的EXT2分区的挂载目录

init.rc :一个初始化脚本,用于将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏。

好了,/system目录的结构的结构就简单分析到这里,

以下内容转载自国内最大的CDMA手机玩家论坛https://www.sodocs.net/doc/9e14697807.html,。1、android文件系统的结构android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中,ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把system和userdata分别加载到ramdisk文件系统中的system和userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到ramdisk文件系统中的system和userdata 目录下。

2、分离android文件系统出来

system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:

file ramdisk.img,输出:

ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009 Android源码编译后除了生成system.img,userdata.img之外还生成system和userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把ramdisk.img解压出来:

将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令

gunzip ramdisk.img.gz

然后新建一个文件夹,叫ramdisk吧,进入,输入命令

cpio -i -F ../ramdisk.img

这下,你就能看见并操作ramdisk里面的内容了。

然后把Android源码编译后生成的system和userdata里的文件复制到ramdisk/system和ramdisk/userdata下。这样就得到一个文件系统了。

3、使用网络文件系统方式挂载android文件系统

因此,我们需要建立/nfsroot目录,再建立/nfsroot/androidfs目录,把刚才的android文件系统改名为androidfs,并链接到/nfsroot/androidfs

4、android内核引导文件系统

android内核挂载/nfsroot/androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是:

1)设置一些环境变量

2)创建system、sdcard、data、cache等目录

3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals

4)设置一些文件的用户群组、权限

5)设置一些线程参数

6)设置TCP缓存大小

5、操作android的一些方法

您应该已经知道,Android 的核心作业系统是Linux (现在用的版本是2.6.25)。因此内部的档案系统,与系统目录等,也和Linux 脱不了关系。要如何观察这些系统目录,到底藏了什么秘密呢?

在Eclipse 环境中,你可以用DDMS 来观察。不过这个DDMS 在我的电脑上的执行速度,实在太慢了。我个人的偏好是,直接用adb shell 来观察。

启动adb shell 的用法如下:

1). 在Windows 中,开启一个命令列视窗(或执行cmd.exe 这个程式)

2). cd /tools

3). adb shell

当你看到这个# 提示字元时,就表示你已经进入模拟器的系统。接下来,你就可以用Linux 上的指令来浏览这些目录。像是cd, ls, pwd, cat, rm 等等。

这里面,有几个目录是和Android 相关的,特地将他整理下来,供你参考。

/system/app

预载入应用程式执行档(*.apk),都是放在这。像是Alarm Clock, Browser, Contacts, Maps,... 等等。

/system/framework

这里放Android 系统的核心程式库。像是core.jar, framework-res.apk, com.google.android.gtalkservice.jar,...等等。

虽然许多程式库都是以jar 结尾的,不过里面Java classes 还是以dex 格式存在着。

/system/media/audio/(notification, alarms, ringtones, ui)

这里放系统的声音档,像是闹铃声,来电铃声等等。这些声音档,多是ogg 格式。

/data/anr/traces.txt

当你的应用程式发生ANR (Application is Not Responding) 错误时,Android 会自动将问题点的code stack list 写在这个档案内,你直接用cat 命令就可以看他的内容。

/data/app

/system/app 放的是系统预载的应用程式执行档。而这里放的是使用者自己安装的应用程式执行档(*.apk)。

/data/data/

当你在程式中用Context.openFileOutput() 所建立的档案,都放在这个目录下的files 子目录内。而用Context.getSharedPreferences() 所建立的preferences 档(*.xml) ,则是放在shared_pref 这个子目录中。

/data/location/gps

这里看起来,应该是给GPS location provider 用的。其中的properties 档案的内容如下:requiresNetwork false

requiresSatellite false

requiresCell false

hasMonetaryCost false

supportsAltitude true

supportsBearing true

supportsSpeed true

repeat true

accuracy 100

powerRequirement 1

没猜错的话,这应该是用来描述GPS location provider 有那些功能的。

/data/system/location/location.gps

这个档案也是个一般文字档。主要是记录最后的经纬度座标。LocationManager.getLastKnownLocation() 就在来这抓值的。

/data/property/persist.sys.timezone

这个档案也是个一般文字档。主要是记录目前系统所使用的时区。在我的模拟器上,他记录着Asia/T aipei 这个字串。

最后,下面这两个指令,也很好用。他可以帮你将外部档案,复制到模拟器的系统档案目录内,也可以将模拟器内的档案,复制到外部系统上。

adb push - copy file/dir to device

adb pull - copy file/dir from device

基于安卓操作系统的移动智能终端文件系统老化模型和测评方法

电信终端产业协会标准 TAF-WG2-AS0021-V1.0.0:2018 基于安卓操作系统的移动智能终端文件系 统老化模型和测评方法 Module and Test Method of Aging Test on File System Based on Android Mobiles and Smart Terminals 2018-09-04发布2018-09-04实施

目次 前言................................................................................ II 基于安卓操作系统的移动智能终端文件系统老化模型和测评方法 .. (1) 1 范围 (1) 2 规范性引用文件 (1) 3 术语和定义 (1) 4 文件系统老化模型 (1) 4.1 文件系统老化模型概述 (1) 4.2 剩余存储空间分析 (1) 4.3 碎片化方法分析 (2) 4.4 静态资源分析 (2) 4.5 10个月老化模型 (2) 4.6 18个月老化模型 (3) 4.7 24个月老化模型 (3) 5 文件系统老化方法 (3) 5.1 文件系统老化方法概述 (3) 5.2 文件系统碎片化方法 (4) 5.3 用户媒体文件填充方法 (4) 5.4 用户数据库文件填充方法 (4) 6 文件系统老化前后的性能评估 (4) 6.1 测试方法 (4) 6.2 评估方法 (4) 附录 A (规范性附录)标准修订历史 (5) 附录 B (资料性附录)附录 (6) 参考文献 (7)

前言 本标准按照 GB/T 1.1-2009给出的规则编写。 本标准由电信终端产业协会提出并归口。 本标准起草单位:中国信息通信研究院 本标准主要起草人:李隽、崔雪然、苏兆飞、孟凡玲、郭隆庆

Android 文件系统制作教程

android文件系统制作教程 1)认识android文件系统分区 splash1 :开机画面,Nandroid备份为splash1.img recovery :设备序列号为mtd1,该分区是恢复模式(即开机按Home+End进入的界面),Nandroid备份为recovery.img boot :设备序列号为mtd2,底层操作系统内核启动分区,挂载为/目录,Nandroid备份为boot.img system :设备序列号为mtd3,G1的Android核心平台,挂载为/system目录,通常为只读,Nandroid备份为system.img cache :设备序列号为mtd4,G1的缓存临时文件夹,挂载为 /cache目录,事实上除了T-mobile的OTA更新外,别无用处,Nandroid备份为cache.img userdata:设备序列号为mtd5,G1中用户安装的软件以及各种数据,挂载为/data目录,Nandroid备份为data.img 2)常用的fastboot命令 重启G1: $ fastboot reboot 刷所有分区并重启手机 $ fastboot flashall 刷指定分区: $ fastboot flash {partition} {file.img} 如:fastboot flash system /备份/system.img 擦除分区: $ fastboot erase {partition} 如:fastboot erase system 使用update.zip整体刷新 $ fastboot update {update.zip} 刷自定义开机画面: $ fasboot flash splash1 mysplash.rgb565 3)利用Makefile制作update.zip 从update.zip这个刷机包反推的介绍整个android文件系统的制作过程 并编写了一个Makefile文件,利用 Makefile的”依赖检查”机制管理各种文件的生成步骤和依赖关系;

Android本质上就是一个基于Linux内核的操作系统

Android本质上就是一个基于Linux内核的操作系统。与Ubuntu Linux、Fedora Linux 类似。只是Android在应用层专门为移动设备添加了一些特有的支持。既然Android是Linux内核的系统,那么基本的启动过程也应符合Linux的规则。如果研究过其他Linux 系统应该了解,一个完整的Linux系统首先会将一个Linux内核装载到内存,也就是编译Linux内核源代码生成的bzImage文件,对于为Android优化的Linux内核源代码会生成zImage文件。该文件就是Linux内核的二进制版本。由于zImage在内核空间运行,而我们平常使用的软件都是在应用空间运行(关于内核空间和应用空间的详细描述,可以参考《Android深度探索(卷1):HAL与驱动开发》一书的内容,在后续的各卷中将会对Android的整体体系进行全方位的剖析)。内核空间和应用空间是不能直接通过内存地址级别访问的,所以就需要建立某种通讯机制。 目前Linux有很多通讯机制可以在用户空间和内核空间之间交互,例如设备驱动文件(位于/dev目录中)、内存文件(/proc、/sys目录等)。了解Linux的同学都应该知道Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在用户空间,所以在Linux内核装载完,需要首先建立这些文件所在的目录。而完成这些工作的程序就是本文要介绍的init。Init是一个命令行程序。其主要工作之一就是建立这些与内核空间交互的文件所在的目录。当Linux内核加载完后,要做的第一件事就是调用init程序,也就是说,init是用户空间执行的第一个程序。 在分析init的核心代码之前,还需要初步了解init除了建立一些目录外,还做了如下的工作 1. 初始化属性 2. 处理配置文件的命令(主要是init.rc文件),包括处理各种Action。 3. 性能分析(使用bootchart工具)。 4. 无限循环执行command(启动其他的进程)。 尽管init完成的工作不算很多,不过代码还是非常复杂的。Init程序并不是由一个源代码文件组成的,而是由一组源代码文件的目标文件链接而成的。这些文件位于如下的目录。 /system/core/init 其中init.c是init的主文件,现在打开该文件,看看其中的内容。由于init是命令行程序,所以分析init.c首先应从main函数开始,现在好到main函数,代码如下: int main(int argc, char **argv) { int fd_count = 0; struct pollfd ufds[4]; char *tmpdev; char* debuggable; char tmp[32]; int property_set_fd_init = 0; int signal_fd_init = 0;

Android SDCard操作(文件读写,容量计算)(An-Beer 工作室)

Android SDCard操作(文件读写,容量计算) android.os.Environment 提供访问环境变量 https://www.sodocs.net/doc/9e14697807.html,ng.Object android.os.Environment Environment 静态方法: 方法: getDataDirectory () 返回: File 解释: 返回Data的目录 方法: getDownloadCacheDirectory () 返回: File 解释: 返回下载缓冲区目录 方法: getExternalStorageDirectory () 返回: File 解释: 返回扩展存储区目录(SDCard) 方法: getExternalStoragePublicDirectory (String type) 返回: File 解释: 返回一个高端的公用的外部存储器目录来摆放某些类型的文件(来自网上) 方法: getRootDirectory () 返回: File 解释: 返回Android的根目录 方法: getExternalStorageState () 返回: String

解释: 返回外部存储设备的当前状态 getExternalStorageState () 返回的状态String类型常量:常量: MEDIA_BAD_REMOVAL 值 : "bad_removal" 解释: 在没有正确卸载SDCard之前移除了 常量:MEDIA_CHECKING 值 : "checking" 解释: 正在磁盘检查 常量: MEDIA_MOUNTED 值 : "mounted" 解释: 已经挂载并且拥有可读可写权限 常量: MEDIA_MOUNTED_READ_ONLY 值 : "mounted_ro" 解释: 已经挂载,但只拥有可读权限 常量:MEDIA_NOFS 值 : "nofs" 解释: 对象空白,或者文件系统不支持 常量: MEDIA_REMOVED 值 : "removed" 解释: 已经移除扩展设备 常量: MEDIA_SHARED 值 : "shared" 解释: 如果SDCard未挂载,并通过USB大容量存储共享 常量: MEDIA_UNMOUNTABLE

android系统目录各文件简介

android系统目录各文件简介 2012-05-04 22:24:43| 分类:工作资料|举报|字号订阅 一个完整的ROM根目录会有以下几个文件夹及文件: data META-IN system boot.img 系统目录说明 1. 应用程序安装目录 1) 系统应用程序所在目录 /system/app/*.apk 2)用户安装应用程序所在目录 /data/app/*.apk 3) 注意: a)在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app 下也会被清除 b)若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adb install杀死正在运行的程序时,有时旧的就会被启动 2.用户数据所在目录 /data/data/应用包名/shared_prefs 配置文件 /data/data/应用包名/databases/* 库文件所在目录 3. SD卡对应目录 /sdcard/ 而我们需要处理的只是两个文件夹里面的内容: data/app –该文本夹里的文件可以全删,也可以自由添加自已所需安装的应用软件,刷机安装后可以自由删除。 system/app –在这个文件夹下的程序为系统默认的组件,可以看到都是以APK 格式结尾的文件,但有些自制的ROM里面还有和APK文件名对应的odex文件。我们主要是针对该文件夹里的文件进行精简,如果有odex文件的,删除APK文

件名时同时也删除与其对应的odex文件。 虽然一般定制时只是对以上两个文件夹里的文件做相应的增减,但我们还是一起来了解system相应目录相应文件的用途吧。(rom版本不同里面的APK也会不一样) \\system\\app \\system\\app\\AlarmClock.apk 闹钟 \\system\\app\\Browser.apk 浏览器 \\system\\app\\Bugreport.apk Bug报告 \\system\\app\\Calculator.apk 计算器 \\system\\app\\Calendar.apk 日历 \\system\\app\\CalendarProvider.apk 日历提供 \\system\\app\\Camera.apk 照相机 \\system\\app\\com.amazon.mp3.apk 亚马逊音乐 \\system\\app\\Contacts.apk 联系人 \\system\\app\\DownloadProvider.apk 下载提供 \\system\\app\\DrmProvider.apk DRM数字版权提供 \\system\\app\\Email.apk 电子邮件客户端 \\system\\app\\FieldTest.apk 测试程序 \\system\\app\\GDataFeedsProvider.apk GoogleData提供 \\system\\app\\Gmail.apk Gmail电子邮件 \\system\\app\\GmailProvider.apk Gmail提供 \\system\\app\\GoogleApps.apk 谷歌程序包 \\system\\app\\GoogleSearch.apk 搜索工具 \\system\\app\\gtalkservice.apk GTalk服务 \\system\\app\\HTMLViewer.apk HTML查看器 \\system\\app\\HtcTwitter.apk 集成Twitter客户端PEEP \\system\\app\\IM.apk 即使通讯组件包含MSN、yahoo通 \\system\\app\\ImCredentialProvider.apk \\system\\app\\ImProvider.apk \\system\\app\\Launcher.apk 启动加载器 \\system\\app\\HtcNaviPanel.apk 导航软件 \\system\\app\\Maps.apk 电子地图 \\system\\app\\MediaProvider.apk 多媒体播放提供

android数据和文件存储概述翻译

android数据和文件存储概述翻译 Android使用的文件系统类似于其他平台上基于磁盘的文件系统。系统提供了几个选项供您保存应用程序数据: 应用程序特定存储:存储仅用于应用程序的文件,可以位于内部存储卷中的专用目录中,也可以位于外部存储中的不同专用目录中。使用内部存储中的目录保存其他应用程序不应访问的敏感信息。 共享存储:存储应用程序打算与其他应用程序共享的文件,包括媒体、文档和其他文件。 首选项:将私有的原始数据存储在键值对中。 数据库:使用Room持久性库将结构化数据存储在私有数据库中。另一种分类法如下: 共享首选项 将私有原始数据存储在键值对中。 内部存储器 将私有数据存储在设备内存中。 外部存储 将公共数据存储在共享的外部存储上。 SQLite数据库 将结构化数据存储在专用数据库中。 网络连接 使用您自己的网络服务器将数据存储在Web上 下表总结了这些选项的特点:

您选择的解决方案取决于您的特定需求:您的数据需要多少空间?

内部存储空间有限,无法存储应用程序特定的数据。如果需要保存大量数据,请使用其他类型的存储。 数据访问需要多可靠? 如果应用程序的基本功能需要某些数据,例如应用程序启动时,请将数据放置在内部存储目录或数据库中。存储在外部存储中的应用程序特定文件并不总是可访问的,因为某些设备允许用户删除与外部存储相对应的物理设备。 你需要存储什么样的数据? 如果您有只对应用程序有意义的数据,请使用特定于应用程序的存储。对于可共享的媒体内容,请使用共享存储,以便其他应用程序可以访问该内容。对于结构化数据,请使用首选项(对于键值数据)或数据库(对于包含两列以上的数据)。 数据应该是你的应用的私有数据吗? 当存储任何其他应用程序都无法访问的敏感数据时,请使用内部存储、首选项或数据库。内部存储还有一个额外的好处,就是可以对用户隐藏数据。 存储位置的类别 Android提供两种类型的物理存储位置:内部存储和外部存储。在大多数设备上,内部存储比外部存储小。但是,所有设备上都有内部存储,这使得它成为放置应用程序所依赖的数据的更可靠的地方。 可移动卷(如SD卡)作为外部存储的一部分出现在文件系统中。Android使用路径(如/sdcard)表示这些设备。

最全的Android源码目录结构详解

最全的Android源码目录结构详解 Android 2.1 |-- Makefile |-- bionic (bionic C库) |-- bootable (启动引导相关代码) |-- build (存放系统编译规则及generic等基础开发包配置) |-- cts (Android兼容性测试套件标准) |-- dalvik (dalvik JAVA虚拟机) |-- development (应用程序开发相关) |-- external (android使用的一些开源的模组) |-- frameworks (核心框架——java及C++语言) |-- hardware (部分厂家开源的硬解适配层HAL代码) |-- out (编译完成后的代码输出与此目录) |-- packages (应用程序包) |-- prebuilt (x86和arm架构下预编译的一些资源) |-- sdk (sdk及模拟器) |-- system (底层文件系统库、应用及组件——C语言) `-- vendor (厂商定制代码) bionic 目录 |-- libc (C库) | |-- arch-arm (ARM架构,包含系统调用汇编实现) | |-- arch-x86 (x86架构,包含系统调用汇编实现) | |-- bionic (由C实现的功能,架构无关) | |-- docs (文档) | |-- include (头文件) | |-- inet (?inet相关,具体作用不明) | |-- kernel (Linux内核中的一些头文件) | |-- netbsd (?nesbsd系统相关,具体作用不明) | |-- private (?一些私有的头文件) | |-- stdio (stdio实现) | |-- stdlib (stdlib实现) | |-- string (string函数实现) | |-- tools (几个工具) | |-- tzcode (时区相关代码) | |-- unistd (unistd实现) | `-- zoneinfo (时区信息) |-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)|-- libm (libm数学库的实现,) | |-- alpha (apaha架构) | |-- amd64 (amd64架构) | |-- arm (arm架构) | |-- bsdsrc (?bsd的源码)

1 Android系统简介及开发环境的搭建

1了解Android系统 1.1 Android系统介绍 Android是Google 开发的基于Linux 平台的、开源的、智能手机操作系统。Android 包括操作系统、中间件和应用程序,由于源代码开放,Android 可被移植到不同的硬件平台上。 围绕在Google的Android 系统中,形成了移植开发和应用程序开发两个不同的开发方面。手机厂商从事移植开发工作,应用程序开发可以由任何单位和个人完成,开发的过程可以基于真实的硬件系统,还可以基于仿真器环境。 作为一个手机平台,Android 在技术上的优势主要有以下几点: ●全开放智能手机平台 ●多硬件平台的支持:应用程序可通过标准API访问核心移动设备功能。 ●使用众多的标准化技术:可以轻松的嵌入HTML、JavaScript等网络内容 ●核心技术完整,统一:应用程序是平等条件创建的,可被替换或扩展。 ●应用程序可以并行运行。Android是完整的多任务环境,在后台运行时,应用程 序可生成通知引起用户注意。 ●完善的SDK 和文档 ●完善的辅助开发工具 Android 的开发者可以在完备的开发环境中进行开发,Android 的官方网站也提供了丰富的文档、资料。这些都使得Android 系统的开发和运行在一个良好的生态环境中。 1.2 Android系统的软件结构 Android 是一个开放的软件系统,它包含了众多的源代码。从下至上,Android 系统分成4个层次: ●第1 层次:Linux 操作系统及驱动; ●第2 层次:本地代码框架,包含各种类库和运行环境; ●第3 层次:Java 框架; ●第4 层次:Java 应用程序。 Android 的第1 层次由C 语言实现,第2层次由C 和/C++实现,第3、4层次主要由Java代码实现。对于Android 应用程序的开发,主要关注第3层次和第4层次之间的接口。 Android 系统的架构如图所示:

linux系统下uboot、kernel、android文件系统编译错误整理及解决办法

linux系统下uboot、kernel、android文件系统编译错误整理及解决办法 Ver1.0 作成者:雷鹏 作成年月:2012/09/25

1、linux下编译应用程序时出现如下错误: /usr/bin/ld: cannot find -lxxx。 原因分析: 编译过程找不到对应库文件。其中,-lxxx表示链接库文件 libxxx.so。由于库文件是编译过程临时生成的,如果前面编译过程出错也会导致出现这种情况,下面针对本机系统环境缺失而引起的错误进行分析。一般出现这种错误有以下几种原因: ⑴.系统缺乏对应的库文件; ⑵.版本不对应; ⑶.库文件的链接错误; ⑷.库文件路径设置问题。 解决方法: 对应第一第二种情况,可以通过下载安装lib来解决,ubuntu系统可以直接通过apt-get来安装: apt-get install libxxx-dev 如果还是不能解决问题,那么,引起错误的原因不是链接错误就是库文件路径问题。 通过find或者locate指令定位到链接文件,查看链接文件是否正确的指向了编译需要的 lib,如果不是,用下列指令修改它。 ln -sf */libxxx.so.x */libxxx.so 如果是库文件路径引发的问题,可以到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件,(可以自建conf,以方便识别)将lib所在目录写进去,然后在终端输入 ldconfig 更新缓存。 2、编译时出现错误提示:include/asm is a directory but a symlink was expected 原因分析: linux/include/asm 文件夹是内核编译过程中创建的,创建结果就是一个指向文件夹asm-arm 的链接,表明该系统的平台是arm架构的,而编译系统内核之前,是没有asm这个链接的,所以,在编译过程中,创建该链接时文件名字与asm文件夹的名字发生冲突,于是系统报错了。 解决方法: 删除源码根目录下的include/asm,文件夹,问题解决。 3、如果编译的过程中出现错误:

最全的Android源码目录结构详解

最全的Android源码目录结构详解 收藏 转自http: 67."html Android 2."1 |-- Makefile |-- bionic(bionic C库) |-- bootable(启动引导相关代码) |-- build(存放系统编译规则及generic等基础开发包配置)|-- cts(Android 兼容性测试套件标准) |-- dalvik |-- development |-- external |-- frameworks |-- hardware |-- out |-- packages |-- prebuilt |-- sdk |-- system

`-- vendor bionic目录 |-- libc ||-- arch-arm ||-- arch-x86 ||-- bionic ||-- docs ||-- include ||-- kernel ||-- private ||-- stdio ||-- stdlib ||-- string ||-- tools ||-- tzcode ||-- unistd |`-- zoneinfo |-- libdl |-- libm ||-- alpha ||-- amd64(dalvik JAVA虚拟机)

(应用xx相关) (android使用的一些开源的模组) (核心框架——java及C++语言) (部分厂家开源的硬解适配层HAL代码) (编译完成后的代码输出与此目录) (应用程序包) (x86和arm架构下预编译的一些资源) (sdk及模拟器) (底层文件系统库、应用及组件——C语言)(厂商定制代码)(Cxx) ARM架构,包含系统调用汇编实现) x86架构,包含系统调用汇编实现) (由C实现的功能,架构无关) (文档) (头文件) (Linux内核中的一些头文件) (?nesbsd系统相关,具体作用不明) (?一些私有的头文件) (stdio实现) (stdlib实现) (string函数实现)

android获取手机内部存储空间和外部存储空间

获取android文件系统的信息,需要Environment类和StatFs类的支持。 (1)Environment 是一个提供访问环境变量的类,常用的方法有: A,getDataDirectory() ,返回File ,获取Android 数据目录。 B,getDownloadCacheDirectory(),返回File ,获取Android 下载/缓存内容目录。 C,getExternalStorageDirectory() ,返回File ,获取外部存储目录即SDCard。 D,getExternalStorageState() ,返回File,获取外部存储设备的当前状态。 E,getRootDirectory() ,返回File,获取Android 的根目录。 常用的变量,以getExternalStorageState返回值为例: A,MEDIA_BAD_REMOVAL,表明SDCard 被卸载前己被移除。 B,MEDIA_CHECKING,表明对象正在磁盘检查。 C,MEDIA_MOUNTED,表明对象存在并具有读/写权限。 D,MEDIA_MOUNTED_READ_ONLY,表明对象权限为只读。 E,MEDIA_NOFS,表明对象为空白或正在使用不受支持的文件系统。 F,MEDIA_REMOVED,不存在SDCard。 G,MEDIA_SHARED,表明存储媒体正在通过USB共享。 H,MEDIA_UNMOUNTABLE,表明存储媒体无法挂载。 I, MEDIA_UNMOUNTED,表明存储媒体没有挂载。 (2)StatFs类,一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况。StatFs 常用方法: A,getAvailableBlocks(),返回Int,获取当前可用的存储空间。 B,getBlockCount(),返回Int,获取该区域可用的文件系统数。 C,getBlockSize(),返回Int ,大小,以字节为单位 D,getFreeBlocks(),返回Int ,该块区域剩余的空间。 (3)一个获取系统和SD卡可用容量及总总量的实例,获取容量函数如下: [java] 01.i m p o r t a n d r o i d.o s.E n v i r o n m e n t; 02.i m p o r t a n d r o i d.o s.S t a t F s; 03.i m p o r t j a v a.i o.F i l e; 04.p u b l i c l o n g g e t A v a i l a b l e I n t e r n a l M e m o r y S i z e(){ 05.F i l e p a t h=E n v i r o n m e n t.g e t D a t a D i r e c t o r y();//获取数据目录 06.S t a t F s s t a t=n e w S t a t F s(p a t h.g e t P a t h()); 07.l o n g b l o c k S i z e=s t a t.g e t B l o c k S i z e(); 08.l o n g a v a i l a b l e B l o c k s=s t a t.g e t A v a i l a b l e B l o c k s(); 09.r e t u r n a v a i l a b l e B l o c k s*b l o c k S i z e; 10.} 11. 12.p u b l i c l o n g g e t T o t a l I n t e r n a l M e m o r y S i z e(){ 13.F i l e p a t h=E n v i r o n m e n t.g e t D a t a D i r e c t o r y(); 14.S t a t F s s t a t=n e w S t a t F s(p a t h.g e t P a t h()); 15.l o n g b l o c k S i z e=s t a t.g e t B l o c k S i z e(); 16.l o n g t o t a l B l o c k s=s t a t.g e t B l o c k C o u n t(); 17.r e t u r n t o t a l B l o c k s*b l o c k S i z e; 18.} 19.无法加载插件。

Android的文件系统根目录的结构

经过这几天在网上搜索关于Android文件系统的相关资料,发现已经有很多高手分析了Android的文件系统,这些高手多从不同的方面分析了其文件系统的结构和运行原理。我这里就写一下自己的理解。首先是Android的文件系统根目录的结构: # pwd && ls -a -l / drwxrwxrwt root root 2009-06-10 09:53 sqlite_stmt_journals drwxrwx--- system cache 2008-09-06 22:51 cache d---rwxrwx system system 1970-01-01 08:00 sdcard lrwxrwxrwx root root 2009-06-09 22:11 etc -> /system/etc drwxr-xr-x root root 2008-09-06 22:45 system drwxr-xr-x root root 1970-01-01 08:00 sys drwxr-x--- root root 1970-01-01 08:00 sbin -rw-r--r-- root root 117 1970-01-01 08:00 runme.sh dr-xr-xr-x root root 1970-01-01 08:00 proc -rwxr-x--- root root 1704 1970-01-01 08:00 init.trout.rc -rwxr-x--- root root 9329 1970-01-01 08:00 init.rc -rwxr-x--- root root 1677 1970-01-01 08:00 init.goldfish.rc -rwxr-x--- root root 106636 1970-01-01 08:00 init -rw-r--r-- root root 118 1970-01-01 08:00 default.prop drwxrwx--x system system 2008-09-06 22:51 data drwx------ root root 2009-06-07 16:29 root drwxr-xr-x root root 2009-06-09 22:11 dev sqlite_stmt_journals:一个根目录下的tmpfs文件系统,用于存放临时文件数据。 cache :是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。 sdcard:是SD卡中的FAT32文件系统挂载的目录 etc :指向 /system/etc ,众所周知的配置文件存放目录 system :是一个很重要的目录,系统中的大部分东西都在这里了,以下是目录结构: # ls -a -l /system drwxr-xr-x root 208 1970-01-01 08:00 xbin drwxr-xr-x root root 1970-01-01 08:00 modules drwxr-xr-x root root 2008-08-01 20:00 framework drwxr-xr-x root root 2008-08-01 20:00 fonts drwxr-xr-x root root 2008-08-01 20:00 etc -rw-r--r-- root root 2197 2008-08-01 20:00 build.prop drwxr-xr-x root root 2008-08-01 20:00 media drwxr-xr-x root shell 2008-08-01 20:00 bin drwxr-xr-x root root 2008-08-01 20:00 usr drwxr-xr-x root root 2008-08-01 20:00 app drwxr-xr-x root root 2008-09-06 22:45 lost+found drwxr-xr-x root root 2008-08-01 20:00 lib drwxr-xr-x root root 2008-08-01 20:00 sd -rw-r--r-- root root 145 2008-08-01 20:00 init.rc sys :用于挂载sysfs文件系统。在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值

android系统的手机目录各个文件夹代表什么

自己整理的: 打开ROOT目录后所看到的路径: ROOT手机后,安装一个Root Explor文件管理器(RE管理器) 就可以看到手机系统里的各种文件夹以及各种文件了 Mounted as r/o是什么?(Mounted as r/w可以切换成Mounted as r/o) r/w = read/write(就是说可以更改,删除等等)r/o = read only (就是单单读资料,不能更改) 1、acct文件夹 根目录/acct/ 系统回收站,误删除的系统文件恢复 ACCT 计算机语言,系统调用禁止/启用系统记录进程信息。 名称: acct -- 启用/禁止进程信息记录功能 库: Standard C Library (libc, -lc) 概要: #include int acct(const char * file, int mode); 详述: acct()系统调用禁止/启用系统 系统调用禁止/启用系统记录进程信息。若,记录功能将被禁用; 若file指向一个存在的文件(以'\0'结尾),则记录功能被启用, 正常结束的进程都会在该文件尾添加对应的信息。异常结束是指重启或其它致命的系统问题。 acct()不能生成那些永远不会结束的进程的信息 acct()系统调用禁止/启用系统记录进程信息。若,记录功能将被禁用; 若file指向一个存在的文件(以'\0'结尾),则记录功能被启用,

正常结束的进程都会在该文件尾添加对应的信息。异常结束是指重启或其它致命的系统问题。 acct()不能生成那些永远不会结束的进程的信息 2、cache文件夹-----缓存(cache) 3、config文件夹【计】(计算机系统)配置 1、mnt 挂载点目录 2、etc 系统主要配置文件 3、system Android 系统文件 4、sys Linux 内核文件 5、proc 运行时文件 6、init.rc 启动脚本 7、default.prop 系统属性配置文件 8、data 用户程序目录 9、dev 设备文件 system 目录下面的主要文件目录下面也简单介绍一下: 1、usr 用户文件夹,包含共享、键盘布局、时间区域文件等 2、app 常规下载的应用程序,这些apk 包都是受保护的哦 3、lib 系统底层库,如平台运行时库等 4、etc 系统的配置文件,比如APN接入点设置等核心配置等 5、framework Android 系统平台核心framework 的文件 6、build.prop Android 系统属性配置文件 7、xbin 常用开发工具,比如tcpdump/sqlite3 等 8、bin 系统工具,比如ps/cp/pm 等

最全的Android源码目录结构详解

最全的Android源码目录结构详解收藏 转自https://www.sodocs.net/doc/9e14697807.html,/a/android/2010/0622/67.html Android 2.1 |-- Makefile |-- bionic (bionic C库) |-- bootable (启动引导相关代码) |-- build (存放系统编译规则及generic等基础开发包配置) |-- cts (Android兼容性测试套件标准) |-- dalvik (dalvik JAVA虚拟机) |-- development (应用程序开发相关) |-- external (android使用的一些开源的模组) |-- frameworks (核心框架——java及C++语言) |-- hardware (部分厂家开源的硬解适配层HAL代码) |-- out (编译完成后的代码输出与此目录) |-- packages (应用程序包) |-- prebuilt (x86和arm架构下预编译的一些资源) |-- sdk (sdk及模拟器) |-- system (底层文件系统库、应用及组件——C语言) `-- vendor (厂商定制代码) bionic 目录 |-- libc (C库) | |-- arch-arm (ARM架构,包含系统调用汇编实现) | |-- arch-x86 (x86架构,包含系统调用汇编实现) | |-- bionic (由C实现的功能,架构无关) | |-- docs (文档) | |-- include (头文件) | |-- inet (?inet相关,具体作用不明) | |-- kernel (Linux内核中的一些头文件) | |-- netbsd (?nesbsd系统相关,具体作用不明) | |-- private (?一些私有的头文件) | |-- stdio (stdio实现) | |-- stdlib (stdlib实现) | |-- string (string函数实现) | |-- tools (几个工具) | |-- tzcode (时区相关代码) | |-- unistd (unistd实现) | `-- zoneinfo (时区信息) |-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)|-- libm (libm数学库的实现,) | |-- alpha (apaha架构) | |-- amd64 (amd64架构)

ANDROID操作系统技术研究

Android操作系统 一、系统简介 Android是一种以Linux为基础的开放源代码操作系统,最初由Andy Rubin开发,初始只能支持手机,2005年被Google收购后,联合多个制造商组成开放手机联盟(Open Handset Alliance,OHA)进行改良,逐渐扩展到平板电脑及其他领域。 二、发展历程 自Google在2009年4月30日发布1.5版名为Cupcake的Android 系统,截止2011年10月19日已是4.0版本,在市场上已经超越诺基亚Symbian系统。 Android1.1 发布时间:发布于2008年9月 Android1.5Cupcake纸杯蛋糕 发布时间:发布于2009年5月 Android1.6Donut甜甜圈 2009年9月发布 Android2.0Eclair松饼 2009年10月26日 Android2.2Froyo冻酸奶 谷歌于北京时间2010年5月20日晚上10:30点在旧金山Moscone会展中心举办Google I/O2010大会第二天的会议,Google 正式发布了代号是“froyo冻酸奶”的Android操作系统2.2版。 相对于上一版本的改变: 1、整体性能大幅度的提升 2、3G网络共享功能。 3、Flash的支持。

4、App2sd功能。 5、全新的软件商店。 6、更多的Web应用API接口的开发。 Android2.3Gingerbread姜饼 gingerdroid 北京时间2010年12月7日凌晨,Google正式对外发布了他们的下一代智能手机操作系统Android2.3也就被大家所熟知的Android Gingerbread系统。 主要更新包括: 游戏:增加了新的垃圾回收和优化处理事件,以提高对游戏的支持能力。原生代码可直接存取输入和感应器事件、EGL/OpenGL ES、OpenSL ES。新的管理窗口和生命周期的框架。 多媒体:支持VP8和WebM视频格式,提供AAC和AMR宽频编码,提供了新的音频效果器,比如混响、均衡、虚拟耳机和低频提升 通讯方式:支持前置摄像头、SIP/VOIP和NFC(近场通讯) 站在用户的角度看,这次更新的亮点主要有: 简化界面、速度提升: 更快更直观的文字输入: 一键文字选择和复制/粘帖: 改进的电源管理系统: 新的应用管理方式: 原生支持前置前置摄像头、互联网通话和NFC(近场通讯):

Android Framework之目录结构

Android 2.1 |-- Makefile |-- bionic (bionic C库) |-- bootable (启动引导相关代码) |-- build (存放系统编译规则及generic等基础开发包配置) |-- cts (Android兼容性测试套件标准) |-- dalvik (dalvik JAVA虚拟机) |-- development (应用程序开发相关) |-- external (android使用的一些开源的模组) |-- frameworks (核心框架——java及C++语言) |-- hardware (部分厂家开源的硬解适配层HAL代码) |-- out (编译完成后的代码输出与此目录) |-- packages (应用程序包) |-- prebuilt (x86和arm架构下预编译的一些资源) |-- sdk (sdk及模拟器) |-- system (底层文件系统库、应用及组件——C语言) `-- vendor (厂商定制代码) bionic 目录 |-- libc (C库) | |-- arch-arm (ARM架构,包含系统调用汇编实现) | |-- arch-x86 (x86架构,包含系统调用汇编实现) | |-- bionic (由C实现的功能,架构无关) | |-- docs (文档) | |-- include (头文件) | |-- inet (?inet相关,具体作用不明) | |-- kernel (Linux内核中的一些头文件) | |-- netbsd (?nesbsd系统相关,具体作用不明) | |-- private (?一些私有的头文件) | |-- stdio (stdio实现) | |-- stdlib (stdlib实现) | |-- string (string函数实现) | |-- tools (几个工具) | |-- tzcode (时区相关代码) | |-- unistd (unistd实现) | `-- zoneinfo (时区信息) |-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)|-- libm (libm数学库的实现,) | |-- alpha (apaha架构) | |-- amd64 (amd64架构) | |-- arm (arm架构) | |-- bsdsrc (?bsd的源码) | |-- i386 (i386架构) | |-- i387 (i387架构?) | |-- ia64 (ia64架构) | |-- include (头文件) | |-- man (数学函数,后缀名为.3,一些为freeBSD的库文件) | |-- powerpc (powerpc架构) | |-- sparc64 (sparc64架构) | `-- src (源代码) |-- libstdc++ (libstdc++ C++实现库) | |-- include (头文件) | `-- src (源码) |-- libthread_db (多线程程序的调试器库) | `-- include (头文件) `-- linker (动态链接器) `-- arch (支持arm和x86两种架构) bootable 目录 . |-- bootloader (适合各种bootloader的通用代码) | `-- legacy (估计不能直接使用,可以参考) | |-- arch_armv6 (V6架构,几个简单的汇编文件) | |-- arch_msm7k (高通7k处理器架构的几个基本驱动) | |-- include (通用头文件和高通7k架构头文件) | |-- libboot (启动库,都写得很简单) | |-- libc (一些常用的c函数) | |-- nandwrite (nandwirte函数实现) | `-- usbloader (usbloader实现) |-- diskinstaller (android镜像打包器,x86可生产iso) `-- recovery (系统恢复相关) |-- edify (升级脚本使用的edify脚本语言)

相关主题