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/:核心服务实现(如 ActivityManagerServiceWindowManagerService
    • graphics/:图形系统(绘制、渲染、SurfaceFlinger 显示服务)
    • location/:定位服务(GPS、网络定位相关逻辑)
    • media/:多媒体框架(音频/视频编解码、播放控制)
    • packages/:框架依赖的资源包(系统主题、默认图标等)
    • services/:系统服务核心(如 PowerManagerServiceNotificationManagerService
    • view/:UI 组件底层(ViewActivityFragment 的实现)
  • 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.haudio.hsensor.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.imgboot.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 源码按“分层”和“功能”组织,整体层级关系如下:

  1. 底层支撑kernel/(Linux 内核)→ bionic/(C/C++ 库)→ hardware/(HAL)
  2. 核心框架frameworks/(Java 框架 + 原生框架)→ 提供应用开发 API
  3. 上层应用与服务packages/(系统应用、内容提供者)
  4. 工具与构建build/(构建系统)、prebuilts/(预编译工具)、tools/(调试工具)

定位功能的示例

  • 研究 Activity 启动流程 → 查看 frameworks/base/core/java/android/app/Activity.javaActivityManagerService.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(设备启动配置)
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