反编译软件
首先是很多人在用的三个:
这三个通常是配合使用的,下载后只要解压即可使用。
然后还有一些更为易用一些,可以一步到位的软件:
- android-classyshark
- jadx (推荐)
- APK Analyzer (Android Studio 2.2 以上版本自带插件 - 推荐)
我建议可以直接用上 jadx 和 APK Analyzer 这两个插件,其他的了解一下就可以了,因为很多时候反编译的帮助并没有想象的大,混淆过的代码如果不深入研究也很难看出所以然。
软件的实践
- Apktool
首先将下载的压缩包解压,然后将需要反编译的 Apk 放到解压后的文件夹内,

在 cmd 转到该文件夹目录下,或者在文件夹下 shift + 右键选择在此处打开命令行窗口
输入命令:
apktool d <apkName>.apk

这就生成了一个以 apk 名字命名的文件夹 base
里面就有该 apk 包含的资源文件:

- dex2jar + jd-gui 查看源码
先用 dex2jar 将 apk 转换成 jar 文件。
首先,将 apk 的后缀改成 zip 或者 rar,然后用压缩软件打开:

将 classes.dex 文件放到 dex2jar 根目录下。
(其实放不放都行,不放到根目录下需要在文件名前面加上路径):

在该目录下打开 cmd 输入命令:
d2j-dex2jar classes.dex

这样就生成了文件 classes-dex2jar
。
然后打开 jd-gui ,将 jar 文件拖动到窗口即可:

这里的这个 apk 是未混淆的 debug 版本,所以文件被完整的反编译出来了,然而正式版的 apk 被混淆后,即使反编译出了 java 文件,它的可读性也是非常差的。
- android-classyshark
GitHub 上的开源软件,使用是真的简单,双击下载下来的 jar 文件就会弹出软件的窗口,把 apk 拖到窗口就完成了上面的操作:

但是这个反编译出来的源码很少,基本看不到相应的逻辑。所以还不是特别的好用。然后我就继续找,找到了 jadx,应该就是这一篇的 mvp 了。
- jadx
同样是 GitHub 上的,可以在这里 直接下载 zip 文件,解压后找到\jadx-0.6.1\bin
中的 jadx-gui 文件:

点击打开就是 jadx 的图形界面了,然后把 apk 拖到窗口:

和 dex2jar + jd-gui 反编译出来的文件对比差不多,但是易用很多。
- APK Analyzer
现在 Android 应该绝大大大部分都是在 Android Studio 上开发了,所以自带的反编译插件也该一提。
可以在 Build -> Analyzer APK...
打开:

然后选择路径即可。
也可以直接将 apk 拖到 AS 的窗口直接打开:

可以查看资源文件,也可以查看源码,可以说也是很好用的插件,只是面对未混淆过的 apk ,反编译出来的源码可读性也不高。
后记
其实这也是最简单的反编译实践,和一开始想的不太一样。比如一开始我可能是对市面上的一些 APP 某些功能感兴趣,在不知道怎么实现的清空下希望能通过反编译查看源码来学习。
但上面说过了这并非易事,反而在查资料的时候发现反编译和查看资源文件的用处可大了,而不仅是查看源码而已。
比如为 APK 瘦身的时候,可以在 APK Analyzer 查看源码和各文件的大小、方法数和引用的库等信息。
网友评论