Android 12 源码目录结构详解
掌握 AOSP 源码目录结构是 Framework 开发的第一步。本文详细解析 Android 12 源码各目录的作用速定位代码位置!
📑 目录导航
一、顶层目录概览
二、核心目录详解
三、Framework 开发者重点目录
四、目录关系图解
五、快速定位指南
一、顶层目录概览
Android 12 源码根目录结构一览:
aosp/├──art/# Android Runtime (ART 虚拟机)├──bionic/# C 库、数学库、动态链接器├──bootable/# 启动引导相关代码├──build/# 编译系统├──cts/# 兼容性测试套件├──device/# 设备相关配置├──external/# 第三方开源项目├──frameworks/★ 框架层(最重要)├──hardware/# 硬件抽象层 (HAL)├──kernel/# Linux 内核(可选)├──libcore/# Java 核心库├──packages/★ 系统应用├──prebuilts/# 预编译二进制文件├──system/# 底层系统组件├──vendor/# 厂商定制代码├──.repo/# Repo 元数据└──out/# 编译输出目录
二、核心目录详解
1. frameworks/ – 框架层 ★★★★★
这是 Framework 开发者最常修改的目录
frameworks/├──av/# 音视频框架│ ├── camera/ # 相机框架│ ├── media/ # 媒体框架│ └── services/ # 音视频服务│├──base/★★★ 核心框架(最常修改)│ ├──core/# 核心类库│ │ └── java/android/# android.* 包│ │ ├── app/ # Activity, Service│ │ ├── content/# Intent, Context│ │ ├── view/ # View 系统│ │ ├── widget/ # UI 控件│ │ └── os/ # Handler, Binder│ ││ ├──services/★★ 系统服务│ │ └── core/java/…/server/│ │ ├── am/ # ActivityManagerService│ │ ├── wm/ # WindowManagerService│ │ ├── pm/ # PackageManagerService│ │ └── power/ # PowerManagerService│ ││ └──packages/# 框架级应用│ └── SystemUI/ ★ 系统界面│└──native/★ Native 框架 ├── services/ │ ├── surfaceflinger/# 显示合成 │ └── inputflinger/ # 输入服务 └── libs/ ├── binder/ # Binder 库 └── gui/ # GUI 库
2. packages/ – 系统应用 ★★★★
系统内置应用和内容提供者
packages/├──apps/★★ 系统应用│ ├── Settings/ # 设置│ ├── Launcher3/ # 桌面启动器│ ├── Camera2/ # 相机│ ├── Contacts/ # 联系人│ ├── Dialer/ # 拨号器│ ├── Messaging/ # 短信│ ├── Calendar/ # 日历│ ├── Gallery2/ # 图库│ └── … # 更多应用│├──providers/# 内容提供者│ ├── ContactsProvider/ # 联系人数据│ ├── MediaProvider/ # 媒体数据│ └── DownloadProvider/ # 下载数据│└──modules/# 模块化组件 (APEX) ├── Connectivity/ # 网络连接 └── Wifi/ # WiFi
3. system/ – 底层系统组件 ★★★
底层核心组件,init、adb、日志等
system/├──core/★★ 核心组件│ ├── adb/ # ADB 工具│ ├── fastboot/ # Fastboot 工具│ ├── init/ # init 进程│ ├── logcat/ # logcat 工具│ ├── logd/ # 日志守护进程│ └── libcutils/ # C 工具库│├──sepolicy/★ SELinux 策略├──netd/# 网络守护进程├──vold/# 卷管理守护进程└──bt/# 蓝牙协议栈
4. hardware/ – 硬件抽象层 (HAL) ★★★
硬件接口定义和实现
hardware/├──interfaces/★ HIDL 接口定义│ ├── audio/ # 音频 HAL 接口│ ├── camera/ # 相机 HAL 接口│ ├── graphics/ # 图形 HAL 接口│ ├── sensors/ # 传感器 HAL 接口│ ├── wifi/ # WiFi HAL 接口│ ├── bluetooth/ # 蓝牙 HAL 接口│ └── power/ # 电源 HAL 接口│├──libhardware/# HAL 库(旧版)└──google/|qcom/# 厂商实现
5. build/ – 编译系统 ★★★
Soong/Make 构建系统
build/├── envsetup.sh★ 环境初始化脚本├── make/# Make 构建规则│ ├── core/main.mk # 编译入口│ └── target/product/ # 产品配置└── soong/★ Soong 构建系统
6. art/ – Android Runtime ★★
ART 虚拟机实现
art/├── compiler/# 编译器├── dex2oat/# DEX 转 OAT 工具└── runtime/★ 运行时核心 ├── gc/ # 垃圾回收 ├── interpreter/ # 解释器 └── jit/ # JIT 编译
7. out/ – 编译输出
编译产物和中间文件
out/├── host/# 主机工具│ └── linux-x86/bin/ # 可执行文件└── target/product/<device>/ ├── system/ # system 分区 ├── vendor/ # vendor 分区 ├── system.img# 系统镜像 ├── boot.img# 启动镜像 └── symbols/ # 调试符号
三、Framework 开发者重点目录
3.1 Java Framework 层
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.2 Native Framework 层
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3 系统应用
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
四、目录关系图解
4.1 系统架构与目录对应关系
|
应用层 (Applications) Settings | Launcher | Phone | Camera | … 目录: packages/apps/ |
| ▼ |
|
Java Framework 层 ActivityManager | WindowManager | PackageManager | … 目录: frameworks/base/core/ + frameworks/base/services/ |
| ▼ |
|
Native Framework 层 SurfaceFlinger | InputFlinger | AudioFlinger | Binder 目录: frameworks/native/services/ + frameworks/native/libs/ |
| ▼ |
|
硬件抽象层 (HAL) Audio HAL | Camera HAL | Graphics HAL | Sensors HAL 目录: hardware/interfaces/ |
| ▼ |
|
Linux 内核 Binder Driver | Display Driver | Audio Driver | … 目录: kernel/ |
4.2 启动流程与目录
|
Bootloader 厂商提供 |
→ |
Kernel kernel/ |
→ |
init system/core/init/ |
|
init 启动 ▼ |
|
Zygote frameworks/base/cmds/app_process/ |
|
fork ↙ |
fork ↘ |
|
system_server frameworks/base/services/ |
App 进程 frameworks/base/core/ |
4.3 Binder 通信相关目录
|
|
|
Java 层 frameworks/base/core/java/android/os/ Binder.java | IBinder.java | Parcel.java JNI ▼ JNI 层 frameworks/base/core/jni/ android_util_Binder.cpp Native ▼ Native 层 frameworks/native/libs/binder/ Binder.cpp | BpBinder.cpp | IPCThreadState.cpp Kernel Driver ▼ 内核驱动 kernel/…/drivers/android/binder.c |
五、快速定位指南
5.1 常见开发场景对应目录
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.2 按功能模块查找
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.3 快速搜索命令
# 初始化环境后可用的搜索命令sourcebuild/envsetup.sh# 搜索 Java 代码jgrep“ActivityManagerService”# 搜索 C/C++ 代码cgrep“SurfaceFlinger”# 搜索资源文件resgrep“app_name”# 搜索 Android.bp/Android.mkmgrep“LOCAL_MODULE”# 跳转到模块目录godirActivityManagerService# 通用搜索grep-rn“关键词” frameworks/
5.4 重要配置文件位置
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Framework 开发核心目录速查
最常修改的 5 个目录:
1. frameworks/base/core/java/android/
核心 API,如 Activity, View, Handler
2. frameworks/base/services/core/…/server/
系统服务实现,如 AMS, WMS, PMS
3. frameworks/base/packages/SystemUI/
状态栏、通知栏、锁屏
4. packages/apps/Settings/
系统设置应用
5. frameworks/native/services/surfaceflinger/
显示合成(Native 层)
📝 记住这个公式:
| 想改 API? |
frameworks/base/core/java/ |
| 想改服务? |
frameworks/base/services/ |
| 想改应用? |
packages/apps/ |
| 想改显示? |
frameworks/native/services/surfaceflinger/ |
| 想改 HAL? |
hardware/interfaces/ |
本文小结
| frameworks/
|
| packages/
|
| system/
|
| hardware/
|
| build/
|
— END —
如果觉得有帮助,欢迎点赞、在看、转发~
夜雨聆风
