部分设备 crash 在 Framework 代码, 但又和开源代码对应不上, 这时需要拉取设备里面的 Framework 并反编译源代码排查问题.
1, 获取 Framework 文件:
adb pull /system/framework
获取 Framework 文件夹下面的内容, 可能有 framework.jar 和 framework.odex, 如果 framework.jar 解压出来有 dex 则反编译 dex 即可, 如果 framework.jar 里面没 dex 则需要先反编译 framework.odex 文件至 dex 文件;
2, 反编译 odex 文件:
pull framework 文件夹时最好全部获取出来, 因为反编译时有依赖, 就在获取的 framework 文件夹里面反编译不用担心依赖缺少的问题;
反编译 odex 文件的工具: smali 和 baksmali 的 jar 文件
- https://github.com/JesusFreke/smali
- https://bitbucket.org/JesusFreke/smali/downloads/
(1) 反编译 odex 文件获取 smali 文件:
- java -jar baksmali-2.2.2.jar #查看输出用法
- # 反编译 framework.odex
java -jar baksmali-2.2.2.jar deodex framework.odex
执行成功后, 会产生一个 out 目录, 里面放的是中间文件, 找到对应 smali 文件文件可以查看对应的源码, 可以找到对应行号代码, 这个非常有用!
(2) 生成 dex 文件
- # 查看用法
- java -jar smali-2.2.2.jar
- # 生成 out.dex
- java -jar smali-2.2.2.jar assemble out
(3) 生成 jar 文件
- dex2jar-2.0 out.dex
- # 使用 JD-GUI 查看 out-dex2jar.jar 即可
参考文档:
- https://www.cnblogs.com/ungshow/p/3511330.html
- http://blog.sina.com.cn/s/blog_4e1e357d0102yg5o.html
来源: http://www.bubuko.com/infodetail-2631181.html