最近对 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 后再处理也行。