首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >通过apk 查看对应的类 以及类对于的源代码路径

通过apk 查看对应的类 以及类对于的源代码路径

原创
作者头像
用户10171634
发布2025-10-23 18:08:05
发布2025-10-23 18:08:05
590
举报

unzip MtkSystemUI.apk classes.dex

odex (Optimized DEX)

vdex (Verified DEX)

是的,如果你尝试 只替换 odex 文件,通常还需要对应的 vdex 文件一并更新,否则系统可能拒绝加载或者报错。

具体原因:

  1. odex (Optimized DEX)
    • 包含了经过 ART 编译优化后的字节码,用于加快启动和运行。
    • 单独替换 odex,如果 vdex 和 odex 不匹配,ART 会加载失败。
  2. vdex (Verified DEX)
    • 存储 dex 的验证信息(verify 数据),用于 ART 在启动时快速验证。
    • odex 依赖 vdex 里的验证信息,如果不更新,ART 会用旧的 vdex,可能导致 odex 无效或者 SystemUI 崩溃。

所以,两者必须匹配

⚠️ 另外还要保证:

  • 文件路径正确(跟设备上原本的路径一模一样)
  • 权限和 SELinux 上下文正确
  • 最好重启 SystemUI 或整机,以确保 ART 重新加载新的 odex/vdex

如果你希望,我可以给你写一个 最小风险的流程,让你 push odex+vdex 并测试 NavigationBarView 日志。

对,你理解得没错。

原因核心在于 XML inflate 的类是由 ART 在 SystemUI 启动时加载的 view 层级动态生成的

  1. CentralSurfacesImpl.java
    • 是直接在代码里 new 出来的类。
    • 编译生成的 apk push 到设备里就可以被执行,因为代码直接被调用,ART 会加载 apk 中的 dex/odex 即可。
  2. NavigationBarView / NavigationBarInflaterView
    • 这些类是通过 XML layout inflate 创建的,而 inflate 会使用 预编译的 odex/vdex 来生成 view 实例。
    • 如果你只更新 apk(dex 部分)而 odex/vdex 还是旧的,ART 会继续使用旧的优化过的字节码来 inflate view,所以你加的日志不会打印。

总结:

  • 通过代码直接 new 的类 → 只更新 apk 就能生效。
  • 通过 XML inflate 创建的类 → 需要同时更新 odex/vdex,或者整刷 system_ext/system.img,使 ART 重新生成和加载优化后的 dex。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档