为什么需要APK反编译?
是因为我们在平时开发APK的过程中,可能会遇到一些功能不知如何实现,但是有的软件已经实现了该功能,但是没有开源。这个时候,通过APK的反编译,我们就能从代码层面去看一下别人是如何实现这部分功能的。
俗话说“工欲善其事,必先利其器”,所以想反编译APK,我们需要下面两个强大的工具(ps:这两个工具均可以跨平台):
接下来,我们就要使用上面的两个工具进行apk的反编译了。
首先,我们需要使用unzip解压apk。具体命令如下:
unzip test.apk -d /tmp/test
接下来,使用这个神器将apk中的classes.dex文件转换为jar文件。具体命令如下:
bash -x d2j-dex2jar.sh classes.dex
注意,需要给d2j-dex2jar.sh和d2j_invoke.sh两个脚本可执行权限。
像我的Ubuntu 13.10的64位版本使用jd-gui的时候,可能会遇到如下的错误:
./jd-gui: error while loading shared libraries:...
主要是缺少32位的库,如下安装命令可以解决这些问题:
sudo apt-get install libgtk2.0-0:i386 libxxf86vm1:i386 libsm6:i386 lib32stdc++6
然后,直接用jd-gui打开刚才dex2jar.sh生成的classes-dex2jar.jar即可看到反编译的源码。如下图:
但是,如上图所示,目前基本大部分市场发布的APK都会做代码混淆。
原文地址:http://blog.csdn.net/wzy_1988/article/details/45852809