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

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

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

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


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

步骤1:

  1. 创build一个新文件夹并复制要解码的.apk文件。

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

第2步:

  1. 现在将这个.zip文件解压到同一个文件夹(或者NEW FOLDER)中。

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

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

  4. 现在打开命令提示符,并将目录更改为该文件夹(或新的文件夹)。 然后编写d2j-dex2jar classes.dex (用于macterminal或ubuntu编写./d2j-dex2jar.sh classes.dex )并按回车。 你现在在同一个文件夹中有classes.dex.dex2jar文件。

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

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

第3步:

现在打开另一个新文件夹

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

  2. 下载最新版本的apktool AND apktool安装窗口 (都可以从相同的链接下载),并将它们放在同一个文件夹

  3. 打开一个命令窗口

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

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

现在你得到了该文件夹中的文件夹,并可以轻松读取apk的xml文件。

步骤4:

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

并享受源代码…

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

  1. http://ibotpeaches.github.io/Apktool/install/下载;apktool.bat (或适用于Linux的apktool )和apktool_<version>.jar
  2. 将上面的jar文件重命名为apktool.jar并将这两个文件放在同一个文件夹中
  3. 打开一个dos框( cmd.exe ),并进入该文件夹; validation是否安装了Java环境(对于Linux,请检查有关所需库的注释)
  4. 开始: apktool decode [apk file]

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

  5. 解压缩APK文件与您select的解包器

    中间结果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框中input<path_to>\dex2jar.bat classes.dex ; Linux使用dex2jar.sh

    中级结果classes_dex2jar.jar

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

    结果 :源代码

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

虽然你可能能够反编译你的APK文件,你可能会遇到一个大问题:

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

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

以及如何备份。

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

只需安装,玩得开心。 我认为这是反编译应用程序最简单的方法。

apktool是你可以尝试的最好的东西。 我已经保存了一些XML,但老实说,我不知道它将如何与.java代码一起工作。

我build议你有一个代码库,即使你是唯一的编码器。 我一直在使用项目更衣室为我自己的项目。 它给你免费的svn和git回购。

这两篇文章描述了如何结合使用apktooldex2jar来获取APK文件,并创build一个可以构build和运行它的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所dex2jar格式的类。
  3. 创build一个Eclipse项目将其指向资源文件和新的jar文件
  4. 用zip实用程序打开jar文件并删除现有资源
  5. JDGui打开jar文件来查看源代码
  6. JDGui所需的任何源代码,将其粘贴到Eclipse中的类中并对其进行修改
  7. 从jar文件中删除那个类(所以你没有多次定义相同的类)
  8. 运行。

apktool将工作。 你甚至不需要知道keystore来提取源代码(这有点吓人)。 主要的缺点是源代码是以Smali格式而不是Java提供的。 其他文件,如图标和main.xml通过完美罚款,这可能是值得你的时间,至less恢复这些。 最终,您很可能需要重新编写您的Java代码。

你可以在这里findapktool。 只需下载apktool和相应的帮助程序(适用于Windows,Linux或Mac OS)。 我build议使用诸如7-zip的工具来解压缩它们。

我会告诉你另一种反编译.apk文件的方式。

您可以按照“ prankul garg ”的前两个步骤操作。 所以你有另一个机会:

步骤3':

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

所以,

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

第二 – 你必须解码.dex文件(如果你想解码的.apk文件dex2jar ,这是可能的)

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

可能是容易看到的来源:

在Android studio 2.3中, Build -> Analyze APK -> Select the apk that you want to decompile
你会看到它的源代码。

Linf供参考:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2

Apktool反向工程第三方,封闭,二进制Android应用程序。

它可以将资源解码为几乎原始的forms,并在进行一些修改后重build它们。

它可以一步一步地debugging小代码。 此外,由于类似于项目的文件结构以及诸如构buildapk等重复性任务的自动化,它使得应用程序的工作更加轻松。

http://ibotpeaches.github.io/Apktool/

apktool是要走的路。 在线apktool服务也存在: http : //www.javadecompilers.com/apktool

显然,由于服务的“在线性”,存在一些限制:您可能会提取和研究资产和清单文件,但目前不可能重新编译应用程序。

不过,这是一个“打开”android应用程序的无障碍方式。

有几种方法可以做到这一点:

  1. 使用Android Studio 3.0中的“configuration文件或debuggingAPK”function。

    它允许您在Android Studio中打开和探索APK。 类被反编译为smali。 没有提取资源,像“去定义”,“查找所有引用”和debugging不工作没有源代码(android studio 3.0 canary 9)。 一些额外的smalifunction可能与smalidea一起使用 。

    机器人工作室

    选择文件

    码

  2. 使用jadx 。

    Jadx将给定APK中的代码反编译为java源文件。

    jdax-IMG

  3. 使用apktool 。

    Apktool是一个命令行工具,它可以提取资源并将代码反编译为一个给定的apk文件。 你也可以使用apktool重新编译。 下面是它的一个例子:

     $ apktool d test.apk I: Using Apktool 2.2.4 on test.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: 1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files... $ apktool b test I: Using Apktool 2.2.4 on test I: Checking whether sources has changed... I: Smaling smali folder into classes.dex... I: Checking whether resources has changed... I: Building resources... I: Building apk file... I: Copying unknown files/dir... 

在线工具下面:

http://www.javadecompilers.com/apk

它通过一个单击完成:反编译.java文件+资源+ xml (在一个.zip文件中)与非常好的反编译器(jadx返回的地方/function其他编译返回function,如“无法反编译” android汇编/机器码)

这个网站https://www.apkdecompilers.com/自动做到了。;

我首先尝试了被接受的答案中提到的网站,但这对我并不适用。

我个人推荐显示Java Android应用程序来获取源代码。 您可以从Play商店或从这里下载