记一次提取 Oppo rom OppoFloatPanelView.java 源码

起因

收到了一个 OPPO A53 用户的报错,错误是从 android.widget.OppoFloatPanelView 里面报出来的,很明显,这是一个 rom 里的 view。所以想尝试拿到 rom 里 OppoFloatPanelView 的源码。

Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xc05040d
    at android.content.res.Resources.getValue(Resources.java:1333)
    at android.content.res.Resources.getDimension(Resources.java:644)
    at android.widget.OppoFloatPanelView.initArrowOffset(OppoFloatPanelView.java:52)
    at android.widget.OppoFloatPanelView.initialize(OppoFloatPanelView.java:46)
    at android.widget.OppoFloatPanelView.<init>(OppoFloatPanelView.java:42)
    ... 47 more

下载固件

去官方网站 https://bbs.coloros.net/firmwareLoad
下载 OPPO A53 的固件

得到 A53_11_A.08_OTA_008_all_201601212240.zip,并解压缩


提取镜像

使用 sdat2img 工具得到 system.img

./sdat2img.py system.transfer.list system.new.dat system.img

看到 system.img 的格式为 Linux rev 1.0 ext4 filesystem data

file system.img
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)

挂载 system.img

必须要使用到 osxfuse

brew cask install osxfuse

然后有两个工具 ext4fusefuse-ext2
ext4fuse 只支持读操作,但安装简单,fuse-ext2 安装比较麻烦,最后没有搞出来,所以决定使用 ext4fuse。
安装 ext4fuse:

brew install ext4fuse

然后执行

ext4fuse system.img ./out

得到镜像内部目录


具体对焦 framework 目录,将 framework 全部拷贝出来。将其中 arm 内所有文件移到 framework 中。

接下来使用 dextra

~/Downloads/dextra -dextract ~/Desktop/framework/boot.oat

使用 jadx 对 dex 进行反编译

jadx system@framework@framework.jar@classes.dex

打开结果目录,即可找到 OppoFloatPanelView

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容