一、什么是 Android ROM 开发?

Android ROM 开发,简单来说就是基于 Android 系统源码,对系统进行定制、适配、优化和发布。

我们平时看到的手机系统,比如 MIUI、ColorOS、OriginOS、One UI,本质上都可以理解为厂商基于 Android 做出来的定制 ROM。

ROM 开发不只是改桌面、改图标、改设置页面,它还包括系统框架、硬件适配、内核驱动、权限安全、OTA 升级、系统稳定性等很多内容。

可以简单理解为:

Android ROM = 系统界面 + 系统框架 + 硬件适配 + 内核驱动 + 构建发布

二、ROM 开发可以分成哪些模块?

Android ROM 开发没有绝对固定的模块划分,但从实际开发角度来看,通常可以分成以下几大类。

模块

代表内容

主要作用

Launcher

桌面、图标、应用列表

用户进入 App 的入口

SystemUI

状态栏、通知栏、锁屏、导航栏

系统级 UI 外壳

Settings

系统设置 App

用户修改系统配置的入口

Framework

系统 API、系统服务

控制 Android 系统核心行为

SystemServer

AMS、PMS、WMS 等服务

管理应用、窗口、包、电源等

Native Framework

SurfaceFlinger、AudioFlinger、Binder

图形、音频、输入、进程通信

HAL

Camera HAL、Audio HAL、Display HAL

连接 Android 框架和硬件驱动

Kernel

驱动、调度、内存、电源

操作系统底层核心

Device 配置

init、overlay、sepolicy、分区配置

适配具体设备

Build 系统

Soong、Make、产品配置

编译生成系统镜像

OTA

全量包、增量包、A/B 升级

系统升级

SELinux

sepolicy、安全权限

控制系统进程权限

预装应用

电话、短信、相机、文件管理器

厂商系统应用

测试认证

CTS、VTS、稳定性测试

保证系统兼容和稳定


三、Launcher、SystemUI、Settings 的区别

很多人刚接触 ROM 开发时,最容易听到的就是 Launcher、SystemUI 和 Settings。

这三个模块都属于用户可以直接看到的部分,但职责并不一样。

模块

中文理解

主要负责

Launcher

桌面

图标、桌面布局、应用列表、小组件、最近任务入口

SystemUI

系统界面外壳

状态栏、通知栏、快捷设置、锁屏、导航栏、电源菜单

Settings

设置中心

Wi-Fi、蓝牙、显示、电池、应用管理、系统信息等设置入口

可以这样理解:

Launcher = 桌面
SystemUI = 系统外壳
Settings = 系统控制面板

例如:

用户点击桌面图标打开 App,这属于 Launcher 的工作。

用户下拉通知栏、查看状态栏图标、进入锁屏界面,这属于 SystemUI 的工作。

用户进入设置页面,修改 Wi-Fi、蓝牙、亮度、电池策略,这属于 Settings 的工作。


四、Framework 是 ROM 的核心

如果说 Launcher、SystemUI、Settings 是 ROM 的“脸”,那么 Framework 就是 ROM 的“大脑”。

Framework 位于 Android 系统中间层,向上给应用提供 API,向下调用 Native 层、HAL 和 Kernel。

常见的 Framework 模块包括:

服务

全称

作用

AMS

ActivityManagerService

管理 Activity、Service、进程生命周期

PMS

PackageManagerService

管理 App 安装、卸载、权限、包信息

WMS

WindowManagerService

管理窗口、屏幕显示、窗口层级

PowerManagerService

电源管理服务

管理休眠、唤醒、省电策略

NotificationManagerService

通知管理服务

管理通知显示、通知权限

InputManagerService

输入管理服务

管理触摸、按键、输入设备

DisplayManagerService

显示管理服务

管理屏幕、亮度、显示设备

Framework 改动通常会影响整个系统行为,所以它比单纯修改 Launcher 或 Settings 更复杂,也更危险。

例如:

想改 App 后台管理,需要看 AMS。

想改应用安装权限,需要看 PMS。

想改窗口显示规则,需要看 WMS。

想改省电策略,需要看 PowerManagerService。


五、Native 层负责系统底层能力

Framework 下面还有 Native 层,也就是 C/C++ 实现的一些系统核心能力。

常见 Native 模块包括:

模块

作用

SurfaceFlinger

图形合成,负责把多个窗口合成到屏幕上

AudioFlinger

音频系统核心,负责音频播放和录制

MediaCodec

