Android-packages/modules-由来及子目录介绍

Android AOSP packages/modules 详解

一、目录由来与演进

历史演变

  • Android 1.0-9.0 :系统组件深度集成在 frameworks/
  • Android 10 (2019) :引入 Project Mainline ,创建 packages/modules
  • 目标:将关键系统服务模块化,支持通过 Google Play 独立更新

核心设计理念

  1. 解耦系统组件:从 monolithic 系统转向模块化架构
  2. 独立更新:绕过 OEM 厂商,直接向用户推送安全更新
  3. 兼容性保证:通过 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"],
}

模块化架构特点

  1. 独立版本控制:每个模块有自己的版本号
  2. ABI 稳定性:保持向后兼容
  3. 回滚机制:更新失败自动回退
  4. 权限隔离:模块运行在独立沙盒

五、开发与构建流程

构建命令

bash 复制代码
# 构建单个模块
m com.android.wifi

# 构建并推送到设备
m com.android.wifi && adb install apex.apex

# 测试模块
atest WifiTests

模块开发流程

  1. 代码位置packages/modules/ModuleName/
  2. API 管理 :通过 api/ 目录定义稳定接口
  3. 测试要求:必须包含单元测试和集成测试
  4. 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/                         # 资源文件

更新流程

  1. Google 开发安全补丁
  2. 编译为 com.android.wifi.apex
  3. 通过 Google Play 推送
  4. 设备自动安装(无需重启)

七、对生态系统的意义

优点

  • 快速安全更新:高危漏洞可在数天内修复
  • 减少碎片化:统一核心系统行为
  • 降低 OEM 负担:Google 维护核心组件
  • 新功能快速部署:无需等待 Android 大版本

挑战

  • ⚠️ 测试复杂度增加:需保证模块间兼容性
  • ⚠️ 存储开销:每个模块独立打包增加空间占用
  • ⚠️ 启动时间:模块化可能影响启动性能

八、发展趋势

  1. 更多模块化 :Android 13+ 将更多组件移入 modules/
  2. 动态交付:支持按需下载和安装模块
  3. 云控制:Google 可远程配置模块行为
  4. 可定制性: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 应对安全挑战和设备碎片化的重要解决方案。

相关推荐
2501_932750266 小时前
Android BottomNavigationView 入门介绍
android
Godikov8 小时前
硬件异步事件下的业务一致性:智能柜领取/归还流程的竞态设计
android
Godikov8 小时前
不用 Netty:Android 手写 TCP 客户端实战——自定义协议帧、粘包处理与可靠重连
android
事圆则缓8 小时前
Java 面向对象如何落到 Android View 体系
android
iPad协议个微协议9 小时前
# 微信自动营销系统如何基于 WechatApi 做事件驱动设计
android·微信·企业微信·个人开发·wechatapi·微信个人号开发
AirDroid_cn9 小时前
隐私沙盒:第三方应用读取剪切板内容如何拦截?
android·gitee
2501_9159184111 小时前
怎么把 Python 写的 Flet 应用打包成 iOS App 并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
邪修king13 小时前
Re:Linux系统篇(二十六):文件系统(二):Ext 文件系统底层详解:从 inode、块组到软硬链接,结合 Windows 讲透文件管理本质
android·java·linux
又见情义13 小时前
RK3568 Android 13 版本号管理实战:基于 ROCKCHIP_BUILD_NUMBER 的定制化方案
android
终端安全笔记13 小时前
iOS 27 强制 TLS 1.2:租赁设备的注册链路会在哪一环断
android·网络·安全·ios·智能手机