Android 系统架构采用分层设计,从上到下大致分为五层。
一、总体架构图
┌─────────────────────────────────────────────────────────────┐ │ 第 5 层:应用层 (Applications) │ │ System UI、Launcher、Settings、微信、抖音... │ │ (Java/Kotlin 代码,SDK API) │ ├─────────────────────────────────────────────────────────────┤ │ 第 4 层:应用框架层 (Application Framework) │ │ ActivityManagerService、WindowManagerService、 │ │ PackageManagerService、ContentProvider、ResourceManager... │ │ (Java 代码,system_server 进程) │ ├─────────────────────────────────────────────────────────────┤ │ 第 3 层:系统运行库层 (Native Libraries & Android Runtime) │ │ SurfaceFlinger、OpenGL ES、SQLite、WebView、Media Codec、 │ │ ART 虚拟机、libc、Binder IPC 库... │ │ (C/C++ 代码,.so 共享库) │ ├─────────────────────────────────────────────────────────────┤ │ 第 2 层:硬件抽象层 (HAL - Hardware Abstraction Layer) │ │ Camera HAL、Audio HAL、Sensors HAL、GPS HAL、Wi-Fi HAL... │ │ (C/C++ 接口,由厂商实现) │ ├─────────────────────────────────────────────────────────────┤ │ 第 1 层:Linux 内核层 (Linux Kernel) │ │ 进程调度、内存管理、网络协议栈、电源管理、 │ │ Binder 驱动、显示驱动、输入子系统、Camera 驱动... │ │ (C 代码,内核态) │ └─────────────────────────────────────────────────────────────┘二、逐层详解
第 1 层:Linux 内核层
这是 Android 的地基,负责硬件资源管理和进程隔离。
| 模块 | 说明 |
|---|---|
| 进程管理 | 调度 CPU 时间片,管理进程生命周期(fork、kill、信号) |
| 内存管理 | 虚拟内存、OOM 机制、Ashmem(匿名共享内存) |
| Binder 驱动 | 你之前问的 Binder IPC 机制的核心。内核态的 Binder 驱动负责跨进程通信的数据拷贝和线程调度 |
| 显示驱动 | Framebuffer、DRM/KMS,最终把图像数据送到屏幕 |
| 输入子系统 | 管理触摸屏、按键的底层事件(/dev/input/event*) |
| 网络协议栈 | TCP/IP、Wi-Fi 驱动、蓝牙协议栈 |
关联知识:Zygote 进程通过 fork() 系统调用(内核提供)孵化应用进程;Binder 驱动是 Framework 层所有 IPC 的根基。
第 2 层:硬件抽象层(HAL)
Android 不想把硬件访问代码直接塞进内核(避免 GPL 传染、方便厂商闭源),所以在内核之上加了一层标准化接口。
应用 → Framework → HAL 接口定义(AIDL/HIDL)→ 厂商 HAL 实现 → 内核驱动 → 硬件| 类型 | 说明 |
|---|---|
| Legacy HAL | 早期以共享库(.so)形式存在,由 Framework 直接 dlopen |
| HIDL HAL | Android 8.0 引入,通过 Binder IPC 调用,支持独立更新 |
| AIDL HAL | Android 11 起逐步替代 HIDL,统一用 AIDL |
例子:Camera 拍照流程
Camera App → CameraManager (Framework) → CameraService (Native) → Camera HAL (厂商实现,如 Qualcomm CAMX) → Camera 驱动 → 硬件传感器第 3 层:系统运行库层
这一层是 Native 世界,包含两部分:
A. Android Runtime(ART)
| 特性 | 说明 |
|---|---|
| AOT 编译 | 安装时把字节码编译成机器码(.oat/.vdex),运行时直接执行 |
| GC | 并发标记清除(Concurrent Copying GC),减少卡顿 |
| JIT 回退 | Android 7+ 混合模式,热代码 JIT 编译,冷代码 AOT |
| Profile-S Guided | 根据用户使用习惯优化编译 |
Kotlin/Java 代码最终在这里被 ART 翻译成 CPU 指令。
B. Native Libraries
| 库 | 用途 |
|---|---|
| SurfaceFlinger | 你之前问过的,负责合成所有 Layer 的图像,送显 |
| OpenGL ES / Vulkan | 图形渲染,Skia、HWUI 都依赖它 |
| WebView / Chromium | 网页渲染引擎 |
| MediaCodec | 音视频硬解码,通过 OMX/Codec2 调用 HAL |
| SQLite | 本地数据库 |
Binder IPC 库(libbinder) | Framework 的Binder.java底层就是调这个 |
第 4 层:应用框架层(Application Framework)
SystemServer 所在的位置。
| 服务/组件 | 职责 | 对应进程 |
|---|---|---|
| ActivityManagerService (AMS) | 管理 Activity 生命周期、进程调度、任务栈 | system_server |
| WindowManagerService (WMS) | 管理窗口层级、Surface 分配、输入事件分发 | system_server |
| PackageManagerService (PMS) | APK 安装/卸载/权限管理、组件解析 | system_server |
| ContentProvider | 跨进程数据共享 | 各应用进程 / system_server |
| View System / ResourceManager | UI 测量布局绘制、资源加载 | 应用进程 |
| NotificationManager | 通知栏管理 | system_server |
| LocationManager | GPS/网络定位 | system_server |
关键机制:
- SystemServer 启动后,在这里注册各种 Service。
- 应用通过 Context.getSystemService() 获取 Binder Proxy,与 system_server 里的 Binder Stub 通信。
- Activity 启动流程,就是应用进程↔ AMS ↔ WMS 在这一层的协作。
第 5 层:应用层
最上层,直接面向用户。
| 类型 | 例子 |
|---|---|
| 系统应用 | Phone、Contacts、Settings、Launcher、SystemUI |
| 第三方应用 | 微信、抖音、你的 App |
每个应用运行在独立的沙箱进程中,拥有独立的 UID 和虚拟机实例。应用之间默认不能互相访问内存,必须通过 Framework 提供的 IPC 机制通信。
三、层与层之间如何通信
1. 应用层 ↔ Framework 层
// 你写的代码valam=getSystemService(Context.ACTIVITY_SERVICE)asActivityManager底层通过 Binder IPC 调用 system_server 里的 AMS。
2. Framework 层 ↔ Native 层
Framework 的 Java 代码通过 JNI(Java Native Interface) 调用 C/C++ 库。
// Surface.javaprivatenativelongnativeCreateFromSurfaceTexture(...);3. Native 层 ↔ HAL 层
通过 HIDL/AIDL 接口 或直接的函数调用(Legacy HAL)。
4. HAL 层 ↔ 内核层
标准的 Linux 系统调用、ioctl、读写设备节点(/dev/xxx)。
四、AOSP 源码目录对应
| 层级 | AOSP 路径 |
|---|---|
| 应用层 | packages/apps/ |
| Framework | frameworks/base/(AMS、WMS、PMS 在这里) |
| Native 库 | frameworks/native/(SurfaceFlinger、Input) |
| HAL | hardware/interfaces/(HIDL/AIDL 定义) |
| 内核 | kernel/或common/(Binder 驱动、各子系统) |
| ART | art/ |
| Bionic libc | bionic/ |
五、总结
内核层管硬件和进程,HAL 层隔离厂商实现,Native 层做图形/媒体/虚拟机,Framework 层管应用生命周期和系统服务,应用层写业务逻辑。
层与层之间靠 Binder IPC(跨进程)、JNI(跨语言)、HAL 接口(跨硬件)粘合。