Android ROM 开发模块划分
一、什么是 Android ROM 开发?
Android ROM 开发,简单来说就是基于 Android 系统源码,对系统进行定制、适配、优化和发布。
我们平时看到的手机系统,比如 MIUI、ColorOS、OriginOS、One UI,本质上都可以理解为厂商基于 Android 做出来的定制 ROM。
ROM 开发不只是改桌面、改图标、改设置页面,它还包括系统框架、硬件适配、内核驱动、权限安全、OTA 升级、系统稳定性等很多内容。
可以简单理解为:
Android ROM = 系统界面 + 系统框架 + 硬件适配 + 内核驱动 + 构建发布
二、ROM 开发可以分成哪些模块?
Android ROM 开发没有绝对固定的模块划分,但从实际开发角度来看,通常可以分成以下几大类。
三、Launcher、SystemUI、Settings 的区别
很多人刚接触 ROM 开发时,最容易听到的就是 Launcher、SystemUI 和 Settings。
这三个模块都属于用户可以直接看到的部分,但职责并不一样。
可以这样理解:
Launcher = 桌面
SystemUI = 系统外壳
Settings = 系统控制面板
例如:
用户点击桌面图标打开 App,这属于 Launcher 的工作。
用户下拉通知栏、查看状态栏图标、进入锁屏界面,这属于 SystemUI 的工作。
用户进入设置页面,修改 Wi-Fi、蓝牙、亮度、电池策略,这属于 Settings 的工作。
四、Framework 是 ROM 的核心
如果说 Launcher、SystemUI、Settings 是 ROM 的“脸”,那么 Framework 就是 ROM 的“大脑”。
Framework 位于 Android 系统中间层,向上给应用提供 API,向下调用 Native 层、HAL 和 Kernel。
常见的 Framework 模块包括:
Framework 改动通常会影响整个系统行为,所以它比单纯修改 Launcher 或 Settings 更复杂,也更危险。
例如:
想改 App 后台管理,需要看 AMS。
想改应用安装权限,需要看 PMS。
想改窗口显示规则,需要看 WMS。
想改省电策略,需要看 PowerManagerService。
五、Native 层负责系统底层能力
Framework 下面还有 Native 层,也就是 C/C++ 实现的一些系统核心能力。
常见 Native 模块包括:
Native 层离硬件更近,问题通常也更难排查。
例如:
屏幕显示异常,可能涉及 SurfaceFlinger、Display HAL、Kernel 驱动。
声音播放异常,可能涉及 AudioFlinger、Audio HAL、音频驱动。
触摸无响应,可能涉及 InputFlinger、Input HAL、触摸屏驱动。
六、HAL 是 Framework 和硬件之间的翻译层
HAL 是 Hardware Abstraction Layer,也就是硬件抽象层。
它的作用是把不同厂商的硬件能力,包装成 Android 系统可以识别的标准接口。
例如:
Android Framework 不需要知道具体摄像头芯片怎么工作,它只需要调用 Camera HAL。
Android Framework 不需要直接操作音频芯片,它只需要调用 Audio HAL。
Android Framework 不需要关心 GPS 模块厂商,它只需要调用 GNSS HAL。
可以这样理解:
Framework 不直接操作硬件
Framework 调用 HAL
HAL 调用驱动
驱动操作硬件
大致流程如下:
App
↓
Framework API
↓
System Service
↓
HAL
↓
Kernel Driver
↓
Hardware
HAL 的存在,可以让 Android 系统和硬件厂商解耦。
七、Kernel 是系统底盘
Kernel 是 Android 系统最底层的核心部分,负责管理硬件资源。
常见 Kernel 相关内容包括:
Kernel 改动风险很高,因为它直接影响系统稳定性、功耗、发热和硬件功能。
八、Device 配置负责适配具体机型
同一套 Android 系统,要运行在不同手机、平板、车机、电视上,就需要不同的 device 配置。
Device 配置通常包括:
例如:
某个设备有没有 NFC,需要配置。
屏幕默认亮度是多少,需要配置。
默认导航栏是三键还是手势,也可能通过配置控制。
某个 HAL 服务是否存在,也需要在 device 配置中声明。
九、SELinux 是系统安全边界
Android 使用 SELinux 来限制系统进程权限。
在 ROM 开发中,经常会遇到类似问题:
avc: denied
这通常表示某个进程访问了它没有权限访问的资源。
SELinux 的作用不是简单“拦住你”,而是为了防止系统服务或应用越权访问。
例如:
相机服务不能随便访问短信数据。
普通 App 不能随便访问系统分区。
某个 HAL 进程只能访问自己需要的设备节点。
所以 ROM 开发中,不能看到 avc denied 就直接无脑放权限,而是要判断这个访问是否合理。
十、Build 系统负责把源码编译成 ROM
Android ROM 最后需要编译成各种镜像文件,比如:
Android 的构建系统会根据产品配置,把源码、资源、库、配置文件、系统应用等内容打包成最终 ROM。
常见构建相关内容包括:
lunch
make
Soong
Android.bp
Android.mk
device.mk
BoardConfig.mk
PRODUCT_PACKAGES
PRODUCT_PROPERTY_OVERRIDES
例如:
想预装一个系统 App,需要加入 PRODUCT_PACKAGES。
想修改系统属性,需要配置 prop。
想定制资源,可以使用 overlay。
十一、OTA 负责系统升级
ROM 发布之后,还需要支持系统升级。
OTA 一般分为:
商业 ROM 通常非常重视 OTA,因为用户不可能每次都手动刷机。
OTA 涉及版本管理、签名校验、分区升级、失败回滚等机制。
十二、ROM 开发的整体架构图
可以把 Android ROM 理解成下面这套结构:
用户可见层
├── Launcher
├── SystemUI
├── Settings
├── 电话、短信、相机、文件管理器等系统 App
Framework 层
├── ActivityManagerService
├── PackageManagerService
├── WindowManagerService
├── PowerManagerService
├── NotificationManagerService
├── InputManagerService
├── DisplayManagerService
Native 层
├── Binder
├── SurfaceFlinger
├── AudioFlinger
├── MediaCodec
├── InputFlinger
├── init / vold / netd / logd
HAL 层
├── Camera HAL
├── Audio HAL
├── Display HAL
├── Bluetooth HAL
├── Wi-Fi HAL
├── GNSS HAL
Kernel 层
├── 显示驱动
├── 触摸驱动
├── 摄像头驱动
├── 音频驱动
├── 电源驱动
├── 网络驱动
├── 内存管理
├── CPU 调度
硬件层
├── 屏幕
├── 摄像头
├── 电池
├── Wi-Fi / 蓝牙芯片
├── GPS
├── 传感器
十三、ROM 开发的学习顺序
如果是刚开始学习 Android ROM,不建议一开始就直接研究 Kernel、HAL、驱动。
比较合理的学习路线是:
入门时可以先从这些事情做起:
1. 修改默认桌面布局
2. 修改状态栏图标
3. 修改设置页面入口
4. 添加一个系统属性
5. 预装一个系统 App
6. 修改默认壁纸
7. 修改开机动画
8. 解决简单的 sepolicy 问题
9. 编译 system.img
10. 制作 OTA 包
十四、商业 ROM 团队一般怎么分工?
在公司里,ROM 开发通常不会让一个人负责所有模块,而是按方向分工。
所以 ROM 开发不是单一岗位,而是一个系统工程。
十五、总结
Android ROM 开发可以简单分成八大方向:
1. 系统应用层:Launcher、Settings、SystemUI、电话、短信、相机
2. Framework 层:系统 API、系统服务、权限、窗口、电源
3. Native 层:Binder、SurfaceFlinger、AudioFlinger、InputFlinger
4. HAL 层:Camera、Audio、Display、Wi-Fi、Bluetooth 等硬件抽象
5. Kernel 层:驱动、调度、内存、电源、文件系统
6. Device 配置层:init、overlay、sepolicy、分区、属性
7. 构建发布层:Soong、Make、签名、OTA
8. 测试认证层:CTS、VTS、稳定性、性能、功耗
一句话总结:
Launcher、SystemUI、Settings 是 ROM 的脸;
Framework 是 ROM 的大脑;
Native 是 ROM 的系统能力;
HAL 是 ROM 和硬件之间的翻译官;
Kernel 是 ROM 的底盘;
Build 和 OTA 是 ROM 的生产线;
测试认证是 ROM 能否商用的保障。
对于初学者来说,最适合的路线是:
先改看得见的 UI,
再理解 Framework,
然后学习系统配置和 SELinux,
最后再深入 HAL、Kernel 和 OTA。
这样学习 Android ROM,会比一上来直接啃源码轻松很多。
Android ROM 开发模块划分
https://lautung.com/archives/Nn9x9jB4