Android源代码目录解构简介
·
Android 源代码目录解析
Android 源代码(AOSP, Android Open Source Project)的目录结构庞大且模块化,按功能和组件划分为多个核心目录。理解这些目录的含义有助于快速定位和研究特定功能的实现,以下是完整的目录解析。
一、核心根目录结构
android/
├── art/ # Android 运行时(ART),替代早期的 Dalvik 虚拟机
├── bionic/ # Android 自研的 C 库(libc)、C++ 库(libstdc++)及 linker
├── bootable/ # 启动相关代码(如 bootloader、recovery 模式)
├── build/ # 构建系统(Makefile、Blueprint、Soong 等构建规则)
├── cts/ # 兼容性测试套件(Compatibility Test Suite)
├── dalvik/ # 旧版 Dalvik 虚拟机(Android 5.0 后被 ART 取代,仅保留兼容代码)
├── developers/ # 开发者文档和工具
├── development/ # 开发相关工具(如 SDK 工具、模拟器脚本)
├── device/ # 设备厂商定制代码(按厂商/型号分类,如 device/google/pixel)
├── docs/ # 系统文档
├── external/ # 外部开源库(如 SQLite、FFmpeg、WebKit 等,非 Android 自研)
├── frameworks/ # Android 框架层核心代码(应用开发的 API 实现)
├── hardware/ # 硬件抽象层(HAL)及硬件相关接口
├── kernel/ # Linux 内核源码(通常为特定设备适配的内核)
├── libcore/ # Java 核心库(如 java.lang、java.util 等基础类)
├── libnativehelper/ # JNI 桥接相关的辅助库
├── manifest/ # 清单文件(记录模块依赖关系)
├── out/ # 编译输出目录(生成的镜像、二进制文件等)
├── packages/ # 系统应用(如 Settings、Launcher、Phone 等)
├── pdk/ # 平台开发工具包(供设备厂商使用)
├── prebuilts/ # 预编译工具(如交叉编译器、模拟器二进制文件)
├── sdk/ # SDK 相关文件(仅包含部分配置,完整 SDK 需单独下载)
├── system/ # 系统核心服务(如 init 进程、日志服务、权限管理)
├── toolchain/ # 编译工具链(如 GCC、Clang)
└── tools/ # 各种开发和调试工具
二、关键目录详解
1. frameworks/ - 框架层核心(最常研究的目录)
Android 框架层的实现,是应用层 API 的底层支撑,核心子目录如下:
frameworks/base/:框架层核心代码,细分模块:api/:API 定义(如android.jar的接口规范)core/:核心服务实现(如ActivityManagerService、WindowManagerService)graphics/:图形系统(绘制、渲染、SurfaceFlinger 显示服务)location/:定位服务(GPS、网络定位相关逻辑)media/:多媒体框架(音频/视频编解码、播放控制)packages/:框架依赖的资源包(系统主题、默认图标等)services/:系统服务核心(如PowerManagerService、NotificationManagerService)view/:UI 组件底层(View、Activity、Fragment的实现)
frameworks/native/:原生框架(C/C++ 实现),包含 Binder IPC 驱动、显示系统、输入事件处理等frameworks/opt/:可选扩展组件(如telephony电话框架、wifi无线服务、bluetooth蓝牙服务)
2. system/ - 系统基础服务
Android 系统启动和运行的核心基础服务,确保系统正常运转:
system/core/:最核心的系统组件init/:init 进程(Android 第一个用户态进程,解析init.rc配置启动其他服务)logd/:日志服务(logcat命令的底层实现,管理系统日志)vold/:存储卷管理(SD 卡、内部存储的挂载与卸载)netd/:网络守护进程(管理网络接口、防火墙、流量统计)
system/binder/:Binder IPC 机制的核心实现(跨进程通信的底层支撑)system/security/:安全相关(权限管理、SELinux 配置、证书验证)
3. packages/ - 系统应用与组件
系统预装的应用、内容提供者和服务,直接面向用户或支撑上层功能:
packages/apps/:系统应用源码(可编译为 APK)Settings/:系统设置应用(显示、声音、账户等配置)Launcher3/:默认桌面启动器(应用图标排列、桌面交互)Phone/:电话应用(通话、联系人管理)Camera2/:相机应用(拍照、录像功能)Messages/:短信应用
packages/providers/:内容提供者(跨应用数据共享)ContactsProvider/:联系人数据库(供通讯录、电话应用调用)MediaProvider/:媒体文件管理(图片、音频、视频索引)
packages/services/:系统服务应用(后台运行的服务)Telephony/:电话服务(通话状态管理、短信处理)Print/:打印服务
4. hardware/ - 硬件抽象层(HAL)
连接框架层与硬件驱动的中间层,为上层提供统一的硬件访问接口(屏蔽硬件差异):
hardware/libhardware/:HAL 核心接口定义(如camera.h、audio.h、sensor.h)hardware/google/:谷歌定制硬件适配(如 Pixel 系列的相机 HAL、Tensor 芯片相关)hardware/ril/:无线接口层(Radio Interface Layer,与基带芯片通信,处理通话、短信、移动网络)hardware/qcom/:高通平台硬件适配(如骁龙芯片的 GPU、传感器 HAL)
5. device/ - 设备定制代码
按厂商和设备型号分类,存放特定设备的适配代码(硬件参数、驱动路径等):
- 示例路径:
device/google/pixel/(Pixel 手机适配)、device/samsung/s10/(三星 S10 适配) - 核心文件:
AndroidBoard.mk:设备编译脚本(指定编译目标、依赖)device.mk:硬件配置(屏幕分辨率、相机型号、存储大小)init.rc:设备专属的启动配置(启动特定服务、挂载分区)
6. external/ - 外部开源库
Android 集成的第三方开源项目,非自研但为系统核心依赖:
external/sqlite/:SQLite 数据库(应用本地数据存储)external/openssl/:加密库(HTTPS、数据加密)external/ffmpeg/:音视频处理(部分版本集成,用于编解码)external/chromium/:Chrome 浏览器核心(支撑 WebView 组件)external/zlib/:数据压缩库
7. build/ - 构建系统
负责将源码编译为可运行的系统镜像(如 system.img、boot.img),提供编译工具和规则:
build/make/:传统 Makefile 构建规则(早期 AOSP 核心构建方式)build/soong/:新构建系统(替代 Makefile,支持并行编译、模块化配置)build/envsetup.sh:编译环境配置脚本(提供lunch(选择编译目标)、m(全量编译)、mm(模块编译)等命令)
8. art/ 与 dalvik/ - 运行时
负责 Java 代码的执行,是 Android 应用运行的核心:
art/:ART 虚拟机(Android 5.0+ 默认),支持 AOT(预编译)和 JIT(即时编译),提升应用启动速度和运行性能dalvik/:旧版 Dalvik 虚拟机(仅保留兼容代码,Android 5.0 后不再使用)
9. out/ - 编译输出目录
源码编译后生成的所有文件存放路径,按编译目标分类:
- 示例路径:
out/target/product/pixel/(Pixel 设备的编译输出) - 核心文件:
system.img:系统镜像(包含框架层、系统应用)boot.img:启动镜像(内核 + init 进程)userdata.img:用户数据镜像(应用数据、用户配置)obj/:编译生成的中间文件(目标文件、库文件)
三、目录逻辑总结
Android 源码按“分层”和“功能”组织,整体层级关系如下:
- 底层支撑:
kernel/(Linux 内核)→bionic/(C/C++ 库)→hardware/(HAL) - 核心框架:
frameworks/(Java 框架 + 原生框架)→ 提供应用开发 API - 上层应用与服务:
packages/(系统应用、内容提供者) - 工具与构建:
build/(构建系统)、prebuilts/(预编译工具)、tools/(调试工具)
定位功能的示例
- 研究 Activity 启动流程 → 查看
frameworks/base/core/java/android/app/Activity.java及ActivityManagerService.java - 研究相机功能 → 查看
hardware/libhardware/include/hardware/camera.h(HAL 接口)和frameworks/base/core/java/android/hardware/Camera.java(框架 API) - 研究系统启动 → 查看
system/core/init/init.cpp(init 进程入口)和device/[厂商]/[设备]/init.rc(设备启动配置)
更多推荐


所有评论(0)