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

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

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


简单的方法:使用在线工具http://www.javadecompilers.com/apk,上传apk并获取源代码。


解密.apk文件的步骤,分步方法:

步骤1:

  • 制作一个新文件夹并复制您想要解码的.apk文件。

  • 现在将这个.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存。 现在你可以访问classes.dex文件等等。在这个阶段,你可以看到drawable,但不能看到xml和java文件,所以继续。

  • 第2步:

  • 现在将这个.zip文件解压到相同的文件夹(或NEW FOLDER)中。

  • 下载dex2jar并将其解压缩到相同的文件夹(或NEW FOLDER)。

  • 将classes.dex文件移动到dex2jar文件夹中。

  • 现在打开命令提示符并将目录更改为该文件夹(或新文件夹)。 然后编写d2j-dex2jar classes.dex (用于mac终端或ubuntu编写./d2j-dex2jar.sh classes.dex )并按回车。 您现在已将classes.dex.dex2jar文件放在同一个文件夹中。

  • 下载java反编译器,双击jd-gui,点击打开的文件,然后从该文件夹打开classes.dex.dex2jar文件:现在你得到类文件。

  • 保存所有这些类文件(在jd-gui中,单击文件 - >保存所有源)src名称。 在这个阶段你会得到java源代码,但是.xml文件仍然是不可读的,所以继续。

  • 第3步:

    现在打开另一个新文件夹

  • 放入你想解码的.apk文件

  • 下载最新版本的apktool AND apktool安装窗口(两者均可从同一链接下载)并将它们放在同一文件夹中

  • 打开一个命令窗口

  • 现在运行命令如apktool if framework-res.apk和next

  • apktool d myApp.apk (其中myApp.apk表示要解码的文件名)

  • 现在你在该文件夹中获得一个文件夹,并可以轻松读取apk的xml文件。

    步骤4:

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

    并享受源代码...


    这是一个替代描述 - 以防万一有人被困在上面的描述中。 按照步骤:

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

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

    中间结果:资源文件, 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框中输入<path_to>dex2jar.bat classes.dex ;对于Linux,请使用dex2jar.sh

    中间结果: classes_dex2jar.jar

  • 解压classes_dex2jar.jar (根据使用的反编译器可能是可选的)
  • 反编译你的类文件(例如用JD-GUI或DJ反编译器)

    结果:源代码

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


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

    它不会返回你写的代码。 相反,它将返回任何内联编译器,变量赋予随机名称,以及赋予随机名称的函数。 尝试反编译并将其恢复到您的代码中可能需要很长时间,而不是重新开始。

    可悲的是,像这样的事情导致许多项目死亡。
    在未来,我强烈建议学习一个版本控制系统,如CVSSVNgit等。

    以及如何备份它。

    链接地址: http://www.djcxy.com/p/5485.html

    上一篇: Is there a way to get the source code from an APK file?

    下一篇: Android database recreates every time application is launched