Android AOSP packages/modules 详解
一、目录由来与演进
历史演变
- Android 1.0-9.0 :系统组件深度集成在
frameworks/中 - Android 10 (2019) :引入 Project Mainline ,创建
packages/modules - 目标:将关键系统服务模块化,支持通过 Google Play 独立更新
核心设计理念
- 解耦系统组件:从 monolithic 系统转向模块化架构
- 独立更新:绕过 OEM 厂商,直接向用户推送安全更新
- 兼容性保证:通过 CTS 测试确保模块间兼容性
二、目录结构概览
packages/modules/
├── ModuleName/
│ ├── Android.bp # Soong 构建文件
│ ├── apex/ # APEX 包定义(Android 10+)
│ ├── service/ # 服务实现
│ ├── api/ # 公共 API 定义
│ ├── tests/ # 测试代码
│ └── ... # 模块特定代码
三、主要子模块详细介绍
1. 核心系统服务模块
| 模块 | 路径 | 功能描述 | 打包格式 |
|---|---|---|---|
| 蓝牙栈 | Bluetooth/ |
蓝牙协议栈实现,替代传统 system/bt |
APEX |
| Wi-Fi | WiFi/ |
Wi-Fi 服务、网络管理 | APEX |
| 权限控制 | Permission/ |
运行时权限管理框架 | APEX |
| 神经网络 | NeuralNetworks/ |
神经网络 API (NNAPI) 实现 | APEX |
| DNS 解析 | DNS/ |
DNS-over-TLS/HTTPS 解析器 | APEX |
| 连接性 | Connectivity/ |
网络连接管理、Tethering | APEX |
2. 安全与隐私模块
| 模块 | 功能 | 重要性 |
|---|---|---|
| CaptivePortalLogin | 网络登录门户检测 | 网络安全 |
| IPsec | IPsec VPN 实现 | 企业安全 |
| StatsD | 系统统计框架 | 隐私保护 |
| AdServices | 隐私广告服务 | 隐私沙盒 |
3. 新硬件支持模块
| 模块 | 引入版本 | 用途 |
|---|---|---|
| Uwb | Android 12 | 超宽带通信 |
| Virtualization | Android 13 | 虚拟化框架 |
| CellBroadcast | Android 12 | 蜂窝广播 |
四、关键技术实现
APEX 包格式
makefile
// 示例:Wi-Fi 模块的 APEX 定义
apex {
name: "com.android.wifi",
manifest: "apex_manifest.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":com.android.wifi-file_contexts",
prebuilts: ["wpa_supplicant", "hostapd"],
}
模块化架构特点
- 独立版本控制:每个模块有自己的版本号
- ABI 稳定性:保持向后兼容
- 回滚机制:更新失败自动回退
- 权限隔离:模块运行在独立沙盒
五、开发与构建流程
构建命令
bash
# 构建单个模块
m com.android.wifi
# 构建并推送到设备
m com.android.wifi && adb install apex.apex
# 测试模块
atest WifiTests
模块开发流程
- 代码位置 :
packages/modules/ModuleName/ - API 管理 :通过
api/目录定义稳定接口 - 测试要求:必须包含单元测试和集成测试
- CTS 验证:通过兼容性测试套件验证
六、实际案例:Wi-Fi 模块
目录结构示例
WiFi/
├── Android.bp # 构建配置
├── service/
│ ├── java/com/android/wifi/ # Java 服务层
│ └── jni/ # JNI 本地代码
├── apex/
│ └── AndroidManifest.xml # APEX 清单
├── api/
│ ├── current.txt # 当前 API
│ └── removed.txt # 移除的 API
├── tests/
│ ├── unit/ # 单元测试
│ └── integration/ # 集成测试
└── res/ # 资源文件
更新流程
- Google 开发安全补丁
- 编译为
com.android.wifi.apex - 通过 Google Play 推送
- 设备自动安装(无需重启)
七、对生态系统的意义
优点
- ✅ 快速安全更新:高危漏洞可在数天内修复
- ✅ 减少碎片化:统一核心系统行为
- ✅ 降低 OEM 负担:Google 维护核心组件
- ✅ 新功能快速部署:无需等待 Android 大版本
挑战
- ⚠️ 测试复杂度增加:需保证模块间兼容性
- ⚠️ 存储开销:每个模块独立打包增加空间占用
- ⚠️ 启动时间:模块化可能影响启动性能
八、发展趋势
- 更多模块化 :Android 13+ 将更多组件移入
modules/ - 动态交付:支持按需下载和安装模块
- 云控制:Google 可远程配置模块行为
- 可定制性:OEM 可在基础上添加定制功能
九、相关命令和工具
bash
# 查看已安装模块
adb shell pm list packages | grep apex
# 手动安装模块
adb install --staged-ready-timeout 60000 module.apex
# 调试模块
adb logcat | grep MODULE_NAME
# 模块版本检查
adb shell dumpsys package com.android.wifi
packages/modules 代表了 Android 架构现代化的关键一步,从固化的操作系统向可更新的平台演进,是 Android 应对安全挑战和设备碎片化的重要解决方案。