我的笔记本电脑上的硬盘驱动器崩溃了,我丢失了过去两个月一直在处理的应用程序的所有源代码。我所拥有的是从我发送给朋友时存储在我的电子邮件中的 APK 文件。
有没有办法从这个 APK 文件中提取我的源代码?
简单方法:使用在线工具http://www.javadecompilers.com/apk ,上传 apk 并获取源代码。
解码. apk 文件的步骤,循序渐进的方法:
创建一个新文件夹并复制要解码的. apk 文件。
现在将此. apk 文件的扩展名重命名为. zip(例如,从 filename.apk 重命名为 filename.zip)并保存。现在你可以访问 classes.dex 文件等了。在这个阶段你可以看到 drawables 而不是 xml 和 java 文件,所以继续。
现在将此. zip 文件解压缩到同一文件夹(或 NEW FOLDER)中。
下载 dex2jar并将其解压缩到同一文件夹(或新文件夹)。
将 classes.dex 文件移动到 dex2jar 文件夹中。
现在打开命令提示符并将目录更改为该文件夹(或 NEW FOLDER)。然后编写d2j-dex2jar classes.dex
(对于 mac 终端或 ubuntu 写./d2j-dex2jar.sh classes.dex
)并按 Enter 键。您现在在同一文件夹中有 classes.dex.dex2jar 文件。
下载 java 反编译器 ,双击 jd-gui,单击打开文件,然后打开该文件夹中的 classes.dex.dex2jar 文件:现在获取类文件。
通过 src 名称保存所有这些类文件(在 jd-gui 中,单击文件 - > 保存所有源)。在这个阶段你得到 java 源代码,但. xml 文件仍然不可读,所以继续。
现在打开另一个新文件夹
放入要解码的. apk 文件
下载最新版本的apktool 和 apktool 安装窗口 (两者都可以从同一个链接下载)并将它们放在同一个文件夹中
打开命令窗口
现在运行像apktool if framework-res.apk
命令apktool if framework-res.apk
(如果你没有它在这里得到它 )和下一个
apktool d myApp.apk
(其中 myApp.apk 表示要解码的文件名)
现在你在该文件夹中获得了一个文件夹,可以轻松读取 apk 的 xml 文件。
这不是任何步骤只是将两个文件夹的内容(在这种情况下都是新文件夹)复制到单个文件夹
并享受源代码......
这是另一种描述 - 以防万一有人卡在上面的描述。按照步骤:
apktool.bat
(或apktool
for Linux)和apktool_<version>.jar
apktool.jar
并将两个文件放在同一个文件夹中cmd.exe
)并切换到该文件夹; 验证是否已安装 Java 环境(对于 Linux,请检查有关所需库的说明) apktool decode [apk file]
中间结果 :资源文件, AndroidManifest.xml
中级结果 : classes.dex
dex2jar-0.0.9.15.zip
classes.dex
拖放到dex2jar.bat
(或在 DOS 框中输入<path_to>\dex2jar.bat classes.dex
; 对于 Linux 使用dex2jar.sh
) 中间结果 : classes_dex2jar.jar
classes_dex2jar.jar
(可能是可选的,具体取决于使用的反编译器) 结果 :源代码
注意:不允许反编译第三方包; 本指南仅用于从 APK 文件中恢复个人源代码; 最后,生成的代码很可能会被混淆
虽然您可能能够反编译您的APK
文件,但您可能会遇到一个大问题:
它不会返回你写的代码。相反,它将返回编译器内联的任何内容,变量给定随机名称,以及给定随机名称的函数。尝试将其反编译并恢复到您拥有的代码中可能需要更多的时间,而不是重新开始。
可悲的是,像这样的事情已经扼杀了很多项目。
对于未来,我强烈建议学习版本控制系统,如CVS , SVN和git等。
以及如何备份它。