Android16 系统 APEX 模块说明

Android16 系统 APEX 模块说明

文章目录

一、前言

从 Android 10 开始,Google 引入 APEX(Android Pony EXpress)格式对系统核心组件进行模块化打包。

到了 Android 16,蓝牙、WiFi、ART、媒体等核心模块都以 APEX 形式存放在 /system/apex/ 目录,

不再是传统的 /system/priv-app//system/framework/ 下的独立文件。

APEX 的好处是支持 Mainline 独立更新,但对开发调试带来了变化:

不能像以前那样直接 push 单个 APK/jar/so,需要替换整个 APEX 容器。

本文以实际产品 akee 的编译产物为例,说明设备上每个 APEX 文件的作用、对应源码路径,以及最简调试替换方法。


二、APEX 模块功能与源码路径对照表

以下是 out/target/product/akee/system/apex/ 目录下所有 APEX 文件:

APEX 文件名 模块说明 功能 源码路径
com.android.adbd.apex ADB 守护进程 adbd 服务,USB/网络调试连接 packages/modules/adb/
com.android.adservices.apex 广告服务 Topics、Measurement、FLEDGE 等隐私广告 API packages/modules/AdServices/
com.android.apex.cts.shim.apex CTS 兼容垫片 CTS 测试兼容层,无实际功能代码 system/apex/cts/shim/
com.android.appsearch.apex 应用搜索 AppSearch 本地全文搜索引擎 packages/modules/AppSearch/
com.android.art.apex ART 运行时 Java 运行时、libart、dex2oat、libcore art/libcore/
com.android.bt.apex 蓝牙 Bluetooth.apk、libbluetooth_jni.so、蓝牙协议栈 packages/modules/Bluetooth/
com.android.configinfrastructure.apex 配置基础设施 设备配置推送、Feature Flags 管理 packages/modules/ConfigInfrastructure/
com.android.conscrypt.apex 加密库 TLS/SSL、BoringSSL、加密算法提供者 external/conscrypt/
com.android.crashrecovery.apex 崩溃恢复 系统崩溃检测与自动恢复 packages/modules/CrashRecovery/
com.android.devicelock.apex 设备锁 设备租赁/分期付款场景锁机控制 packages/modules/DeviceLock/
com.android.extservices.apex 扩展服务 WallpaperManager、TextClassifier、SpellChecker 等 packages/modules/ExtServices/
com.android.healthfitness.apex 健康健身 HealthConnect 统一运动健康数据管理 packages/modules/HealthFitness/
com.android.i18n.apex 国际化 ICU 库、Unicode、日期/数字格式化 external/icu/packages/modules/I18n/
com.android.ipsec.apex IPsec IKEv2/VPN 守护进程和安全库 packages/modules/IPsec/
com.android.media.apex 媒体框架 mediaserver、codec、extractor 框架 frameworks/av/packages/modules/Media/
com.android.media.swcodec.apex 软件编解码器 软编解码库(libstagefright_soft_*.so) frameworks/av/media/module/codecs/
com.android.mediaprovider.apex 媒体提供器 MediaProvider、媒体数据库、Storage Access Framework packages/modules/MediaProvider/
com.android.neuralnetworks.apex 神经网络 NNAPI 运行时和驱动适配层,ML 推理加速 packages/modules/NeuralNetworks/
com.android.nfcservices.apex NFC 服务 NFC 系统服务和应用 packages/modules/Nfc/
com.android.ondevicepersonalization.apex 端侧个性化 ODP 联邦学习/本地推理隐私服务 packages/modules/OnDevicePersonalization/
com.android.os.statsd.apex 系统统计 statsd 守护进程、系统指标和电池统计 frameworks/base/cmds/statsd/
com.android.permission.apex 权限控制器 PermissionController、运行时权限、隐私指示器 packages/modules/Permission/
com.android.profiling.apex 性能分析 系统级性能数据采集服务 packages/modules/Profiling/
com.android.resolv.apex DNS 解析 DNS resolver 守护进程、DNS over TLS packages/modules/DnsResolver/
com.android.rkpd.apex 远程密钥配置 Remote Key Provisioning 服务,KeyMint 证书管理 packages/modules/RemoteKeyProvisioning/
com.android.runtime.apex 运行时基础 bionic linker、基础运行时环境 bionic/system/core/system/apex/runtime/
com.android.scheduling.apex 任务调度 后台任务调度优化服务 packages/modules/Scheduling/
com.android.sdkext.apex SDK 扩展 SDK Extensions,不升级系统即可扩展 API level packages/modules/SdkExtensions/
com.android.tzdata.apex 时区数据 时区数据库(tzdb),可独立更新 system/timezone/
com.android.uprobestats.apex Uprobe 统计 uprobe 性能统计守护进程 system/extras/uprobestats/
com.android.uwb.apex 超宽带 UWB/FiRa 协议栈,高精度测距 packages/modules/Uwb/
com.android.virt.apex 虚拟化 AVF 虚拟化框架、pKVM、Microdroid packages/modules/Virtualization/
com.android.wifi.apex WiFi WifiStack APK、wificond、WiFi native 库 packages/modules/Wifi/
com.amlogic.mediaextractor.apex Amlogic 媒体提取器 晶晨厂商定制音视频容器解封装器 vendor/amlogic/hardware/amlogic/media/

三、按功能分类

核心运行时(系统启动必须)

模块 作用
com.android.art / com.android.runtime Java/Kotlin 运行环境
com.android.i18n 国际化 ICU 库
com.android.tzdata 时区数据
com.android.conscrypt TLS/SSL 加密
com.android.sdkext SDK 扩展

连接类(与蓝牙类似,常用)