视频编解码

InputFlinger

输入事件处理

Binder

Android 进程间通信机制

vold

存储管理

netd

网络管理

logd

日志系统

init

Android 第一个用户空间进程,负责启动系统服务

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 相关内容包括:

方向

内容

显示驱动

屏幕、背光、刷新率

触摸驱动

触摸屏、多点触控

摄像头驱动

Camera Sensor、ISP

音频驱动

喇叭、麦克风、耳机

电源驱动

电池、充电、功耗管理

Wi-Fi / 蓝牙驱动

无线连接

内存管理

内存分配、回收、OOM

调度器

CPU 调度、性能策略

文件系统

存储读写

Kernel 改动风险很高,因为它直接影响系统稳定性、功耗、发热和硬件功能。


八、Device 配置负责适配具体机型

同一套 Android 系统,要运行在不同手机、平板、车机、电视上,就需要不同的 device 配置。

Device 配置通常包括:

内容

作用

BoardConfig.mk

板级配置

device.mk

设备产品配置

init.rc

启动脚本

fstab

分区挂载配置

overlay

资源覆盖

sepolicy

SELinux 权限策略

manifest.xml

HAL 声明

permissions XML

系统权限声明

prop 配置

系统属性配置

例如:

某个设备有没有 NFC,需要配置。

屏幕默认亮度是多少,需要配置。

默认导航栏是三键还是手势,也可能通过配置控制。

某个 HAL 服务是否存在,也需要在 device 配置中声明。


九、SELinux 是系统安全边界

Android 使用 SELinux 来限制系统进程权限。

在 ROM 开发中,经常会遇到类似问题:

avc: denied

这通常表示某个进程访问了它没有权限访问的资源。

SELinux 的作用不是简单“拦住你”,而是为了防止系统服务或应用越权访问。

例如:

相机服务不能随便访问短信数据。

普通 App 不能随便访问系统分区。

某个 HAL 进程只能访问自己需要的设备节点。

所以 ROM 开发中,不能看到 avc denied 就直接无脑放权限,而是要判断这个访问是否合理。


十、Build 系统负责把源码编译成 ROM

Android ROM 最后需要编译成各种镜像文件,比如:

镜像

作用

system.img

Android 系统主体

vendor.img

厂商硬件相关内容

product.img

产品定制内容

system_ext.img

系统扩展内容

boot.img

kernel 和 ramdisk

recovery.img

recovery 系统

userdata.img

用户数据分区

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 一般分为:

类型

说明

全量包

包含完整系统镜像

增量包

只包含两个版本之间的差异

A/B 升级

双分区无缝升级

Recovery 升级

通过 recovery 刷入升级包

商业 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、驱动。

比较合理的学习路线是:

阶段

学习内容

目标

第一阶段

Launcher、Settings、SystemUI

能修改系统界面

第二阶段

Framework、SystemServer

理解系统核心行为

第三阶段

init、prop、overlay、sepolicy

能做基础系统适配

第四阶段

Native、Binder、SurfaceFlinger

理解系统底层机制

第五阶段

HAL、Vendor、Kernel

理解硬件适配

第六阶段

OTA、签名、CTS、稳定性测试

理解商业 ROM 发布流程

入门时可以先从这些事情做起:

1. 修改默认桌面布局
2. 修改状态栏图标
3. 修改设置页面入口
4. 添加一个系统属性
5. 预装一个系统 App
6. 修改默认壁纸
7. 修改开机动画
8. 解决简单的 sepolicy 问题
9. 编译 system.img
10. 制作 OTA 包

十四、商业 ROM 团队一般怎么分工?

在公司里,ROM 开发通常不会让一个人负责所有模块,而是按方向分工。

团队

负责内容

系统应用组

Launcher、Settings、电话、短信、文件管理器

SystemUI 组

状态栏、锁屏、通知栏、控制中心、导航栏

Framework 组

AMS、PMS、WMS、电源、权限、通知

BSP 组

Kernel、HAL、Vendor、驱动

多媒体组

Camera、Audio、Video、Display

连接组

Wi-Fi、Bluetooth、NFC、GPS、移动网络

性能功耗组

流畅度、内存、启动速度、续航、发热

安全组

SELinux、权限、签名、隐私合规

OTA 发布组

编译、打包、签名、升级、灰度发布

测试组

CTS、VTS、Monkey、稳定性、兼容性测试

所以 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,会比一上来直接啃源码轻松很多。