最全的Android源码目录结构详解
安卓系统文件夹详细结构及其文件解析

安卓系统文件夹详细结构及其文件解析安卓系统的文件夹结构是一个非常复杂的层次结构,涵盖了各种各样的文件和文件夹,用于管理设备的各种功能和资源。
下面是对安卓系统文件夹结构的详细解析。
1.根目录:- /system:系统级文件夹,包含了系统的核心组件和应用程序。
其中最重要的文件是/ system / bin / 和/ system / xbin / 中的二进制可执行文件。
- /data:包含了应用程序和用户数据的文件夹。
每个应用程序都会被分配一个唯一的文件夹,其中包含了该应用程序的所有数据。
- /cache:用于存储临时文件和缓存文件。
- /mnt:用于挂载外部存储设备和其他文件系统。
2. /system目录:- /system/bin:包含了系统级的可执行文件,例如adb、mount等。
- /system/etc:包含了一些系统配置文件,例如hosts文件用于域名解析。
- /system/framework:包含了系统框架的核心文件,例如Android 的API类库和资源文件。
- /system/lib:包含了系统级的共享库,例如图形渲染库、音频库等。
- /system/media:包含了系统的多媒体资源文件,例如系统的铃声、壁纸等。
- /system/usr:包含了一些系统级的用户应用程序。
3. /data目录:- /data/app:包含了已安装的应用程序的APK文件。
- /data/data:包含了应用程序的数据文件,包括数据库、偏好设置等。
- /data/cache:包含了应用程序的缓存文件。
- /data/misc:包含了一些杂项的系统数据,例如wifi配置文件。
- /data/system:包含了系统级的数据,例如安全证书、用户配置等。
4. /cache目录:- /cache/dalvik-cache:包含了Dalvik虚拟机的缓存文件,用于提高应用程序的启动速度。
- /cache/recovery:包含了刷机时使用的恢复模式的相关文件。
Android项目工程目录详解

Android项目工程目录详解1. Src:该目录中存放的是该项目的源代码,这个目录包含了你即将创建的Java源代码文件,这个目录里的文件是根据package结构管理的,它与普通java项目中的/src目录很相似。
2.Gen:自动生成的文件目录。
该目录下的文件全部都是ADT自动生成的,一般并不需要去修改,该目录下定义了一个R.java文件,该文件相当于项目的字典,为项目中用户界面、字符串、图片等资源都会在该类中创建其惟一的ID,当项目中使用这些资源时,会通过该ID得到资源的引用。
R.java是在建立项目时自动生成的,这个文件是只读模式的,不能更改。
R.java文件中定义了一个类——R,R类中包含很多静态类,且静态类的名字都与res文件夹中的一个名字对应,即R类定义该项目所有资源的索引。
通过R.java我们可以很快地查找我们需要的资源,另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
R.java很重要,不能修改不能删除。
3.Android{版本号}:这个目录包含了项目需要的库文件(Jar文件),这和普通Java项目中的/lib目录很相似。
同时其中还包含项目打包时需要的META-INF目录.4.Android Private Libraries:所有的第三方JAR包引入都被放入了Android Private Libraries中5.Android Dependencies:新版本的ADT修改了第三方jar的导入方式,之前可以在工程里面做关联,会在工程上自动添加ReferenceLibrary。
在新版本的ADT环境下,只需要在工程目录下新建libs文件夹,注意是libs不是lib,然后将第三方的jar复制进去,eclipse会自动将这个jar添加到Android Dependencies文件夹下,不必在通过BuildPath自己去修改了,也不需要ReferenceLibrary了。
Android文件系统的结构及目录用途

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下。
ANDROID源码结构分析

