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

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


当前回答

最简单的方法是使用Apk OneClick分解器。这是一个用于反编译和反汇编APK(android软件包)的工具包。

特征

所有功能都集成到Windows的右键单击菜单中。将APK类分解为Java源代码。将APK分解为smali代码并解码其资源。通过右键单击将APK安装到手机。编辑smali代码和/或资源后重新编译APK。重新编译期间:优化png图像签署apks优化

要求

必须安装Java Runtime Environment(JRE)。

你可以从这个链接下载Apk OneClick解压程序

好好享受吧。

其他回答

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

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

享受源代码!

apktool是你能尝试的最好的方法。我用它保存了一些xml,但老实说,我不知道它如何与.java代码一起工作。

我建议您拥有一个代码库,即使您是唯一的程序员。我一直在为自己的项目使用Project Locker。它为您提供免费svn和git repo。

你可以试试DexPatcher。它甚至与Android Studio集成。它在内部使用Apktool和Dex2Jar。您也可以独立使用这些工具。Apktool反编译apk,并提取.dex文件,可以使用Dex2Jar将其进一步转换为jar。Jar可以使用JD-GUI反编译。在该工具的帮助下,您可以看到Java代码。尽管不能保证反编译代码与实际代码的相似性。市场上有一些高级的代码混淆工具,它们会将代码弄乱,从而使反编译/理解变得困难。例如Proguard

单击解决方案(仅限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

就这样,享受吧

我发现以下是最简单的方法:

将app.apk重命名为app.zip(将扩展名从apk更改为zip)将zip文件解压缩到文件夹中使用JADX工具读取classes.dex文件中的源代码。