Android 系统采用分层的软件架构设计,各层之间通过明确定义的接口进行通信。下面我将从底层到上层全面解析 Android 的系统架构。
一、整体架构分层
Android 系统主要分为五个层次,从上到下依次为:
应用层 (Applications)
↓
应用框架层 (Application Framework)
↓
系统运行库层 (Libraries + Android Runtime)
↓
硬件抽象层 (HAL)
↓
Linux 内核层 (Linux Kernel)
二、各层详细解析
1. Linux 内核层 (Linux Kernel)
核心功能:
-
硬件驱动(显示驱动、相机驱动、蓝牙驱动等)
-
进程管理
-
内存管理
-
安全机制
-
网络协议栈
关键特性:
-
基于 Linux 内核(长期支持版本)
-
添加了 Android 特有驱动(如 Binder IPC)
-
电源管理优化(Wake locks)
-
低内存 killer (LMK) 机制
2. 硬件抽象层 (HAL)
设计目的:
-
标准化硬件接口
-
解耦内核与框架层
-
方便厂商实现硬件驱动
主要模块:
HAL 模块 | 功能描述 |
---|---|
Camera HAL | 提供相机硬件抽象接口 |
Audio HAL | 音频输入输出抽象 |
Sensor HAL | 各类传感器统一接口 |
GPS HAL | 定位服务硬件抽象 |
Display HAL | 显示输出控制 |
实现方式:
-
动态链接库 (.so 文件)
-
通过
hw_get_module()
加载
3. 系统运行库层
(1) 原生 C/C++ 库
库名称 | 功能描述 |
---|---|
Surface Manager | 合成窗口管理器 |
Media Framework | 多媒体编解码支持 |
SQLite | 轻量级数据库引擎 |
OpenGL ES | 3D 图形渲染 |
WebKit | 浏览器引擎(现用Chromium) |
SSL | 安全套接字层 |
(2) Android Runtime (ART)
核心改进:
-
Ahead-of-Time (AOT) 编译
-
改进的垃圾回收机制
-
更好的调试支持
与 Dalvik 对比:
特性 | Dalvik | ART |
---|---|---|
编译方式 | JIT (即时编译) | AOT (预编译) |
安装时间 | 快 | 慢(首次安装) |
运行速度 | 较慢 | 更快 |
存储空间 | 占用少 | 占用多 |
4. 应用框架层 (Application Framework)
核心服务:
(1) 系统服务
服务 | 功能描述 |
---|---|
Activity Manager | 管理应用生命周期 |
Window Manager | 窗口管理和布局 |
Package Manager | 应用安装和权限管理 |
Resource Manager | 资源访问管理 |
Notification Manager | 通知系统 |
(2) 通信机制
-
Binder IPC:高性能进程间通信
-
Handler:线程间消息传递
-
Content Providers:跨应用数据共享
(3) 组件系统
组件 | 功能描述 |
---|---|
Activity | 用户界面载体 |
Service | 后台服务 |
Broadcast Receiver | 系统事件响应 |
Content Provider | 数据共享机制 |
5. 应用层 (Applications)
核心应用类型:
-
系统预装应用(设置、通讯录等)
-
第三方应用
-
桌面小部件(App Widgets)
-
输入法应用
三、关键系统进程
1. Zygote 进程
-
所有应用进程的父进程
-
预加载核心类和资源
-
采用 Copy-on-Write (COW) 机制
2. System Server 进程
-
承载大部分系统服务
-
包括:
-
ActivityManagerService
-
PackageManagerService
-
WindowManagerService
-
3. 应用进程
-
每个应用默认运行在独立进程
-
进程名通常为包名
-
可通过 AndroidManifest.xml 配置
四、启动流程解析
1. 启动时序
Boot ROM → Bootloader → Linux Kernel → Init → Zygote → System Server → Launcher
2. 关键阶段
Zygote 启动:
// ZygoteInit.java
public static void main(String argv[]) {
// 1. 注册Zygote socket
registerZygoteSocket();
// 2. 预加载类和资源
preload();
// 3. 启动SystemServer
startSystemServer();
// 4. 进入循环等待fork请求
runSelectLoop();
}
System Server 启动:
// SystemServer.java
private void run() {
// 1. 启动引导服务
startBootstrapServices(); // AMS, PMS等
// 2. 启动核心服务
startCoreServices(); // Battery, Usage等
// 3. 启动其他服务
startOtherServices(); // Window, Input等
// 4. 进入主循环
Looper.loop();
}
五、通信机制架构
1. Binder IPC 架构
Client Process → Binder Driver → Server Process
↑ ↑ ↑
Binder Proxy Binder驱动 Binder Stub
2. 主要通信方式对比
方式 | 适用场景 | 性能 | 安全性 |
---|---|---|---|
Binder | 跨进程方法调用 | 高 | 高 |
Socket | 大数据量传输 | 中 | 中 |
Shared Memory | 高性能数据共享 | 最高 | 低 |
Intent | 简单跨组件通信 | 低 | 高 |
六、安全架构
1. 安全机制分层
应用沙盒 → 应用签名 → 权限系统 → SELinux → Linux权限
2. 关键安全特性
-
应用沙盒:每个应用有独立UID和文件空间
-
权限系统:
-
普通权限
-
危险权限(运行时申请)
-
特殊权限(如SYSTEM_ALERT_WINDOW)
-
-
SELinux:强制访问控制
-
Verified Boot:启动链验证
七、性能优化架构
1. 渲染优化
-
HWUI:硬件加速渲染管道
-
RenderThread:独立渲染线程
-
VSYNC:统一刷新信号
2. 内存管理
-
Low Memory Killer:按优先级回收进程
-
Jemalloc:高效内存分配器
-
ASHMEM:匿名共享内存
3. 电源管理
-
JobScheduler:任务批量处理
-
Doze模式:深度睡眠状态
-
App Standby:不常用应用限制
八、架构演进趋势
-
模块化:Project Treble 引入 Vendor 接口
-
性能优化:ART持续改进,引入Cloud编译
-
安全增强:强化SELinux策略,引入Scudo分配器
-
新形态支持:Foldables, Automotive等
理解Android系统架构有助于:
-
更高效地开发应用
-
更好地进行性能优化
-
更深入地排查系统问题
-
更准确地把握技术演进方向