Android 13 framework-wifi 编译产物
在 Android 13 (API 33) 及更高版本中,Wi-Fi 框架已完全模块化(Mainline Module)。其源码位于 packages/modules/Wifi,编译产物主要分布在 Soong 中间目录、APEX 软件包和系统镜像中。
1. 编译产物核心路径总览
| 产物类别 | 物理路径 (相对于 out/ 目录) | 主要用途 |
|---|---|---|
| Soong 中间产物 | soong/.intermediates/packages/modules/Wifi/framework/framework-wifi/ |
包含编译过程中的 .class、.dex 及未签名的 JAR。 |
| 模块 SDK 产物 | soong/.intermediates/packages/modules/Wifi/framework/framework-wifi-module-sdk/ |
供其他模块依赖的存根 (Stub) 库。 |
| Target 预置产物 | target/product/[device]/obj/JAVA_LIBRARIES/framework-wifi_intermediates/ |
链接后的目标文件,用于最终镜像合成。 |
| APEX 镜像文件 | target/product/[device]/system/apex/com.android.wifi.apex |
Wi-Fi 模块的最终发布格式(压缩包)。 |
2. 详细产物结构解析
A. Soong 编译中间层 (Intermediates)
当你执行 m framework-wifi 时,这是最关键的目录:
out/soong/.intermediates/packages/modules/Wifi/framework/framework-wifi/android_common/
-
javac/:framework-wifi.jar: 包含标准 Java 字节码 (.class文件)。- 用于静态扫描或简单的代码逻辑分析。
-
dex/:framework-wifi.jar: 包含经过 D8 转换后的 Dalvik 字节码 (classes.dex)。- 注意:这是真正运行在 Android 虚拟机上的代码格式。
-
combined/:framework-wifi.jar: 整合后的 JAR 包,通常包含资源和代码,用于最终链接。
B. APEX 模块内路径
由于 Wi-Fi 是一个 Mainline 模块,它最终被封装在 com.android.wifi.apex 中。在设备运行或镜像挂载后,其路径如下:
- 运行时路径 :
/apex/com.android.wifi/javalib/framework-wifi.jar - 镜像构建路径 :
out/target/product/[product]/system/apex/com.android.wifi/javalib/framework-wifi.jar
3. 关键文件作用说明
-
framework-wifi.jar: Wi-Fi 框架的核心实现。 -
framework-wifi.res.jar: (如果存在) 包含 Wi-Fi 相关的资源文件(如定义的 Overlay 属性)。 -
API 签名文件:
- 位于
prebuilts/sdk/current/public/api/framework-wifi.txt。 - 如果你修改了
framework-wifi的public或system接口,编译会报错,提示你运行m update-api更新此处的文件。
- 位于
4. 常用调试操作
如何快速查找刚编译出的 JAR 包?
如果你不确定具体目录名(有时会有变动),可以在根目录执行:
Bash
arduino
find out/soong/.intermediates/packages/modules/Wifi -name "framework-wifi.jar"
如何确认我的改动已进入 DEX?
你可以使用 Android SDK 自带的 dexdump 工具查看编译产物:
Bash
bash
dexdump -d out/soong/.intermediates/packages/modules/Wifi/framework/framework-wifi/android_common/dex/framework-wifi.jar | grep "你的类名或方法名"
5. 编译小贴士 (Tips)
- 全量与模块编译 :使用
m framework-wifi只会编译该库,但不会重新打包 APEX。若需更新镜像,建议执行m com.android.wifi。 - Symbols :如果你在进行本地调试或需要符号表,请关注
out/target/product/[device]/symbols/apex/com.android.wifi/...路径下的文件。
适用版本: Android 13 (Tiramisu) / AAOS 13