ANDROID源码结构分析Android是一个开源的操作系统,其源代码以Apache License 2.0开源许可证的形式向公众发布。
它的源码结构非常庞大而复杂,涵盖了各种组件和功能,以支持不同形式的设备和应用。
本文将对Android源码的结构进行详细分析,让读者对Android系统的内部构建有更深入的理解。
Android源码主要分为四个部分:内核、硬件抽象层(HAL)、Android运行时环境(ART/Dalvik)和框架层。
这些部分协同工作,形成了Android完整的系统架构。
1. 内核部分:Android操作系统的底层是Linux内核,它提供了访问硬件设备、内存管理、进程管理、安全性等基本功能。
Android对Linux内核进行了一些定制,以适应移动设备的特性和需求,比如增加了对电池管理、相机功能、音频系统的支持等。
Android的内核代码位于kernel目录下,包括了Linux内核的源码以及Android特有的补丁。
2. 硬件抽象层(HAL):HAL层负责将底层硬件与操作系统之间的交互抽象出来,为上层应用提供统一的接口。
HAL层的代码位于硬件厂商提供的硬件抽象层的目录下,通常是在device或vendor目录下,有些库会放在硬件设备目录中。
3. Android运行时环境:Android系统采用了Java虚拟机(Dalvik 或ART)作为应用程序运行的环境。
Dalvik是Android4.4之前的默认虚拟机,而ART是Android5.0及之后的默认虚拟机。
Android运行时环境负责将应用程序的Java字节码翻译成机器码,执行应用程序代码。
运行时环境的代码位于art和dalvik目录下。
4. 框架层:框架层包括了各种系统服务、应用程序接口(API)和系统应用程序。
这些框架组件实现了Android系统的核心功能,比如窗口管理、通信服务、多媒体播放、数据存储等。
框架层的代码位于frameworks目录下,其中包括了各种子目录用于存放不同功能模块的代码,比如native相关的代码在native目录下,多媒体相关的代码在media目录下等。
安卓项目目录结构说明

安卓项目目录结构说明安卓项目的目录结构是指在Android应用开发过程中,Android工程所使用的特定目录结构。
这些目录按照特定的规则组织和存放项目的源代码、资源文件、配置文件等内容,以方便开发者管理和维护项目。
一般来说,一个标准的Android项目包含以下几个主要目录:1. `app`目录:是项目的主要目录,包含了应用的主要代码和资源文件。
在该目录下,主要包含以下几个子目录:- `src`目录:包含了项目的源代码。
其中又分为`main`目录和`androidTest`目录。
- `main`目录:是开发者主要关注的目录,包含了应用的主要代码和资源。
主要包含的子目录有:- `java`目录:存放Java代码文件。
包名与包含入口类(例如`MainActivity.java`)的包名一致。
- `res`目录:包含了应用的各种资源文件,如布局文件、字符串资源、图标、图片等。
主要包含以下几个子目录:- `layout`目录:存放应用的布局文件,扩展名为`.xml`,用于定义应用的界面布局。
- `values`目录:存放了一些配置信息和资源声明,如颜色、尺寸、字符串等。
- `drawable`目录:存放图片资源文件,如背景图片、图标等。
- `mipmap`目录:存放应用的启动图标。
- `AndroidManifest.xml`文件:是Android应用的清单文件,用于描述应用的名称、入口类、权限等信息。
- `Assets`目录:存放一些原始文件,如声音、视频等,可以通过代码访问。
- `androidTest`目录:包含了应用的功能测试代码。
用于编写和运行一些UI功能测试和单元测试。
- `build.gradle`文件:是应用的构建脚本,用于配置应用的依赖库、插件和其他构建选项。
2. `gradle`目录:包含了项目的Gradle构建脚本,用于定义项目的构建逻辑和依赖关系。
4. `build`目录:是构建过程中生成的临时文件和构建输出文件的存放目录。
安卓项目目录结构说明

