我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
当前回答
我个人建议Show Java Android App获取源代码。您可以从play商店或此处下载
其他回答
使用此工具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下载镜像作者:帕维尔·库兹涅佐夫
这两篇文章描述了如何结合使用apktool和dex2jar来获取APK文件并创建一个可以构建和运行它的Eclipse项目。
http://blog.inyourbits.com/2012/11/extending-existing-android-applications.htmlhttp://blog.inyourbits.com/2012/12/extending-existing-android-applications.html
基本上你:
使用apktool从apk中获取资源文件使用dex2jar获取一个jar文件,其中包含Eclipse喜欢的格式的类。创建一个Eclipse项目,指向资源文件和新的jar文件使用zip实用程序打开jar文件并删除现有资源使用JDGui打开jar文件以查看源代码从JDGui中获取所需的任何源代码,将其粘贴到Eclipse中的一个类中并进行修改从jar文件中删除该类(这样就不会多次定义相同的类)运行它。
apktool是最好的选择。在线apktool服务也存在:http://www.javadecompilers.com/apktool
显然,由于服务的“在线性质”,存在一些限制:您可以提取和研究资产和清单文件,但目前不可能重新编译应用程序。
尽管如此,这是一种“打开”android应用程序的简单方法。
有一个应用程序可以实现这一点,通常只需点击几下即可完成。https://github.com/Nuvolect/DeepDive-Android
选择应用程序,在“已安装的应用程序”下选择您的应用程序。如果不是在那里你可以加载APK。选择“提取APK”选择“解压缩APK”选择“使用Jadx分解”。这可能需要几秒钟或几分钟,具体取决于取决于设备的速度
之后,您可以浏览源代码,使用elFinder将其下载到另一台计算机,或使用Lucene进行搜索。
除了Jadx,它还有CFR和Fernflower反编译器。
最简单的方法:使用在线工具Decompiler,上传apk并获取源代码。
解码.apk文件的过程,分步方法:
步骤1:
创建一个新文件夹并复制您要解码的.apk文件。现在将.apk文件的扩展名重命名为.zip(从filename.apk重命名为filename.zip)并保存。现在您可以访问classes.dex文件。在这个阶段,您可以看到可绘制文件,但不能看到.xml和.java文件。
第2步:
现在在同一文件夹或新文件夹中提取这个.zip文件。下载dex2jar(不要下载代码,单击右侧的releases按钮,然后下载名为dex2jar-X.X.zip的文件)并将其解压缩到同一文件夹或新文件夹。将classes.dex文件移动到dex2jar文件夹中。现在打开命令提示符并将目录更改为该文件夹。然后编写d2j-dex2jar classes.dex(适用于Mac或Ubuntu write./d2j-dex2-jar.sh classes.dex)并按enter键。现在,classes.dex.dex2jar文件位于同一文件夹中。下载java反编译程序,右键单击jdgui,单击Open File,然后从该文件夹中打开classes.dex.dex2jar文件:现在您得到了类文件。按src名称保存所有这些类文件(在jdgui中,单击File->SaveAllSources)。在这个阶段,您得到了Java代码,但.xml文件仍然无法读取。
步骤3:
现在打开另一个新文件夹
放入要解码的.apk文件下载apktool和apktool安装窗口的最新版本(两者都可以从同一链接下载),并将它们放在同一文件夹中打开命令提示符现在,运行命令apktool if framework-res.apk(如果没有,请在此处获取),然后apktool d myApp.apk(myApp.apk表示要解码的文件名)
现在,您在该文件夹中获得了一个文件文件夹,可以轻松地读取.xml文件。
步骤4:
这不是任何步骤,只需将两个文件夹(两个新文件夹)的内容复制到单个文件夹
享受源代码!