这是一份详细的 Android 版本升级计划,适用于 Rock 5 (RK3588) 从 Android 12 本地编译镜像出发,逐代升级至 Android 16。专注车载音频方向,熟悉 Audio/AudioFlinger。
一、整体分阶段升级计划
| 阶段 |
版本 |
预计工作量 |
主要挑战 |
博客重心 |
| Phase 0 |
Android 12 基线 |
— |
建立基线,清理代码 |
搭建开发环境 |
| Phase 1 |
12 → 13 |
⭐⭐⭐⭐⭐ |
AIDL/HIDL 迁移、Audio HAL 重构 |
AIDL 化 + Audio 变革 |
| Phase 2 |
13 → 14 |
⭐⭐⭐ |
VNDK 43、隐私沙盒、Helium |
Framework 稳定化 |
| Phase 3 |
14 → 15 |
⭐⭐⭐ |
隐私增强、SELinux 收紧 |
安全与隐私 |
| Phase 4 |
15 → 16 |
⭐⭐⭐⭐ |
Project Kotlin、全面 Kotlin化 |
Kotlin + 现代架构 |
Phase 0: Android 12 基线准备(1~2 周)
目标:在升级前建立稳定的 Android 12 基线,清理历史 patch,确定 BSP 适配边界。
核心改动点:
- 梳理现有
device/rockchip/rk3588 下的所有本地 patch
- 记录内核版本(建议 kernel 5.10 或更新)
- 整理 Audio HAL 源码结构(HIDL 还是 AIDL?)
- 建立 CI 编译验证(每次升级前跑通)
验证方法:
source build/envsetup.sh
lunch rk3588-userdebug
m -j$(nproc)
adb reboot bootloader
fastboot flash boot boot.img
fastboot flash system system.img
fastboot reboot
Phase 1: Android 12 → 13(4~6 周)⭐ 重点
目标:完成 HIDL → AIDL 全面迁移,重构 Audio HAL,适配 Android 13 新特性和强制要求。
| 模块 |
工作量 |
备注 |
| AIDL/HIDL 迁移 |
⭐⭐⭐⭐ |
大量 HAL 接口重写 |
| Audio HAL |
⭐⭐⭐⭐ |
结合专长,重点深挖 |
| VNDK/SPT |
⭐⭐⭐ |
43→44 |
| SELinux |
⭐⭐ |
策略更新 |
| 内核 |
⭐⭐ |
可能需要升级 |
Phase 2: Android 13 → 14(3~4 周)
| 领域 |
Android 13 → 14 关键变化 |
| 隐私沙盒 |
Privacy Sandbox API,广告 ID 变更 |
| VNDK |
VNDK 版本从 44 升至 45 |
| Helium |
SELinux 限制传感器访问 |
| 通知权限 |
POST_NOTIFICATIONS 权限正式强制 |
| 前台服务类型 |
必须声明 foregroundServiceType |
| 蓝牙 |
LE Audio 增强(Auracast) |
| 内核 |
要求 5.15+(建议 6.1 LTS) |
Phase 3: Android 14 → 15(3~4 周)
| 领域 |
Android 14 → 15 关键变化 |
| 隐私强化 |
ACCESS_FINE_LOCATION 需精确到后台权限审批 |
| SELinux |
更多强制(enforcing)域,seapp contexts 变化 |
| Photo Picker |
系统级照片选择器替代直接媒体访问 |
| 预测返回 |
手势导航预测返回动画 |
| 内核 |
要求 6.1 LTS+,推荐 6.6 |
| VNDK |
VNDK 45 → 46 |
Phase 4: Android 15 → 16(4~6 周)
| 领域 |
Android 15 → 16 关键变化(预测) |
| Kotlin |
Framework 大量 Java → Kotlin,AOSP Kotlin-first |
| 隐私 |
更细粒度的媒体权限 |
| 内核 |
要求 6.12+(传闻要求) |
| ABI |
32-bit 支持进一步裁撤 |
二、Android 12 → 13 详细 Patch 清单(重点)
2.1 AIDL/HIDL 迁移概览
Android 13 是 HIDL 的终点:从 Android 13 开始,所有 HAL 必须使用 AIDL,不再支持新的 HIDL 接口。现有 HIDL 接口需逐步迁移。
必须迁移的 HAL(按优先级):
| HAL |
文件位置 |
迁移说明 |
audio.primary |
hardware/interfaces/audio/ |
必须迁移到 AIDL |
audio.effect |
hardware/interfaces/audio/effect/ |
已有 AIDL 版本 |
audio.core |
hardware/interfaces/audio/core/ |
Android 13 新增 AIDL |
bluetooth.audio |
hardware/interfaces/bluetooth/audio/ |
AIDL mandatory |
radio |
hardware/interfaces/radio/ |
必须 AIDL |
health |
hardware/interfaces/health/ |
AIDL mandatory |
lights |
hardware/interfaces/lights/ |
AIDL mandatory |
wifi |
hardware/interfaces/wifi/ |
AIDL mandatory |
AIDL vs HIDL 关键区别:
| 维度 |
HIDL |
AIDL |
| 接口定义语言 |
HIDL (.hal) |
AIDL (.aidl) |
| IPC 机制 |
Binder HIDL driver |
标准 Binder |
| 代码生成 |
hidl-gen |
aidl |
| 传输方式 |
HWBinder / passthrough |
直接 Binder |
| Android 版本 |
8.1~12 (deprecated) |
10+ (mandatory 13+) |
2.2 Audio HAL 详细 Patch 清单
Audio Policy Configuration
Android 13 强制要求 audio_policy_configuration.xml schema 版本升级到 9.0:
<?xml version="1.0" encoding="UTF-8"?>
<audioPolicyConfiguration version="9.0"
xmlns:xi="http://www.w3.org/2001/XInclude">
<!-- Android 13 要求: version="9.0" -->
<!-- 相比 7.0 的变化:
1. Haptic 通道正式支持
2. SPATIALIZATION 支持
3. ROUTING_POLICY 更细粒度
-->
</audioPolicyConfiguration>
AudioFlinger 核心改动
| 改动 |
文件 |
说明 |
| Direct Output |
AudioFlinger.cpp |
路径优化,减少延迟 |
| Volume Shaper API |
VolumeShaper.h/.cpp |
新增或增强 |
| Offload 策略 |
OffloadControl.h |
BT Audio offload 策略调整 |
| Haptic Audio |
HapticGenerator.cpp |
新增(Android 13) |
2.3 VNDK & SPT 变化
| 版本 |
Android 12 |
Android 13 |
变化 |
| VNDK Core |
32 |
33 |
+1 |
| VNDK SP |
32 |
33 |
+1 |
2.4 SELinux 策略变化
| 变化 |
说明 |
影响 |
| healthd 移除 |
health HAL 替代 healthd |
删除 healthd.te |
| inetd 移除 |
网络栈简化 |
删除相关 sepolicy |
| Statsd 沙盒化 |
独立进程隔离 |
新增 statsd.te |
2.5 内核版本要求
| Android 版本 |
最低内核版本 |
推荐内核版本 |
| Android 12 |
5.4+ |
5.10 LTS |
| Android 13 |
5.15+ |
6.1 LTS |
| Android 14 |
5.15+ |
6.1 LTS |
| Android 15 |
6.1+ |
6.6 LTS |
| Android 16 |
6.12+ (传闻) |
6.12 LTS |
2.6 其他 Breaking Changes
- 通知权限:
POST_NOTIFICATIONS 权限正式强制
- 蓝牙地址隐藏:
READ_BLUETOOTH_ADDRESS 需定位权限
- Wi-Fi 扫描限制:需要
NEARBY_WIFI_DEVICES
- 前台服务类型:必须声明
foregroundServiceType
三、核心建议
Phase 1 (12→13) 是整个升级最难的部分,AIDL 迁移工作量最大。建议先从 Audio HAL 的 HIDL→AIDL 入手,利用对 Audio/AudioFlinger 的熟悉优势打出信心。等 12→13 走通了,13→14、14→15 的增量升级会轻松很多。
四、下一步行动
- Phase 0 — 把现有的 Android 12 源码清理一遍,建立基线
- 系列第 0 篇 — 写一篇环境搭建的博客
- Phase 1 — 开始 12→13 升级,重点攻 AIDL/HIDL 迁移