反编译方法: 前提:操做系统需配置了jdk 1、找到apk中的class.dex: 把apk文件更名为.zip,而后解压缩其中的class.dex文件,它就是java文件编译再经过dx工具打包成的。 2、获得java源文件 工具准备: 一、把dex文件反编译为jar文件的工具。(dex2jar) http://code.google.com/p/dex2jar/downloads/list 二、把jar反编译为java的工具。(JD-GUI) http://java.decompiler.free.fr/?q=jdgui 反编译步骤: 1.在cmd下进入dex2jar.bat所在路径,而后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称,好比:个人dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径下, classes.dex在D:\Android下,因此: 你进入dex2jar.bat路径下后,输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。 2.用rar解压出jar文件中的class文件,而后用jad或DJ Java Decompiler反编译工具将.class文件反编译成.java文件 三、运行JD-GUI工具(它是绿色无须安装的),打开上面的jar文件,在File下有个Save JAR Source,它能够生成src源代码。 3、上面操做只能获得class文件,下面利用Google提供的apktool获得xml文件 1. 下载apktool,能够去Google的官方下载,地址:http://code.google.com/p/android-apktool/得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压apktool-install-windows.zip到任意文件夹,而后解压apktool-1.0.0.tar.bz2获得apktool.jar,放到apktool-install-windows解压后的目录下。 2. Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看。会列出一些帮助的话就成功了(解释d为加压 第一个路径为你的apk所在的位置。第二个是要输出的位置) apktool d e:\a.apk(apk路径)ABC(文件夹名称) 这时当前目录下生成 ABC文件夹,里面就是反编译出的东西了 常见问题: 一,找不到R文件时: 通常放在res\values\public.xml里 好比,反编译的类里setContentView(2130903174); 2130903174是十进制的,转化成十六进制就可以在public.xml中找到文件名了。 我的推荐使用:WIN7中点击“开始”--”程序“--“附件”--“计算器”,按 “查看”再选“程序员”,就能够方便的进行各进制的转换了(如:你要转换10进制90000000为16进制,点“十进制”,输入90000000,再点一下“16进制”,就会看到55D4A80,转换就完成了。其余同理)。 二,链接不上ADB时: 报错信息: ADB server didn't ACK * failed to start daemon * ADB server didn't ACK * failed to start daemon * 在cmd中进入adb的路径,输入命令:adb kill-server,执行完毕后再输入命令adb start-server,重启eclipse便可 -------------------------------------------------------------------------- 上述方法无效时: 当输入adb start-server不可以重启adb时,反而抛出以下信息: adb server is out of date. ADB server didn't ACK * failed to start daemon * 出现这种问题的缘由有多是adb须要的端口被占用。 在cmd中查看adb须要的端口,输入命令:adb nodaemon server,显示结果:can't bind "tcp:5037" 下面就找找5037端口是被哪一个进程占用了,输入命令:netstat -ano | findstr "5037",显示结果: TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 5892 TCP 127.0.0.1:5037 127.0.0.1:1218 TIME_WAIT 0 TCP 127.0.0.1:5037 127.0.0.1:1220 TIME_WAIT 0 因此须要关闭PID为5892的进程。命令tasklist能够查看全部的进程,找到关闭便可。 另外,根据以上方法发占用5892端口的任务是db_adb.exe,这个是金山毒霸链接手机杀毒的任务,在任务管理器中没有办法关闭,在右下角的任务列表中右键单击金山毒霸的图标,关闭手机连接,就可以kill这个任务了。