- 参考:AndroidXRef (http://androidxref.com/)
- 版本:Pie - 9.0.0_r3
整体结构
对于 Android OS
的源码目录来说,各个版本的结构大同小异,随不同版本特性会有个别目录差异。编译后会额外产生一个 out
文件夹用于存储编译产生的文件。对于 Android 9.0.0
系统来说,其源码根目录结构如下:
- Android.bp:soong 编译配置文件,使用 soong 编译前会遍历源码目录树并找到所有 .dp 文件
- art/:ART 运行环境
- bionic/:针对 Android OS 定制的系统C库
- bootable/:Android OS 启动引导相关
- bootstrap.bash
- build/:Android OS 编译规则存放路径
- compatibility/:Android OS 兼容性计划
- cts/:Android OS 兼容性测试套件标准
- dalvik/:Android Dalvik 虚拟机相关
- developers/:Android 开发者相关文档
- development/:Android 应用开发基础设施相关
- device/:Android OS 设备相关配置
- external/:Android OS 开源模组相关
- frameworks/:应用程序框架,Android 系统核心
- hardware/:HAL 部分相关代码,硬件适配接口
- kernel/:Linux Kernel,默认不提供,需要自己单独下载导入
- libcore/:Android Java 核心类库
- libnativehelper/:Android 动态库,实现 JNI 基础
- Makefile:全局 Makefile 文件,指定编译规则
- packages/:应用程序包
- pdk/:Plug Development Kit,本地开发套件
- platform_testing/:Android OS 测试程序相关
- prebuilts/:x86 和 arm 架构下预编译资源
- sdk/:Android Java 层 SDK 和模拟器
- system/:Android 底层文件系统库、应用、组件相关
- test/:Android Vendor 测试框架相关
- toolchain/:Android 工具链相关
- tools/:Android 工具文件相关
系统架构实现
Android OS
的系统架构从上(直接与用户交互)到下(直接与硬件交互)分为好几层,其中每层的核心代码位于如下位置:
- System Apps:系统应用层部分的代码主要位于
package/
路径下 - Frameworks:应用框架层部分的代码主要位于
frameworks/
路径下 - Native C/C++ Libs:种类繁多,功能全面,并不完全位于同一路径中,常用且重要的
C/C++
程序库包括:bionic/
,frameworks/native/
,external
等 - Android Runtime:Android 运行时部分代码位于
art/
路径下 - HAL:硬件抽象层的代码主要位于
hardware/
路径下 - Linux Kernel:Linux 内核层主要位于
kernel/
路径下
应用层
应用层在 Android
平台的最上层,是直接与用户交互的部分,包含系统内置应用与三方应用。在源码目录中应用层对应 package
目录,其结构如下:
- apps/:系统核心应用程序
- experimental/:第三方应用程序
- inputmethods/:输入法路径
- providers/:内容提供者路径
- screensavers/:屏幕保护服务
- services/:通信服务
- wallpapers/:壁纸服务
应用框架
Android OS
核心部分,frameworks
部分。向上给应用层提供接口,向下与 C/C++
程序库及 HAL
等衔接。应用框架部分的代码主要位于 frameworks/av
与 frameworks/base
路径下。
framework
路径结构如下:
- av/:多媒体框架相关
- base/:Android Frameworks 的主要核心目录
- compile/:编译相关
- data-binding/:数据绑定相关组件
- ex/:文件解析器相关
- hardware/:硬件适配接口相关
- layoutlib/:布局文件相关
- minikin/:Android 原生字体效果
- ml/:机器学习神经网络相关
- multidex/:多 dex 文件加载相关
- native/:native 实现相关
- opt/:基础应用软件相关
- rs/:Render Script,3D 接口相关
- support/:frameworks 支持软件
- wilhelm/:基于 Khronos 的 OpenSL ES 与 OpenMAX AL 的audio 与 multimedia 实现
frameworks/base
路径结构如下:
- Android.bp
- Android.mk
- apct-tests/:性能优化测试
- api/:Android 应用框架层声明类、属性、资源
- CleanSpec.mk
- cmds/:Android OS 启动时命令 commands
- config/:配置相关
- core/:frameworks 核心框架组件
- data/:Android 资源,如字体、文本、音频、视频等数据文件
- docs/:Android 项目说明文档
- drm/:权限管理、数字解密等模块
- graphics/:图像渲染模块
- keystore/:密钥库
- libs/:库文件
- location/:位置信息模块
- lowpan/:loWPAN 支持模块
- media/:多媒体管理模块
- MODULE_LICENSE_APACHE2
- native/:本地方法模块
- nfc-extras/:近场通信模块 NFC
- NOTICE
- obex/:蓝牙模块
- opengl/:2D 与 3D 图形绘制
- packages/:Android 应用层基础应用实现
- pathmap.mk
- PREUPLOAD.cfg
- proto/:协议框架
- rs/:资源框架
- samples/:样例程序
- sax/:XML 解析器模块
- services/:系统服务程序
- telecomm/:通信框架
- telephony/:电话通讯管理相关模块
- test-base/
- test-legacy/
- test-mock/
- test-runner/
- tests/:测试相关
- tools/:工具相关
- vr/:VR 相关模块
- wifi/:Wi-Fi 相关模块