android应用程序打包发布为.apk文件,此文件中可以在 android系统中进行安装。
在android中提供了方便的打包工具:
android-sdk-windows\platform-tools目录下,包括有aapt、dx、dexdump指令。
每个.apk文件中都包含以下目录结构
其中assets和res目录包含了我们的资源文件的内容,classes.dex文件是由src目录编译生成的.dex文件,resources.arsc主要是资源文件的索引
注:apk文件经过解压后,这里的xml文件都是加密后压缩的文件,我们并不能直接查看这类文件。classes.dex文件是在java源文件生成class文件后,经过dx指令编译生成的.dex文件,以便在android的虚拟机上运行的文件。因此,我们需要经过反编译还原它的本来面目。
经下来进行本文重点, android反编译。
android反编译是有多种工具可以进行反编译,本人习惯用apktool+dex2jar+jd-gui这三个工具进行android的反编译。
apktool的下载地址:http://code.google.com/p/android-apktool/downloads/list
dex2jar的下载地址:http://code.google.com/p/dex2jar/downloads/list
jd-gui的下载地址:http://java.decompiler.free.fr/?q=jdgui
注:google的网站有时总会被和谐,请多次尝试。。。。
用法如下:
1.首先通过apktool这个开源的工具进行解压缩,这样就会把加密的xml文件反编译成正常的文件。
将apktool.jar,apktool.bat,aapt.exe放到同一个文件夹下
在当前目录下就生成了一个与apk文件同名的目录,此目录结构如下:
此时res文件夹下的资源文件都已反编译成功,dex文件反编译成smali文件,但此文件与java文件还相差太远,所以我们需要单独反编译dex文件。
2.通过dex2jar将dex文件反编译成jar文件
将解压的classes.dex文件与dex2jar.bat放在同一目录下,在当前目录生成了classes_dex2jar.jar文件,此文件就是我们熟悉的jar文件,包含了所有的反编译后的class文件。
3.通过jd-gui打开此jar文件
至此,一个apk文件就反编译完成了。
我认为反编译工作还是很有必要的,能够学习到别人的长处,不断提升自己的水平。