我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
当前回答
使用此工具http://www.javadecompilers.com/
但最近,一股新的反编译器浪潮进入了市场:Procyon、CFR、JD、Fernflower、Krakatau、Candle。
以下是本网站提供的反编译器列表:
CFR-免费,没有可用的源代码,http://www.benf.org/other/cfr/作者:Lee Benfield
非常好地更新了反编译器!CFR能够反编译现代Java特性-Java 9模块、Java 8 lambda、Java 7字符串开关等。它甚至可以将类文件从其他JVM语言转换回java!
京东仅供非商业用途,http://jd.benow.ca/作者:Emmanuel Dupuy
2015年更新。有自己的可视化界面和Eclipse和IntelliJ插件。用C++编写,速度非常快。支持Java 5。
Procyon公司开源,https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler作者:Mike Strobel
Fernflower公司-开源,https://github.com/fesh0r/fernflower作者:Egor Ushakov
2015年更新。非常有前途的分析Java反编译器,现在已成为IntelliJ 14不可或缺的一部分。(https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler)支持Java版本6(注释、泛型、枚举)
JAD-这里只出于历史原因。免费,没有可用的源代码,jad下载镜像作者:帕维尔·库兹涅佐夫
其他回答
步骤1:创建一个新文件夹并复制您要解码的.apk文件。
现在,将这个.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存它。现在,您可以访问classes.dex文件等。在这个阶段,您可以看到可绘制文件,但不能看到xml和java文件,因此请继续。
第2步:现在在同一文件夹(或NEW folder)中提取这个.zip文件。
下载https://github.com/pxb1988/dex2jar/releases/tag/2.0:dex2jar-2.0
现在打开命令提示符并将目录更改为该文件夹(或NEW folder)。然后执行:d2j-dex2jar.bat类.dex
下载此反编译器http://java-decompiler.github.io/反编译classes-dex2jar.jar
步骤3:现在打开另一个新文件夹
放入要解码的.apk文件
下载apktool AND apktool的最新版本(https://ibotpeaches.github.io/Apktool/install/)安装窗口(两者都可以从同一链接下载),并将它们放在同一文件夹中
打开命令窗口
现在运行命令,如apktool if framework-res.apk(如果没有,请在此处获取),然后
apktool d myApp.apk(其中myApp.apk表示要解码的文件名)
现在,您在该文件夹中获得了一个文件文件夹,可以轻松地读取apk的xml文件。
将两个文件夹的内容复制到单个文件夹
完成!
Android应用程序的APK文件可以使用以下任何方法反编译:
APKTool(需要在电脑上安装Java)APKTool M(Android应用程序)JavaDecompilers(在线工具包括APKTool实用程序)
资料来源:https://droidmaze.com/how-to-extract-code-from-apk/
市场上有很多应用程序和方法可以将apk文件反编译为java类,但是如果应用程序是用ProGuard规则编译的,那么你就遇到了很大的麻烦,因为这个规则会将所有的dex文件缩成一个小字符的名称,然后你就无法追溯实现。看见https://developer.android.com/studio/build/shrink-code用于模式澄清。
快乐编码。。。
apktool是你能尝试的最好的方法。我用它保存了一些xml,但老实说,我不知道它如何与.java代码一起工作。
我建议您拥有一个代码库,即使您是唯一的程序员。我一直在为自己的项目使用Project Locker。它为您提供免费svn和git repo。
你可以试试DexPatcher。它甚至与Android Studio集成。它在内部使用Apktool和Dex2Jar。您也可以独立使用这些工具。Apktool反编译apk,并提取.dex文件,可以使用Dex2Jar将其进一步转换为jar。Jar可以使用JD-GUI反编译。在该工具的帮助下,您可以看到Java代码。尽管不能保证反编译代码与实际代码的相似性。市场上有一些高级的代码混淆工具,它们会将代码弄乱,从而使反编译/理解变得困难。例如Proguard