前言:

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

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

下面就进入主题:

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

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

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

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

目录结构如下:

android将excel转图片 安卓手机如何转化exe文件_反编译

第三步、目录结构

这里的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包的目录。我的结构为:


android将excel转图片 安卓手机如何转化exe文件_反编译_02






我输入的命令为:

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文件解压:


结构目录如下:


android将excel转图片 安卓手机如何转化exe文件_jar_03


cmd进入到该目录下:


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



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

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

android将excel转图片 安卓手机如何转化exe文件_jar_04


第六步、处理jar文件,获取源代码。


这里同样需要用到一个工具JDGUI


http://java.decompiler.free.fr/?q=jdgui下载地址


下载之后解压之后显示目录如下:


android将excel转图片 安卓手机如何转化exe文件_jar_05


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


android将excel转图片 安卓手机如何转化exe文件_xml文件_06


最后提醒一下:


反编译是利用一定的规律来对其所实现的功能进行一定的反写,其并不知道原作者们当初制定的规则,


就像我们同样是for循环遍历,就是for(int i=0;i<map.size;i++)和for(Object o:map.keySet())两种一样。反编译并不知道我们使用的是哪一种,但是他能知道我们使用了这个遍历。


就因为这原因,所以反编译出来的源码和我们当初写的源码其实是有很多不同的,而且反编译出来的源码看起来会相当的累,毕竟这是程序生成的代码,程序和人思考的方式是不一样的。


注:本文参考编写。