有没有一种方法可以从APK文件中获取源代码?
有没有一种方法可以从APK文件中获取源代码?
我的笔记本电脑上的硬盘刚刚崩溃了,我失去了我过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发送给朋友的电子邮件中。
有办法从这个APK文件中提取我的源代码吗?
这是一个备用描述,以防万一有人对上面的描述感到困惑。按照以下步骤:
- 从http://ibotpeaches.github.io/Apktool/install/下载
apktool.bat
(或apktool
适用于Linux)和apktool_
.jar - 将上面的jar文件重命名为
apktool.jar
,并将这两个文件放在同一个文件夹中 - 打开命令提示符(
cmd.exe
)并切换到该文件夹;验证已安装Java环境(对于Linux,请查看有关所需库的说明) - 开始:
apktool decode [apk 文件]
中间结果:资源文件,AndroidManifest.xml
- 使用您选择的解包程序解压APK文件
中间结果:classes.dex
- 从http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=下载并提取
dex2jar-0.0.9.15.zip
- 将
classes.dex
拖放到dex2jar.bat
上(或在DOS窗口中输入
;对于Linux,请使用\dex2jar.bat classes.dex dex2jar.sh
)
中间结果:classes_dex2jar.jar
- 解压
classes_dex2jar.jar
(根据所使用的反编译器而可能是可选的) - 反编译您的类文件(例如使用JD-GUI或DJ Decompiler)
结果:源代码
注意:不允许反编译第三方程序包;本指南仅旨在从APK文件中恢复个人源代码;最终生成的代码很可能是混淆的
最简单的方法是使用在线工具Decompiler,上传apk文件,获得源代码。
解码.apk文件的步骤:
第一步:
-
创建一个新文件夹并将要解码的.apk文件复制到其中。
-
将这个.apk文件扩展名改为.zip(从filename.apk改为filename.zip),并保存。现在您可以访问classes.dex文件。此时,您能看到的是可绘制的文件,但看不到.xml和.java文件。
第二步:
-
现在将这个.zip文件解压缩到同一个文件夹或一个新文件夹中。
-
下载dex2jar(不要下载代码,点击右侧的“Releases”按钮,然后下载名为
dex2jar-X.X.zip的文件)并将其解压缩到同一个文件夹或新文件夹中。 -
将classes.dex文件移动到dex2jar文件夹中。
-
现在打开命令提示符并将目录更改为该文件夹。然后写入
d2j-dex2jar classes.dex
(对于Mac或Ubuntu,请写入./d2j-dex2jar.sh classes.dex
),然后按Enter键。现在,您在同一个文件夹中拥有classes.dex.dex2jar文件。 -
下载java decompiler,右键单击jd-gui,点击“打开文件”,并从该文件夹打开classes.dex.dex2jar文件:现在您获得类文件。
-
通过src名称保存所有这些类文件(在jd-gui中,单击“文件”->“保存所有源文件”)。此时,您获得了Java代码,但.xml文件仍然无法读取。
步骤 3:
现在打开另一个新文件夹
-
把你想要解密的.apk文件放进去
-
下载最新版本的 apktool 和 apktool 安装程序(两者可以从同一个链接下载),将它们放在同一个文件夹中
-
打开命令提示符
-
现在运行命令
apktool if framework-res.apk
(如果你没有它,从这里获取)并接着 -
apktool d myApp.apk
(myApp.apk代表你想要解密的文件名)
现在你得到了一个文件夹,在这个文件夹中可以轻松读取.xml文件。
步骤 4:
这不是任何步骤,只需把两个文件夹(两个新文件夹)的内容复制到一个文件夹中即可
享受源代码吧!