模块 作用
com.android.bt 蓝牙
com.android.wifi WiFi
com.android.uwb UWB 超宽带
com.android.nfcservices NFC
com.android.ipsec VPN/IPsec
com.android.resolv DNS 解析

媒体类

模块 作用
com.android.media 媒体框架
com.android.media.swcodec 软件编解码器
com.android.mediaprovider 媒体库
com.amlogic.mediaextractor Amlogic 定制解封装

安全/隐私类

模块 作用
com.android.permission 权限管理
com.android.rkpd 密钥配置
com.android.devicelock 设备锁
com.android.adservices 广告隐私
com.android.ondevicepersonalization 端侧个性化

系统服务/工具类

模块 作用
com.android.adbd ADB 调试
com.android.os.statsd 系统统计
com.android.extservices 扩展服务
com.android.appsearch 应用搜索
com.android.healthfitness 健康数据
com.android.virt 虚拟化
com.android.neuralnetworks ML 推理

四、APEX 文件格式说明

1、.apex 与 .capex 的区别

格式 说明 特点
.apex 未压缩 APEX 直接 loop 挂载,无需解压,占用 system 空间较大
.capex Compressed APEX(压缩) 开机时由 apexd 解压到 /data/apex/decompressed/,节省 system 空间

2、控制编译输出格式

默认可能输出 .capex,如需输出 .apex

bash 复制代码
# 强制输出未压缩的 .apex
export OVERRIDE_PRODUCT_COMPRESSED_APEX=false
m com.android.bt
# 产物:out/target/product/XXX/system/apex/com.android.bt.apex

如果不设置则默认:

bash 复制代码
m com.android.bt
# 产物:out/target/product/XXX/system/apex/com.android.bt.capex

⚠️ 替换时文件扩展名必须与设备 /system/apex/ 下原有文件一致,不能直接改名互换。


五、简要调试说明

方法一:adb install --apex --staged(最简,推荐)

两条命令搞定,不需要 disable-verity、不需要 remount、失败自动回滚:

bash 复制代码
# 1. 编译对应模块(以蓝牙为例)
m com.android.bt

# 2. 以 staged 方式安装(下次重启生效)
adb install --apex --staged out/target/product/akee/system/apex/com.android.bt.apex

# 3. 重启
adb reboot

其他模块同理,把模块名换掉即可:

bash 复制代码
# WiFi
m com.android.wifi
adb install --apex --staged out/target/product/akee/system/apex/com.android.wifi.apex

# ART
m com.android.art
adb install --apex --staged out/target/product/akee/system/apex/com.android.art.apex

回滚到系统版本:

bash 复制代码
adb uninstall --apex com.android.bt
adb reboot

方法二:直接 push 到 /system/apex/(需要 root)

bash 复制代码
adb root
adb disable-verity      # 首次需要,之后重启
adb reboot
adb root
adb remount

# 备份
adb shell cp /system/apex/com.android.bt.apex /data/local/tmp/

# 推送
adb push out/target/product/akee/system/apex/com.android.bt.apex /system/apex/

# 修复权限
adb shell chmod 644 /system/apex/com.android.bt.apex
adb shell restorecon /system/apex/com.android.bt.apex

# 清缓存重启
adb shell rm -rf /data/apex/active/com.android.bt*
adb shell rm -rf /data/apex/decompressed/com.android.bt*
adb reboot

首先要确认系统使用的是apex文件,有些系统也可能使用capex文件,就要用capex文件替换。

验证生效

bash 复制代码
# 查看 APEX 是否激活
adb shell
dumpsys package com.android.bluetooth | grep -E "version|path"

# 查看 APK 路径
adb shell pm path com.android.bluetooth

# 查看 apexd 加载日志
adb logcat -s apexd *:S

常用编译命令

bash 复制代码
m com.android.bt        # 蓝牙
m com.android.wifi      # WiFi
m com.android.art       # ART
m com.android.media     # 媒体
m Bluetooth             # 只编译蓝牙 APK(不能单独安装)

六、注意事项

  1. 不要直接 adb install APEX 内的 APK。APEX 内的 APK 依赖同 APEX 内的 JNI 库、jar 包和配置文件,单独安装会导致系统服务启动失败。
  2. 替换整个 APEX,不要尝试只替换 APEX 内部的某个文件(apk/so/jar),否则签名和 dm-verity 校验失败。
  3. 使用 adb install --apex --staged 最安全 ,系统会自动备份旧版本,新版本有问题自动回滚,不会变砖。
    install 后一定要重启,不然无法生效,并且不支持install两次。
  4. 厂商定制 APEX (如 com.amlogic.mediaextractor)不在 AOSP 的 packages/modules/ 下,需要到 vendor/hardware/ 目录查找源码。

PS

生活其实并不难,只是很多人没找到自己的那片土地。

相关推荐
2601_9620715717 分钟前
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
java·开发语言·数据库
————A19 分钟前
Agent 文件处理中间件
开发语言·javascript·ecmascript
梦想的旅途219 分钟前
如何高效调用企业微信通讯录API管理组织架构
java·开发语言·企业微信
阿宁学科技术库30 分钟前
关于“库库AI”在股票投研场景实用性的技术观察
大数据·人工智能·职场和发展
whcyhhh36 分钟前
头歌实践教学平台:大数据存储2023(十三3)
大数据·开发语言·python
2601_962065491 小时前
PHP For 循环
android·java·php
码农coding1 小时前
android12 WindowManagerService窗口的添加过程
android
小小测试开发1 小时前
RAG评测指标实战:忠实度、上下文精确率/召回率从原理到CI落地
android·人工智能·spring boot·ci/cd
Easy_API1 小时前
OpenAI三周内第二次降价,GPT-5.6 Sol砍了20%到33
大数据·前端·人工智能·gpt·深度学习