android 的 framework.jar 反编译,并重新编译

2016-09-26 13:43:25 +08:00
 heitao1
最近对 android 2.3.3 的 framework.jar 进行了一些反编译和回编译的操作,写下来备忘。

一、 framework.jar 反编译为 smali 文件

1 、下载 smali-1.2.6.jar 和 baksmali-1.2.6.jar 这两个工具(下载地址: http://code.google.com/p/smali/downloads/list
2 、将 framework.jar 中的 classes.dex 解压出来(好像不解压,直接用 framework.jar 也行)
3 、使用 baksmali.jar 对 classes.dex 进行反编译(前提是安装了 jdk ,并且设置好了环境变量),执行命令:

java -jar baksmali-1.2.6.jar classes.dex -o out/
其中 classes.dex 是要反编译的文件, out/是要把反编译后的文件存放到的文件夹,如果不是在当前目录下,那么 baksmali-1.2.6.jar 还要加上路径

这样就 OK 了,在 out 文件夹中可以看到一堆扩展名为.smali 的文件,用记事本就可以打开它们,从中可以窥到一些信息。但是与.java 文件还是有一些不同,我也不太清楚这是什么结构。

二、 smali 文件回编译为 classes.dex

1 、一条命令就 OK 了: java -jar smali-1.2.6.jar out/ -o classes.dex
2 、再把编译好的 classes.dex 放回到 framework.jar 中就行了(可以使用 winrar 、 winzip 之类的工具作为辅助)。

三、 framework.jar 反编译为.class 和.java 文件

1 、下载以下工具:
( 1 ) dex2jar ( http://code.google.com/p/dex2jar/)
( 2 ) xjad ( http://www.skycn.com/soft/41898.html )或 jd-gui ( http://java.decompiler.free.fr/?q=jdgui
2 、使用 dex2jar 对 framework.jar 进行转换,执行命令: dex2jar.bat framework.jar 将会生成一个 framework.jar.dex2jar.jar
3 、直接对该 jar 文件解压,可以看到里面都是.class 文件了
4 、如果还需要转换成.java 文件,可以使用 xjad 或 jd-gui ,均可将 class 文件变为 java 文件。

注: dex2jar 工具也可以处理.dex 文件,因此也可以不直接处理 framework.jar 。而是先将 framework.jar 解压,生成 classes.dex 后再处理也行。
10127 次点击
所在节点    Android
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/309019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX