我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。

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


当前回答

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

使用Android Studio 3.0中的“配置文件或调试APK”功能。它允许您在Android Studio中打开和探索APK。类被反编译为smali。如果没有源代码(android studio 3.0 canary 9),资源不会被提取,像“转到定义”、“查找所有引用”和调试都无法工作。一些额外的smali功能可能适用于smalidea。使用jadx。Jadx将给定APK中的代码反编译为java源文件。使用apktool。Apktool是一个命令行工具,它提取资源并将代码反编译为给定apk的smali。您也可以使用apktool重新编译。下面是一个实际的例子:$apktool d测试.apk一: 在test.apk上使用Apktool 2.2.4一: 正在加载资源表。。。一: 正在使用资源解码AndroidManifest.xml。。。一: 正在从文件加载资源表:1.apk一: 常规清单包。。。一: 正在解码文件资源。。。一: 正在解码值*/*XML。。。一: Baksmaling类dex。。。一: 正在复制资产和库。。。一: 正在复制未知文件。。。一: 正在复制原始文件。。。$apktool b测试一: 在测试中使用Apktool 2.2.4一: 正在检查源是否已更改。。。一: 正在将smali文件夹粉碎为classes.dex。。。一: 正在检查资源是否已更改。。。一: 正在生成资源。。。一: 正在生成apk文件。。。一: 正在复制未知文件/dir。。。

其他回答

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

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

它使逐步调试smali代码成为可能。此外,它还使使用应用程序变得更容易,因为它具有类似项目的文件结构和一些重复任务的自动化,如构建apk等。

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

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

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

步骤1:创建一个新文件夹并复制您要解码的.apk文件。

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

第2步:现在在同一文件夹(或NEW folder)中提取这个.zip文件。

下载https://github.com/pxb1988/dex2jar/releases/tag/2.0:dex2jar-2.0

现在打开命令提示符并将目录更改为该文件夹(或NEW folder)。然后执行:d2j-dex2jar.bat类.dex

下载此反编译器http://java-decompiler.github.io/反编译classes-dex2jar.jar

步骤3:现在打开另一个新文件夹

放入要解码的.apk文件

下载apktool AND apktool的最新版本(https://ibotpeaches.github.io/Apktool/install/)安装窗口(两者都可以从同一链接下载),并将它们放在同一文件夹中

打开命令窗口

现在运行命令,如apktool if framework-res.apk(如果没有,请在此处获取),然后

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

现在,您在该文件夹中获得了一个文件文件夹,可以轻松地读取apk的xml文件。

将两个文件夹的内容复制到单个文件夹

完成!

这是另一种描述,以防有人被上面的描述卡住。遵循以下步骤:

从以下位置下载apktool.bat(或适用于Linux的apktool)和apktool_<version>.jarhttp://ibotpeaches.github.io/Apktool/install/ 将jar文件从上面重命名为apktool.jar,并将两个文件放在同一文件夹中打开一个dos框(cmd.exe)并切换到该文件夹;验证是否安装了Java环境(对于Linux,请查看有关所需库的说明)开始:apktool解码[apk文件]中间结果:资源文件,AndroidManifest.xml使用您选择的解包器解压缩APK文件中间结果:classes.dex从http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=将classes.dex拖放到dex2jar.bat上(或在DOS框中输入<path_to>\dex2jar.classes.dex;对于Linux,使用dex2jars.sh)中间结果:classes_dex2jar.jar解包classes_dex2jar.jar(可能是可选的,取决于使用的反编译器)反编译类文件(例如,使用JD-GUI或DJ反编译程序)结果:源代码

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

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

你可以按照“恶作剧漱口”的前两步来做。所以你还有另外一个机会:

步骤3':

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

So,

第一个-必须将.apk文件重命名为.zip

第二步-必须解码.dex文件(如果需要,可以将.apk文件解码为dex2jar)

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