乐于分享
好东西不私藏

Android 12 源码目录结构详解

Android 12 源码目录结构详解

Framework 开发必备参考手册

掌握 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 层

目录路径
说明
frameworks/base/core/java/android/
├── app/
Activity, Service, Fragment 等
├── content/
Intent, Context, ContentProvider
├── view/
View, ViewGroup, MotionEvent
├── widget/
Button, TextView, ListView 等
└── os/
Handler, Looper, Binder
frameworks/base/services/core/java/…/server/
├── am/
ActivityManagerService
├── wm/
WindowManagerService
├── pm/
PackageManagerService
├── power/
PowerManagerService
└── notification/
NotificationManagerService

3.2 Native Framework 层

目录路径
说明
frameworks/native/services/surfaceflinger/
显示合成服务
frameworks/native/services/inputflinger/
输入处理服务
frameworks/native/libs/binder/
Binder IPC 实现
frameworks/native/libs/gui/
Surface, BufferQueue
frameworks/base/core/jni/
JNI 接口

3.3 系统应用

目录路径
说明
packages/apps/Settings/
系统设置
frameworks/base/packages/SystemUI/
状态栏、通知、锁屏
packages/apps/Launcher3/
桌面启动器
packages/apps/Contacts/
联系人应用

四、目录关系图解

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 通信相关目录

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 常见开发场景对应目录

开发任务
目录位置
修改 Activity 启动流程
frameworks/base/services/…/am/
修改窗口管理逻辑
frameworks/base/services/…/wm/
修改 View 绘制
frameworks/base/core/java/android/view/
修改状态栏/通知栏
frameworks/base/packages/SystemUI/
修改设置应用
packages/apps/Settings/
修改桌面启动器
packages/apps/Launcher3/
修改 SurfaceFlinger
frameworks/native/services/surfaceflinger/
修改输入系统
frameworks/native/services/inputflinger/
修改 Binder
frameworks/native/libs/binder/
修改电源管理
frameworks/base/services/…/power/
添加系统 API
frameworks/base/core/java/android/
修改 SELinux 策略
system/sepolicy/
添加 HAL 接口
hardware/interfaces/
修改 init 进程
system/core/init/
修改 ADB
system/core/adb/

5.2 按功能模块查找

电话功能

frameworks/base/telephony/ 电话框架

packages/apps/Phone/ 电话应用

WiFi 功能

frameworks/base/wifi/ WiFi 框架

packages/modules/Wifi/ WiFi 模块

蓝牙功能

packages/modules/Bluetooth/ 蓝牙模块

system/bt/ 蓝牙协议栈

音频功能

frameworks/av/media/ 媒体框架

hardware/interfaces/audio/ 音频 HAL

相机功能

frameworks/av/camera/ 相机框架

hardware/interfaces/camera/ 相机 HAL

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 重要配置文件位置

文件路径
说明
build/envsetup.sh
编译环境初始化
build/make/core/main.mk
主编译入口
device/<vendor>/<device>/BoardConfig.mk
板级配置
frameworks/base/api/current.txt
当前 API 定义
system/sepolicy/
SELinux 策略

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/

底层组件,init/adb/sepolicy
hardware/

硬件抽象层 HAL 接口
build/

Soong/Make 编译系统

— END —

如果觉得有帮助,欢迎点赞、在看、转发~

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Android 12 源码目录结构详解

评论 抢沙发

4 + 4 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