APK文件反编译回安卓工程文件的方法

前言:

昨天遇到了安卓端一直连接不上PC的情况,无论使用了什么方法都没法解决,最后使出了杀手——重装系统,终于解决了。但是也带来了一个问题,重装系统的时候都太心急了,忘了备份工程了。所有的工程文件全部丢失(Eclipse的工程文件默认都会放在C盘)。

好在再我的手机上安装了自己写的几个apk。于是准备反编译回工程文件。

下面就进入主题:

第一步、把apk文件拿回到电脑当中。

这个很简单,电脑连接手机进行USB调试,使用豌豆荚之类的工具直接可以把文件发送到电脑上。

第二步、把apk文件的后缀名改成rar,然后解压之后就发现了工程文件目录结构。

如test.apk改成text.rar。然后解压,位置任意(我这里解压到了D盘apk目录下)。

目录结构如下:


第三步、目录结构

这里的xml文件以及res中的文件都是二进制的,双击进入之后其实都是乱码。

每个资源所包含的内容如下。

res\  存放资源文件的目录
AndroidManifest.xml  程序全局配置文件
classes.dex  Dalvik字节码
resources.arsc  编译后的二进制资源文件

第四步、处理xml文件。

这时就用到了一个android4me的AXMLPrinter2工具。
下载地址:http://code.google.com/p/android4me/downloads/detail?name=AXMLPrinter2.jar&can=2&q=
点击下载

然后我们把文件解析出来,首先cmd进入命令界面,然后进入到该jar包的目录。我的结构为:




我输入的命令为:
java -jar AXMLpRinter2.jar RFIDDAQ\AndroidManifest.xml(查看解析之后的xml文件)
java -jar AXMLPrinter2.jar RFIDDAQ\AndroidManifest.xml > RFIDDAQ\main.xml(将解析后的文件方法main.xml文件里)

双击打开main.xml文件你就发现xml文件已经可以正常查看了
第五步、获取java代码

这里需要处理的就是上面图中的classes.dex文件。
首先需要下载一个dex2jar,
下载连接:http://101.96.10.75/downloads.sourceforge.net/project/dex2jar/dex2jar-2.0.zip?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdex2jar%2Ffiles%2Flatest%2Fdownload&ts=1470824138&use_mirror=jaist点击下载
下载后把zip文件解压:
结构目录如下:

cmd进入到该目录下:
使用命令:dex2jar.bat classes.dex//注意这里所在的是dex2jar的目录,我们应该填写classes.dex文件的绝对路径

D:\dex2jar>dex2jar d:\apk\RFIDDAQ\classes.dex

这样的话RFIDDAQ目录下就多了一个jar文件:


第六步、处理jar文件,获取源代码。
这里同样需要用到一个工具JDGUI
http://java.decompiler.free.fr/?q=jdgui下载地址
下载之后解压之后显示目录如下:

然后双击exe文件运行,最后

最后提醒一下:
反编译是利用一定的规律来对其所实现的功能进行一定的反写,其并不知道原作者们当初制定的规则,
就像我们同样是for循环遍历,就是for(int i=0;i<map.size;i++)和for(Object o:map.keySet())两种一样。反编译并不知道我们使用的是哪一种,但是他能知道我们使用了这个遍历。
就因为这原因,所以反编译出来的源码和我们当初写的源码其实是有很多不同的,而且反编译出来的源码看起来会相当的累,毕竟这是程序生成的代码,程序和人思考的方式是不一样的。
注:本文参考http://blog.csdn.net/hualingxin/article/details/7591546编写。
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失落夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值