弄了这么久,终于想起来抽空把反编译的方法整理一下了。
目的:反编译apk,供自己研究学习,模仿别人的设计模式和好的代码习惯。
所需工具:apktool,dex2jar,XJad。
ApkTool (用来将APK解压,包括完整的XML文件和smali文件)
通过Google搜索关键字“apktool”,得到网址,下载 apktool1.4.3.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2 两个压缩文件,解压后放在一起。我为了以后用起来方便,就直接把apktool.bat和apktool.jar两个文件放到了androidSDK的platform-tools文件夹下了。下载下来的aapt.exe文件可以不管,在platform-tools文件夹下有Android自带的。
dex2jar(用于把dex文件转换成jar文件)
通过Google搜索关键字“dex2jar”,得到网址,下载Windows下的zip包。解压放在随便的位置。
XJad (用于反编译jar包或class文件)
通过Google搜索关键字“xjad”,下载一个版本即可,解压放在随便的位置。
至此,工具就准备齐全了。
步骤一:把APK放到一个方便的位置,用解压软件解压缩到一个文件夹(apk和文件夹都需要在以后用到)
步骤二:用apktool解压apk文件。
执行“apktool d *.apk dir_name”就可以看到有一个文件夹生成了。
apktool是其中的批处理命令
d是参数,不明白的执行以下apktool就知道了,或看下HELP
*.apk是你要解压的apk的文件,就是步骤一中的apk文件
dir_name是你要解压到哪个目录下,是个目录名。
通过apktool执行解压apk,会得到完整的不是乱码的xml文件,包括Layout、value等和AndroidManifest.xml文件。代码方面,会得到smali语言的中间语言文件,以包的结构来组织。
步骤三:用dex2jar工具,使dex文件转换成jar包文件。
执行“dex2jar *.dex *.jar”就可以看到有一个jar文件生成了
dex2jar是批处理命令
*.dex是要反编译的dex文件,在步骤一的文件夹中,叫classes.dex
*.jar是要反编译成的jar文件,可以自己起名字,也可以不指定,dex2jar会自动命名
步骤四:用Xjad工具,反编译jar或class到Java文件。
打开Xjad工具,在“文件”中可以看到有很多选项,包括打开一个class文件,反编译文件夹,反编译jar包,很方便。
至此就可以反编译出来apk中的内容了,组织一下就可以准备调试了。
里面虽然有不完善的地方,但至少可以动手学习和分析了。