我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。

有没有办法从这个APK文件中提取我的源代码?


当前回答

单击解决方案(仅限Windows)

在阅读了这篇loooooonnnnngggg帖子后,我决定创建一个自动化的过程,只需单击一下即可反编译APK,

我决定在github上分享:https://github.com/shaybc/apk-decompiler

simply unzip,
copy the apk you want to decompile into "apk-source" folder
and run "go.bat"
find the result in the: "apk-output" folder

就这样,享受吧

其他回答

使用此工具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文件进行反向工程。

最近,我在我的网站上整理了47个最好的APK反编译器的最终列表。我把它们分成4个不同的部分。

开源APK分解器在线APK分解器适用于Windows、Mac或Linux的APK解压缩程序APK分解器应用程序

我希望这本书对你有帮助。

链接:https://www.edopedia.com/blog/best-apk-decompilers/

最简单的方法:使用在线工具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:

这不是任何步骤,只需将两个文件夹(两个新文件夹)的内容复制到单个文件夹

享受源代码!

对于java文件


使用此处给出的公认答案

对于XML文件


你不必使用公认答案中给出的方法,因为我觉得它很复杂。

我所做的是将APK文件转换为ZIP并解压缩。解压缩后,我得到了一个名为res的文件夹:

我刚打开它,发现了很多文件夹。对于布局,您需要找到名为layout的文件夹,而不是像layout land之类的其他文件夹。同样的事情也可以用其他资源来完成,比如绘图、菜单等。。。

注意:会有很多随机文件不是由您创建的。你可以找到自己制作的文件,然后使用它们!

希望这能帮助到其他人!