Android开发之Apk反编译
在做Android开发中,有时候会研究下别人开发的应用采用了什么第三方库,或想知道它是怎么实现的,或者想从它那边抠资源出来等等,这就需要对apk进行反编译了。
使用到的工具:
- apktool: 反编译工具,通过反编译APK中XML文件,直接可以查看。
- dex2jar: 将apk中的classes.dex转化成Jar文件。
- JD-GUI:反编译工具,可以直接查看Jar包的源代码。
- APK反编译工具包: 集合了apktool,直接右键即可对apk,dex进行反编译
- ClassyShark: 一款可以查看Android可执行文件的浏览工具,支持.dex, .aar, .so, .apk, .jar, .class, .xml 等文件格式,分析里面的内容包括classes.dex文件,包、方法数量、类、字符串、使用的NativeLibrary等.
下载地址:
- dex2jar:http://code.google.com/p/innlab/downloads/lis
- JD-GUI:http://code.google.com/p/innlab/downloads/lis
- APK反编译工具包:http://code.google.com/p/innlab/downloads/lis
- apktool:https://bitbucket.org/iBotPeaches/apktool/downloads (目前最新的是apktool_2.1.0.jar)
- ClassyShark: https://github.com/google/android-classyshark (下载release包)
我的网盘地址:
http://pan.baidu.com/s/1qYMRl7I 密码:pg54
反编译步骤:
-
解压APK包
apk文件是一种常见的zip, 后缀重命名后即可解压。得到xml和classes.dex文件,这时候就可以获取到一些图片资源文件和assets资源了。
解压截图:
-
反编译dex文件
要查看java源码,就要对这个classes.dex进行反编译了。
首先,先用dex2jar把dex转为普通的jar包。
dex2jar.bat classes.dex
此时会生成classes_dex2jar.jar包。
-
反编译jar包
这时候就可以使用JD_GUI进行查看jar包里面的代码了,JD_GUI也可以对单个class文件反编译。
Paste_Image.png -
反编译XML文件
当然你解压apk后,得到很多的xml文件,但是你查看你会发现是乱码,这时候你需要使用apktool。
方法一:
直接使用apktool进行反编译
apktool d xxx.apk
会生成xxx目录,里面res的xml文件可以正常查看。
方法二:
安装APK反编译工具包,然后右键进行反编译。
(要先保证apk打开方式是apk_反编译.cmd)
Paste_Image.png
注意:反编译是出现错误
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
这时候,你需要把APK反编译工具包里面的apktool.jar包使用最新的。
修改apk_反编译.cmd
java -jar %~dp0apktool.jar d -s "%~1"
注意:文件的路径中最好不要出现中文!
- ClassyShark反编译
打开界面
java -jar ClassyShark.jar
Paste_Image.png
点击左上角按钮,打开文件。
Paste_Image.pngMethods count里面即可看到引用了哪些包,方法数。
通过包来判断使用了哪些开源包。
参考地址:
http://jingyan.baidu.com/article/dca1fa6fbe140ef1a4405212.html
https://code.google.com/archive/p/innlab/downloads
http://www.tuicool.com/articles/EjuQfar
http://www.2cto.com/kf/201602/488734.html
http://ibotpeaches.github.io/Apktool/documentation/