Android Framework 11.0 源码解析
概述
Android 系统架构自下而上分为 Linux 内核层、硬件抽象层 (HAL)、系统运行库层 (Native)、应用框架层 (Java API Framework) 和应用层 (System Apps)。其中,Framework 层作为连接上层应用与底层系统的桥梁,提供了丰富的 API 供开发者使用。深入理解 Framework 源码对于解决复杂系统问题、优化性能以及进行深度定制至关重要。
本文基于 Android 11.0 版本,对系统启动流程、日志系统机制、Binder 通信原理及编译构建体系进行详细解析。
第一章:系统启动流程
Android 系统的启动是一个复杂的进程链式调用过程,主要涉及 Init、Zygote、SystemServer 等关键进程。
1.1 Init 进程
Init 是用户空间的第一个进程,PID 为 1。它负责初始化设备环境、启动其他守护进程(如 Zygote)、处理热插拔事件以及执行 init.rc 脚本配置。在 Android 11.0 中,Init 进一步增强了安全性,支持更严格的 SELinux 策略和分区隔离。
1.2 Zygote 进程
Zygote 是 Android 的孵化器进程。当 Init 启动 Zygote 后,Zygote 会预加载常用的 Java 类库和资源,并监听 Socket 请求。当需要创建新应用进程时,Zygote 通过 fork() 复制自身,然后执行 pre-zygote-fork 和 post-zygote-fork 钩子函数,最后执行 main() 方法中的 ActivityThread 入口。
Zygote 启动关键点:
- 读取 zygote 配置文件。
- 注册 Socket 监听端口。
- 预加载核心类库以加速后续应用启动。
1.3 SystemServer 进程
SystemServer 由 Zygote fork 而来,负责启动 Android 的核心系统服务。其生命周期贯穿整个系统运行期。
启动流程:
- 创建 ServiceManager。
- 启动各种系统服务,包括 ActivityManagerService (AMS)、PackageManagerService (PMS)、WindowManagerService (WMS) 等。
- 启动 SurfaceFlinger 和 InputReader 等图形输入服务。
- 最终启动 Launcher (桌面)。
1.4 AMS 与 Launcher 启动
ActivityManagerService (AMS) 管理所有应用程序的生命周期。在 SystemServer 中,AMS 被实例化并注册到 ServiceManager。随后,Launcher 作为默认桌面应用被启动,它通过 Binder 与 AMS 交互,展示应用列表并响应用户点击。
1.5 应用进程创建
当用户点击应用图标时,AMS 通知 Zygote 创建新的应用进程。新进程继承 Zygote 的环境,但会卸载不必要的资源,并根据 Manifest 声明加载特定的代码和资源。
第二章:日志系统分析
Android 的日志系统主要用于调试和监控,核心组件包括 logd 守护进程和 logcat 工具。
2.1 Logd 守护进程
Logd 运行在内核态和用户态之间,负责接收来自内核和应用的日志消息。它维护多个环形缓冲区 (Ring Buffer),分别对应不同的优先级 (VERBOSE, DEBUG, INFO, WARN, ERROR, FATAL)。
2.2 Logcat 指令
Logcat 是用户查看日志的主要工具,常用命令包括:
adb logcat: 显示所有日志。adb logcat -s TAG: 过滤特定标签。adb logcat *:E: 仅显示错误及以上级别。adb logcat -b all: 查看所有缓冲区。
2.3 日志分类与属性
Android 日志分为常规日志、安全日志和主日志。可以通过 setprop 设置持久化的日志属性,例如 来开启特定模块的调试信息。