安卓项目目录结构说明安卓项目的目录结构是指在开发安卓应用程序时,项目所使用的文件和文件夹的组织方式。
一个好的目录结构可以使代码的管理更加清晰和高效。
下面是一个典型的安卓项目目录结构的说明。
1. app文件夹:这个是一个安卓项目的主要文件夹,包含了应用程序的源代码文件、资源文件和配置文件等。
以下是该文件夹的主要子文件夹和文件的说明:- manifest文件:在这个文件夹中,有一个AndroidManifest.xml文件,它是一个必需的文件,包含了应用程序的所有组件和权限等信息。
- src文件夹:这个文件夹包含了所有的源代码文件。
通常,该文件夹下还有三个子文件夹:- java文件夹:该文件夹包含了Java代码文件,用于定义应用程序的活动和其他组件。
- res文件夹:这个文件夹包含了应用程序的资源文件,如布局文件、字符串文件、图片文件等。
- AndroidTest文件夹:这个文件夹包含了一些用于测试应用程序的测试代码文件。
- build.gradle文件:这个文件是一个Gradle构建脚本,用于构建和打包应用程序。
2. Gradle文件夹:这个文件夹包含了Gradle构建系统的配置文件。
Gradle是一种用于构建和打包Android应用程序的工具。
- gradle.properties文件:在这个文件中,可以定义一些全局的Gradle配置属性。
- gradle-wrapper.properties文件:3. .idea文件夹:这个文件夹是用于存储IntelliJ IDEA集成开发环境的配置文件。
4. build文件夹:这个文件夹是在构建过程中生成的,包含了构建和打包应用程序所需要的文件。
该文件夹通常包含以下子文件夹和文件:- outputs文件夹:这个文件夹包含了构建和打包应用程序的输出文件,如apk文件。
- intermediates文件夹:这个文件夹包含了构建过程中的一些临时文件。
- generated文件夹:这个文件夹包含了一些自动生成的文件。
android开发目录结构说明

src目录是放源码的地方。
gen目录是自生成文件,程序员不应该改此目录下的文件。
下面两个Android目录是android自带的支持文件及低版本支持文件。
assets目录是资源文件,放置音频图片等,此文件夹下面的文件不会自动生成对应的ID。
bin目录是生成二进制文件的文件夹。
libs目录是放置第三方文件的目录。
res目录是放置资源文件,此目录下的文件会自动的生成对应的ID,通过ID可以在java 代码中访问文件。
res > drawable - 文件夹是放置不同分辨率图片的文件夹,高分辨率,低分辨率,中等分辨率,超高分辨率。
res > layout文件夹是放置布局文件。
res > menu文件夹放置菜单文件。
res > values文件夹放置各种值,例如字符串,参数变量等。
针对不同的设备可以使用不同的文件夹。
AndroidManifest.xml项目的总配置项,记录应用中使用到各种全局的配置
ic_launcher-web.png这个是为了google Play市场使用展示的图标,它需要的是512×512的高分辨率的图标。
proguard-project.txt是为了保护Android项目而做的代码混淆使用的。
project.properties是设置sdk配置等信息文件。
Android目录结构(详解)

