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

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

相关推荐
夏幻灵4 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码4 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
aqi005 小时前
鸿蒙版本的电子书阅读APP开放源码啦
android·华为·ai编程·harmonyos·鸿蒙
墨天梦5 小时前
B19_SunnyWeather到阅读客户端
android·kotlin
bkspiderx5 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆6 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光6 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
美狐美颜sdk6 小时前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
码云数智-园园6 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
问商十三载6 小时前
AI引擎生成式优化实践:刑事辩护律师团队IP构建
大数据·人工智能