有没有办法从APK文件中获取源代码?

最后都变了- 提交于 2019-12-10 18:25:33

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我的笔记本电脑上的硬盘驱动器刚刚崩溃,并且丢失了过去两个月来我一直在使用的应用程序的所有源代码。 我所拥有的就是APK文件,该文件存储在我发送给朋友时的电子邮件中。

有什么办法可以从这个APK文件中提取我的源代码?


#1楼

这两篇文章描述了如何结合使用apktooldex2jar来获取APK文件,并创建一个可以构建和运行它的Eclipse项目。

http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html

http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

基本上,您:

  1. 使用apktool将资源文件移出apk
  2. 使用dex2jar获得一个jar文件,其中包含Eclipse所需格式的类。
  3. 创建一个Eclipse项目,将其指向资源文件和新的jar文件
  4. 使用zip实用程序打开jar文件并删除现有资源
  5. 使用JDGui打开jar文件以查看源代码
  6. JDGui所需的任何源代码,将其粘贴到Eclipse中的类中并对其进行修改
  7. 从jar文件中删除该类(因此您没有多次定义相同的类)
  8. 运行。

#2楼

我将向您展示其他反编译.apk文件的方法。

您可以按照“ prankul garg ”的前两个步骤进行操作 。 因此,您还有另一个机会:

步骤3':

下载“ JD-GUI” ,就很容易找到这个。 在“ jd-gui.exe”中打开您的.jar文件。 (文件>打开文件>'找到您的.jar文件')。 完成此过程后,您可以将所有资源保存为.zip文件。

所以,

1st-您必须将.apk文件重命名为.zip

2-您必须解码.dex文件(如果需要,可以将.apk文件解码为dex2jar

3-您必须使用JD-GUI解码.jar文件


#3楼

这是一个替代性说明-以防万一有人卡在上面的说明中。 按照步骤:

  1. http://ibotpeaches.github.io/Apktool/install/下载apktool.bat (或Linux的apktool )和apktool_<version>.jar
  2. 从上面将jar文件重命名为apktool.jar并将两个文件放在同一文件夹中

  3. 打开一个dos框( cmd.exe )并转到该文件夹​​; 验证是否已安装Java环境(对于Linux,请同时查看有关所需库的注释)
  4. 开始: apktool decode [apk file]

    中间结果 :资源文件, AndroidManifest.xml

  5. 使用您选择的解压缩器解压缩APK文件

    中间结果classes.dex

  6. http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=下载并解压缩dex2jar-0.0.9.15.zip
  7. classes.dex拖放到dex2jar.bat (或在DOS框中输入<path_to>\\dex2jar.bat classes.dex ;对于Linux使用dex2jar.sh

    中间结果classes_dex2jar.jar

  8. 解压缩classes_dex2jar.jar (根据使用的反编译器可能是可选的)
  9. 反编译您的类文件(例如,使用JD-GUIDJ Decompiler

    结果 :源代码

注意:不允许反编译第三方软件包; 本指南仅旨在从APK文件中恢复个人源代码; 最后,最终的代码很可能会被混淆


#4楼

Play商店上还有一个新应用程序,可以通过它反编译apk(也为系统应用程序)并在智能手机上查看源代码。 它将文件保存到SD卡,因此您也可以在计算机上查看文件。 它不需要root或其他东西。

只需安装并享受乐趣。 我认为这是反编译应用程序的最简单方法。


#5楼

虽然您可以反编译APK文件,但您可能会遇到一个大问题:

它不会返回您编写的代码。 相反,它将返回编译器内联的所有内容,其中变量具有随机名称,而函数具有随机名称。 与重新开始相比,尝试反编译并将其还原到您拥有的代码中可能要花费更多的时间。

可悲的是,像这样的事情已经杀死了许多项目。
对于未来,我强烈建议学习版本控制系统,例如CVSSVNgit等。

以及如何备份。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!