news 2026/2/3 16:59:01

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android-packages/modules-由来及子目录介绍

Android AOSPpackages/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/btAPEX
Wi-FiWiFi/Wi-Fi 服务、网络管理APEX
权限控制Permission/运行时权限管理框架APEX
神经网络NeuralNetworks/神经网络 API (NNAPI) 实现APEX
DNS 解析DNS/DNS-over-TLS/HTTPS 解析器APEX
连接性Connectivity/网络连接管理、TetheringAPEX

2.安全与隐私模块

模块功能重要性
CaptivePortalLogin网络登录门户检测网络安全
IPsecIPsec VPN 实现企业安全
StatsD系统统计框架隐私保护
AdServices隐私广告服务隐私沙盒

3.新硬件支持模块

模块引入版本用途
UwbAndroid 12超宽带通信
VirtualizationAndroid 13虚拟化框架
CellBroadcastAndroid 12蜂窝广播

四、关键技术实现

APEX 包格式

// 示例: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. 权限隔离:模块运行在独立沙盒

五、开发与构建流程

构建命令

# 构建单个模块m com.android.wifi# 构建并推送到设备m com.android.wifi&&adbinstallapex.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 可在基础上添加定制功能

九、相关命令和工具

# 查看已安装模块adb shell pm list packages|grepapex# 手动安装模块adbinstall--staged-ready-timeout60000module.apex# 调试模块adb logcat|grepMODULE_NAME# 模块版本检查adb shell dumpsys package com.android.wifi

packages/modules代表了 Android 架构现代化的关键一步,从固化的操作系统向可更新的平台演进,是 Android 应对安全挑战和设备碎片化的重要解决方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 3:16:25

Linux 内存管理:TLB ASID

文章目录1. 前言2. TLB ASID 的硬件支持2.1 概念2.2 TLB 查找3. Linux 下 TLB ASID 管理4. 参考资料1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. TLB ASID 的硬件支持 2.1 概念 什么是 TLB&…

作者头像 李华
网站建设 2026/1/30 15:13:59

基于微信小程序的数字博物馆系统的设计与实现(程序+文档+讲解)

课题介绍在文博资源数字化、展览体验便捷化需求升级的背景下,传统博物馆存在 “线下参观受限、展品解读单一、互动体验不足” 的痛点,基于微信小程序 SpringBoot 构建的数字博物馆系统,适配游客、博物馆管理员、讲解员等角色,实现…

作者头像 李华
网站建设 2026/1/30 9:58:53

代码随想录算法训练营Day49 | Prim算法、Kruskal算法

Prim算法 53. 寻宝(第七期模拟笔试) 1.思路 本题是最小生成树的模板题,图中有n个节点,那么一定可以用 n-1 条边将所有节点连接到一起,并且总权重最小。 Prim 算法:从一个顶点开始,逐步“生长”…

作者头像 李华
网站建设 2026/1/30 9:00:23

30、Linux软件包管理与源码构建全攻略

Linux软件包管理与源码构建全攻略 在Linux系统中,软件包的管理和源码构建是非常重要的操作。下面将详细介绍DEB文件处理、源码构建以及SRPM安装的相关内容。 1. RPM验证报告字符含义 在RPM验证报告中,有一些特定的字符代表着不同的含义,如下表所示: | 字符 | 含义 | |…

作者头像 李华
网站建设 2026/1/30 1:27:50

Flink Rebalance、Rescale、Shuffle 核心区别

Flink 中的 Rebalance、Rescale、Shuffle 是三种核心的数据流分区策略,用于定义上游算子的并行子任务如何将数据分发到下游算子的并行子任务。三者的核心差异体现在数据分配方式、网络开销、适用场景上,选择不当会直接影响作业的性能和数据分布的均匀性。以下是详细的对比与解…

作者头像 李华
网站建设 2026/1/30 4:54:28

42、Linux编程:软件开发工具探索与实践

Linux编程:软件开发工具探索与实践 1. 编程基础概念 在编程过程中,通常会经历编辑、编译和调试的循环,多数程序员需多次重复此流程,直至程序正确运行。除了掌握这些基本步骤,还需熟悉以下术语和概念: - 变量 :用于存储不同类型的数据,可将其视为数据的占位符,如同…

作者头像 李华