1、Framework概述:Android系统架构、Framework层的作用、AOSP源码概览
各位同学,咱们今天正式开课。
说实话,每次讲Framework,我都会想起自己刚入行那会儿。那时候我对着AOSP源码,就像看天书一样。但后来我发现,只要把整个系统架构理清楚,Framework其实没那么神秘。
嗯,咱们今天就先把地基打好。
1.1 Android系统架构:从底层到上层
Android系统,说白了就是一个软件栈。它分了好几层,每一层各司其职。我习惯从下往上讲,这样大家更容易理解。
| 层级 | 名称 | 核心内容 |
|---|---|---|
| 第1层 | Linux内核层 | 硬件驱动、进程管理、内存管理 |
| 第2层 | 硬件抽象层(HAL) | 统一硬件接口,屏蔽厂商差异 |
| 第3层 | 系统运行库层 | C/C++库、ART虚拟机 |
| 第4层 | Framework层 | Java API框架、系统服务 |
| 第5层 | 应用层 | 系统应用、第三方应用 |
你想想看,一个App从点击图标到显示界面,数据是怎么流动的?
应用层调用Framework的API → Framework通过Binder跟系统服务通信 → 系统服务调用HAL → HAL操作内核驱动 → 最终控制硬件。
这个链路,就是Android的命脉。
核心要点:Framework层是承上启下的关键。它把底层复杂的C/C++实现,封装成了Java开发者熟悉的API。
1.2 Framework层到底干了什么?
很多初学者会问:Framework层到底有什么用?
我举个例子。你写一个App,想弹个Toast。你只需要写一行 Toast.makeText()。但你知道背后发生了什么吗?
- 你的App通过Binder通知SystemServer进程
- SystemServer里的NotificationManagerService处理请求
- 它再通过WindowManagerService在屏幕上绘制Toast
- 整个过程涉及进程间通信、窗口管理、视图绘制
这些脏活累活,都是Framework帮你干了。说白了,Framework就是Android系统的「大管家」。
我个人总结,Framework层有三大核心职责:
- 提供Java API:让应用开发者不用关心底层实现
- 管理系统服务:ActivityManagerService、WindowManagerService、PackageManagerService等
- 协调资源分配:内存、CPU、显示、输入事件等
我的经验:调试Framework问题时,80%的Bug都出在系统服务的状态管理上。我曾经花了一周时间,就为了查一个AMS中Activity栈状态不一致的问题。所以,理解系统服务的生命周期,是Framework调试的基本功。
1.3 AOSP源码概览:从哪里下手?
AOSP(Android Open Source Project)源码,体量巨大。我第一次下载完整源码时,光同步就花了大半天。
但别怕,咱们不需要全部看完。我建议你重点关注这几个目录:
| 目录 | 内容 | 重要性 |
|---|---|---|
| frameworks/base | 核心Framework代码(AMS、WMS、View体系等) | ⭐⭐⭐⭐⭐ |
| frameworks/native | Native层服务(SurfaceFlinger、InputFlinger等) | ⭐⭐⭐⭐ |
| system/core | 系统核心库(libutils、logd、adb等) | ⭐⭐⭐ |
| packages/apps | 系统应用(Settings、Launcher等) | ⭐⭐⭐ |
| hardware/libhardware | HAL层接口定义 | ⭐⭐ |
我个人习惯,先从 frameworks/base 入手。为什么呢?因为这里包含了Framework最核心的Java代码。
举个例子,你想了解Activity是怎么启动的?
// frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
// 这是AMS的核心实现
public final int startActivity(IApplicationThread caller, ...) {
// 这里处理Activity启动逻辑
// 涉及Intent解析、进程创建、生命周期调度等
}
你看,一行代码背后,是几十个类的协作。但只要你顺着调用链往下追,总能找到答案。
避坑指南:我曾经犯过一个错误——直接去看最新版的AOSP源码。结果发现很多API已经变了,跟网上教程对不上。建议你根据自己设备的Android版本,下载对应tag的源码。比如Android 13就看 android-13.0.0_r41。
1.4 搭建源码环境前的心理准备
嗯,这里我想多说两句。
Framework调试,说白了就是「源码+日志+断点」三板斧。但很多人第一步就卡住了——源码环境没搭好。
我建议你:
- 准备一台性能还行的电脑(内存至少16GB,推荐32GB)
- 磁盘空间预留200GB以上
- 网络环境要稳定(不然同步源码会崩溃)
- 装好Ubuntu 20.04或22.04 LTS
为什么推荐Linux?因为AOSP官方就是在Ubuntu上开发的。你用macOS也行,但Windows就别想了——光是大小写敏感的文件系统就能让你崩溃。
一句话总结:Framework是Android系统的灵魂。搞懂了它,你就能从「会用API」升级到「理解系统」。下一章,咱们就动手搭建源码环境。
好了,今天就到这儿。有问题随时问我。