反编译代码
要想将APK文件中的代码反编译出来,我们需要用到以下两款工具:dex2jar 和 jd-gui,可以在网上自行下载,这里分享下网盘下载链接:dex2jar-2.0.zip 和 jd-gui-windows-1.4.0.zip
dex2jar这个工具用于将dex文件转换成jar文件
jd-gui这个工具用于将jar文件转换成java代码
1、解压工具包
将这两个工具都下载好并解压,然后我们就开始对Demo程序进行反编译。解压dex2jar压缩包后,你会发现有很多个文件,如下图所示:

2、解压Demo.apk
然后我们将Demo.apk文件也进行解压,如果不知道怎么直接解压的可以先将文件重命名成Demo.zip,然后用解压软件打开。解压之后你会发现里面有一个classes.dex文件,如下图所示:

3、将classes.dex文件转换为jar
我们将classes.dex文件拷贝到dex2jar解压后的目录下,打开cmd命令窗口,切换到解压后的dex2jar下,输入命令:d2j-dex2jar classes.dex 执行结果如下图所示:


4、打开解压后的jd-gui-windows-1.4.0文件
双击打开jd-gui.exe程序,如图

5、把刚才生成的classes-dex2jar.jar这个文件直接拖过来
结果如下图所示:

反编译资源
其实细心的朋友可能已经观察到了,刚才Demo.apk的解压目录当中不是已经有资源文件了吗,有AndroidManifest.xml文件,也有res目录。进入res目录当中,内容如下图所示:



1、工具下载
下载地址:ibotpeaches.github.io/Apktool/ins…
网盘地址:pan.baidu.com/s/13_YUDVXx…
关于这个工具的下载我还要再补充几句,我们需要的就是apktool.bat和apktool.jar这两个文件。目前apktool.jar的最新版本是2.3.1,这里我就下载最新的了,然后将apktool_2.3.1.jar重命名成apktool.jar,并将它们放到同一个文件夹下就可以了,如下图所示:

2、解码
接下来的工作就很简单了,我们将Demo.apk拷贝到和这两个文件同样的目录当中,然后cmd也进入到这个目录下,并在cmd中执行如下命令:apktool d Demo.apk 其中d是decode的意思,表示我们要对Demo.apk这个文件进行解码。那除了这个基本用法之外,我们还可以再加上一些附加参数来控制decode的更多行为:
- -f如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。
- -o指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。
- -s不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
- -r不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)。
常用用法就这么多了,那么上述命令的执行结果如下图所示:

3、错误分析
当然即使你在和我执行一模一样的操作,也有可能会在这里反编译失败,比如说会报如下错误:



如果你觉得对你有用,那就点个赞支持一下吧~