我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
当前回答
我发现以下是最简单的方法:
将app.apk重命名为app.zip(将扩展名从apk更改为zip)将zip文件解压缩到文件夹中使用JADX工具读取classes.dex文件中的源代码。
其他回答
对于java文件
使用此处给出的公认答案
对于XML文件
你不必使用公认答案中给出的方法,因为我觉得它很复杂。
我所做的是将APK文件转换为ZIP并解压缩。解压缩后,我得到了一个名为res的文件夹:
我刚打开它,发现了很多文件夹。对于布局,您需要找到名为layout的文件夹,而不是像layout land之类的其他文件夹。同样的事情也可以用其他资源来完成,比如绘图、菜单等。。。
注意:会有很多随机文件不是由您创建的。你可以找到自己制作的文件,然后使用它们!
希望这能帮助到其他人!
最简单的方法:使用在线工具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:
这不是任何步骤,只需将两个文件夹(两个新文件夹)的内容复制到单个文件夹
享受源代码!
有几种方法可以做到这一点:
使用Android Studio 3.0中的“配置文件或调试APK”功能。它允许您在Android Studio中打开和探索APK。类被反编译为smali。如果没有源代码(android studio 3.0 canary 9),资源不会被提取,像“转到定义”、“查找所有引用”和调试都无法工作。一些额外的smali功能可能适用于smalidea。使用jadx。Jadx将给定APK中的代码反编译为java源文件。使用apktool。Apktool是一个命令行工具,它提取资源并将代码反编译为给定apk的smali。您也可以使用apktool重新编译。下面是一个实际的例子:$apktool d测试.apk一: 在test.apk上使用Apktool 2.2.4一: 正在加载资源表。。。一: 正在使用资源解码AndroidManifest.xml。。。一: 正在从文件加载资源表:1.apk一: 常规清单包。。。一: 正在解码文件资源。。。一: 正在解码值*/*XML。。。一: Baksmaling类dex。。。一: 正在复制资产和库。。。一: 正在复制未知文件。。。一: 正在复制原始文件。。。$apktool b测试一: 在测试中使用Apktool 2.2.4一: 正在检查源是否已更改。。。一: 正在将smali文件夹粉碎为classes.dex。。。一: 正在检查资源是否已更改。。。一: 正在生成资源。。。一: 正在生成apk文件。。。一: 正在复制未知文件/dir。。。
你可以试试DexPatcher。它甚至与Android Studio集成。它在内部使用Apktool和Dex2Jar。您也可以独立使用这些工具。Apktool反编译apk,并提取.dex文件,可以使用Dex2Jar将其进一步转换为jar。Jar可以使用JD-GUI反编译。在该工具的帮助下,您可以看到Java代码。尽管不能保证反编译代码与实际代码的相似性。市场上有一些高级的代码混淆工具,它们会将代码弄乱,从而使反编译/理解变得困难。例如Proguard
有一个应用程序可以实现这一点,通常只需点击几下即可完成。https://github.com/Nuvolect/DeepDive-Android
选择应用程序,在“已安装的应用程序”下选择您的应用程序。如果不是在那里你可以加载APK。选择“提取APK”选择“解压缩APK”选择“使用Jadx分解”。这可能需要几秒钟或几分钟,具体取决于取决于设备的速度
之后,您可以浏览源代码,使用elFinder将其下载到另一台计算机,或使用Lucene进行搜索。
除了Jadx,它还有CFR和Fernflower反编译器。