下面是HelloAndroid项目在eclipse中的目录层次结构:由上图可以看出项目的根目录下共有九个文件(夹),下面就这九个文件(夹)进行详解:1.1src文件夹和assets文件夹:每个Android程序都包含资源目录(src)和资产目录(assets),资源和资产听起来感觉没有多大差别,但在存储外部内容时用资源(src)比较多,其中它们的区别在于存放在资源(src)下的内容可以通过应用程序的R类进行访问,而存放在资产(assets)下的内容会保持原始文件的格式,如果需要访问,则必须使用AssetManager以字节流的方式来读取,用起来非常的不方便。
为了方便使用,通常文件和数据都会保存在资源(src)目录下1.2res(Resource)目录:资源目录可以存放一些图标,界面文件和应用中用到的文字信息,下图为res目录截图:1.2.1 drawable-*dpi文件夹:将图标按分辨率的高低放入不同的目录,其中draeable-hdpi 用来存放高分辨率的图标,drawable-mdpi用来存放中等分辨率的图标,drawable-ldpi 用来存放低分辨率的图标1.2.2 values文件夹:用来存放文字的信息(1)strings.xml:用来定义字符串和数值<resources><string name="hello">Hello World, Hello 3G</string><string name="app_name">Android1.1</string><string name="test">哥想你了</string><string name="startButton">按钮1</string><string name="start">按钮1</string></resources>每个string标签生命了一个字符串,name属性指定它的引用值(2)为什么要把这些出现的文字单独放在strings.xml文件中?答案:一是为了国际化,如果需要将文件中的文字换成别的国家的语言,就可以只需要替换掉一个strings.xml文件就可以了二是为了减少应用的体积,例如,我们要在应用中使用“哥想你了”这句话1000次,如果我们没有将“哥想你了”定义在strings.xml文件中,而是直接在应用中使用时写上这几个字,那么我们就会在应用中写4000个字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最全的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的源码)| |-- 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脚本语言)|-- etc (init.rc恢复脚本)|-- minui (一个简单的UI)|-- minzip (一个简单的压缩工具)|-- mtdutils (mtd工具)|-- res (资源)| `-- images (一些图片)|-- tools (工具)| `-- ota (OTA Over The Air Updates升级工具)`-- updater (升级器)build目录.|-- core (核心编译规则)|-- history (历史记录)|-- libs| `-- host (主机端库,有android “cp”功能替换)|-- target (目标机编译对象)| |-- board (开发平台)| | |-- emulator (模拟器)| | |-- generic (通用)| | |-- idea6410 (自己添加的)| | `-- sim (最简单)| `-- product (开发平台对应的编译规则)| `-- security (密钥相关)`-- tools (编译中主机使用的工具及脚本)|-- acp (Android "acp" Command)|-- apicheck (api检查工具)|-- applypatch (补丁工具)|-- apriori (预链接工具)|-- atree (tree工具)|-- bin2asm (bin转换为asm工具)|-- check_prereq (检查编译时间戳工具)|-- dexpreopt (模拟器相关工具,具体功能不明)|-- droiddoc (?作用不明,java语言,网上有人说和JDK5有关)|-- fs_config (This program takes a list of files and directories)|-- fs_get_stats (获取文件系统状态)|-- iself (判断是否ELF格式)|-- isprelinked (判断是否prelinked)|-- kcm (按键相关)|-- lsd (List symbol dependencies)|-- releasetools (生成镜像的工具及脚本)|-- rgb2565 (rgb转换为565)|-- signapk (apk签名工具)|-- soslim (strip工具)`-- zipalign (zip archive alignment tool)dalvik目录dalvik虚拟机.|-- dalvikvm (main.c的目录)|-- dexdump (dex反汇编)|-- dexlist (List all methods in all concrete classes in a DEX fil e.)|-- dexopt (预验证与优化)|-- docs (文档)|-- dvz (和zygote相关的一个命令)|-- dx (dx工具,将多个java转换为dex)|-- hit (?java语言写成)|-- libcore (核心库)|-- libcore-disabled (?禁用的库)|-- libdex (dex的库)|-- libnativehelper (Support functions for Android's class libraries)|-- tests (测试代码)|-- tools (工具)`-- vm (虚拟机实现)development 目录(开发者需要的一些例程及工具)|-- apps (一些核心应用程序)| |-- BluetoothDebug (蓝牙调试程序)| |-- CustomLocale (自定义区域设置)| |-- Development (开发)| |-- Fallback (和语言相关的一个程序)| |-- FontLab (字库)| |-- GestureBuilder (手势动作)| |-- NinePatchLab (?)| |-- OBJViewer (OBJ查看器)| |-- SdkSetup (SDK安装器)| |-- SpareParts (高级设置)| |-- Term (远程登录)| `-- launchperf (?)|-- build (编译脚本模板)|-- cmds (有个monkey工具)|-- data (配置数据)|-- docs (文档)|-- host (主机端USB驱动等)|-- ide (集成开发环境)|-- ndk (本地开发套件——c语言开发套件)|-- pdk (Plug Development Kit)|-- samples (例程)| |-- AliasActivity (?)| |-- ApiDemos (API演示程序)| |-- BluetoothChat (蓝牙聊天)| |-- BrowserPlugin (浏览器插件)| |-- BusinessCard (商业卡)| |-- Compass (指南针)| |-- ContactManager (联系人管理器)| |-- CubeLiveWallpaper (动态壁纸的一个简单例程)| |-- FixedGridLayout (像是布局)| |-- GlobalTime (全球时间)| |-- HelloActivity (Hello)| |-- Home (Home)| |-- JetBoy (jetBoy游戏)| |-- LunarLander (貌似又是一个游戏)| |-- MailSync (邮件同步)| |-- MultiResolution (多分辨率)| |-- MySampleRss (RSS)| |-- NotePad (记事本)| |-- RSSReader (RSS阅读器)| |-- SearchableDictionary (目录搜索)| |-- SimpleJNI (JNI例程)| |-- SkeletonApp (空壳APP)| |-- Snake (snake程序)| |-- SoftKeyboard (软键盘)| |-- Wiktionary (?维基)| `-- WiktionarySimple(?维基例程)|-- scripts (脚本)|-- sdk (sdk配置)|-- simulator (?模拟器)|-- testrunner (?测试用)`-- tools (一些工具)external 目录.|-- aes (AES加密)|-- apache-http (网页服务器)|-- astl (ASTL (Android STL) is a slimmed-down version of the regula r C++ STL.)|-- bison (自动生成语法分析器,将无关文法转换成C、C++)|-- blktrace (blktrace is a block layer IO tracing mechanism)|-- bluetooth (蓝牙相关、协议栈)|-- bsdiff (diff工具)|-- bzip2 (压缩工具)|-- clearsilver (html模板系统)|-- dbus (低延时、低开销、高可用性的IPC机制)|-- dhcpcd (DHCP服务)|-- dosfstools (DOS文件系统工具)|-- dropbear (SSH2的server)|-- e2fsprogs (EXT2文件系统工具)|-- elfcopy (复制ELF的工具)|-- elfutils (ELF工具)|-- embunit (Embedded Unit Project)|-- emma (java代码覆盖率统计工具)|-- esd (Enlightened Sound Daemon,将多种音频流混合在一个设备上播放)|-- expat (Expat is a stream-oriented XML parser.)|-- fdlibm (FDLIBM (Freely Distributable LIBM))|-- freetype (字体)|-- fsck_msdos (dos文件系统检查工具)|-- gdata (google的无线数据相关)|-- genext2fs (genext2fs generates an ext2 filesystem as a normal (non-roo t) user)|-- giflib (gif库)|-- googleclient (google用户库)|-- grub (This is GNU GRUB, the GRand Unified Bootloader.)|-- gtest (Google C++ Testing Framework)|-- icu4c (ICU(International Component for Unicode)在C/C++下的版本)|-- ipsec-tools (This package provides a way to use the native IPsec functi onality )|-- iptables (防火墙)|-- jdiff (generate a report describing the difference between two pub lic Java APIs.)|-- jhead (jpeg头部信息工具)|-- jpeg (jpeg库)|-- junit (JUnit是一个Java语言的单元测试框架)|-- kernel-headers (内核的一些头文件)|-- libffi (libffi is a foreign function interface library.)|-- libpcap (网络数据包捕获函数)|-- libpng (png库)|-- libxml2 (xml解析库)|-- mtpd (一个命令)|-- netcat (simple Unix utility which reads and writes dataacross net work connections)|-- netperf (网络性能测量工具)|-- neven (看代码和JNI相关)|-- opencore (多媒体框架)|-- openssl (SSL加密相关)|-- openvpn (VPN开源库)|-- oprofile (OProfile是Linux内核支持的一种性能分析机制。