Android开发之Apk反编译

在做Android开发中,有时候会研究下别人开发的应用采用了什么第三方库,或想知道它是怎么实现的,或者想从它那边抠资源出来等等,这就需要对apk进行反编译了。

使用到的工具:

  1. apktool: 反编译工具,通过反编译APK中XML文件,直接可以查看。
  2. dex2jar: 将apk中的classes.dex转化成Jar文件。
  3. JD-GUI:反编译工具,可以直接查看Jar包的源代码。
  4. APK反编译工具包: 集合了apktool,直接右键即可对apk,dex进行反编译
  5. ClassyShark: 一款可以查看Android可执行文件的浏览工具,支持.dex, .aar, .so, .apk, .jar, .class, .xml 等文件格式,分析里面的内容包括classes.dex文件,包、方法数量、类、字符串、使用的NativeLibrary等.

下载地址:

  1. dex2jar:http://code.google.com/p/innlab/downloads/lis
  2. JD-GUI:http://code.google.com/p/innlab/downloads/lis
  3. APK反编译工具包:http://code.google.com/p/innlab/downloads/lis
  4. apktool:https://bitbucket.org/iBotPeaches/apktool/downloads (目前最新的是apktool_2.1.0.jar)
  5. ClassyShark: https://github.com/google/android-classyshark (下载release包)

我的网盘地址:
http://pan.baidu.com/s/1qYMRl7I 密码:pg54

反编译步骤:

  1. 解压APK包
    apk文件是一种常见的zip, 后缀重命名后即可解压。得到xml和classes.dex文件,这时候就可以获取到一些图片资源文件和assets资源了。
    解压截图:


    Android开发之Apk反编译_第1张图片
  2. 反编译dex文件
    要查看java源码,就要对这个classes.dex进行反编译了。
    首先,先用dex2jar把dex转为普通的jar包。

dex2jar.bat classes.dex

此时会生成classes_dex2jar.jar包。

  1. 反编译jar包
    这时候就可以使用JD_GUI进行查看jar包里面的代码了,JD_GUI也可以对单个class文件反编译。


    Android开发之Apk反编译_第2张图片
    Paste_Image.png
  2. 反编译XML文件
    当然你解压apk后,得到很多的xml文件,但是你查看你会发现是乱码,这时候你需要使用apktool。
    方法一:
    直接使用apktool进行反编译

apktool d xxx.apk

会生成xxx目录,里面res的xml文件可以正常查看。
方法二:
安装APK反编译工具包,然后右键进行反编译。
(要先保证apk打开方式是apk_反编译.cmd)

Android开发之Apk反编译_第3张图片
Paste_Image.png

Android开发之Apk反编译_第4张图片
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"
注意:文件的路径中最好不要出现中文!

  1. ClassyShark反编译
    打开界面
java -jar ClassyShark.jar
Android开发之Apk反编译_第5张图片
Paste_Image.png

点击左上角按钮,打开文件。

Android开发之Apk反编译_第6张图片
Paste_Image.png

Methods 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/

你可能感兴趣的:(Android开发之Apk反编译)