如何提取不起作用的 .apk 文件的代码? [复制]

Posted

技术标签:

【中文标题】如何提取不起作用的 .apk 文件的代码? [复制]【英文标题】:How to extract code of .apk file which is not working? [duplicate] 【发布时间】:2011-12-14 20:15:28 【问题描述】:

实际上,我正在尝试提取名为 cloudfilz.apk 的 .apk 文件的代码,并希望在其源代码中进行操作,因此我按照以下步骤操作:-

创建一个新文件夹并放置 .apk 文件(您要解码)现在重命名此 .apk 文件,扩展名为 .zip(例如:从 filename.apk 重命名为 filename.apk.zip)并保存它..now你会得到 classes.dex 文件等......在这个阶段你可以看到可绘制但不是 XML 和 java 文件......所以继续......

第 2 步:

现在将这个 zip apk 文件提取到同一个文件夹中(在这个例子中,或者在新文件夹中)。现在从此链接http://code.google.com/p/dex2jar/ 下载 dex2jar 并将其解压缩到同一个文件夹(在本例中为 NEW FOLDER)......现在打开命令提示符并到达该文件夹(在本例中为 NEW FOLDER)......到达后编写“dex2jar classes.dex”并按回车键......现在您在同一文件夹中获得 classes.dex.dex2jar 文件......

=>问题:-我成功实现了第 1 步,但是在第 2 步中,当我执行 dex2jar classes.dex 时,我在命令提示符java.lang.UnsupportedClassVersionError 上收到错误消息,我知道这是由于我安装的 JDK 版本不兼容和 classes.dex JDK 版本号所以卡在这里,没有出路...

【问题讨论】:

如果该应用程序的作者希望您查看源代码,他/她会将其作为开放源代码发布。我的猜测是它不是开源的,你无权尝试提取它。 @NickT 有时您想知道为什么您的新 android 手机 (CMAS) 上的特定应用程序拥有比应有的更多权利。 --------------------------------- “我坚信人民。如果得到真相,他们可以依靠他们来应对任何国家危机。最重要的是给他们带来真实的事实和啤酒。” ― 亚伯拉罕·林肯 --------------------------------- technikes.com/find-a-source-code-from-apk-file你的问题的两个新步骤 【参考方案1】:

注意:除非另有说明,否则以下所有说明普遍适用(也适用于所有操作系统)。


先决条件

你需要:

工作的Java installation 工作终端/命令提示符 一台电脑 APK 文件

步骤

第 1 步:更改 APK 文件的文件扩展名

    通过在文件名中添加.zip 扩展名或将.apk 更改为.zip 来更改.apk 文件的文件扩展名。

    例如,com.example.apk 变为 com.example.zipcom.example.apk.zip。请注意,在 Windows 和 macOS 上,它可能会提示您是否确定要更改文件扩展名。如果您使用的是 macOS,请单击 OK添加

第 2 步:从 APK 中提取 Java 文件

    在特定文件夹中提取重命名的 APK 文件。例如,让该文件夹为demofolder

    如果不起作用,请尝试在其他应用程序中打开文件,例如 WinZip 或 7-Zip。

    对于 macOS,您可以尝试在终端中运行 unzip(可在 /Applications/Terminal.app 获得),它需要一个或多个参数:要解压缩的文件 + 可选参数。有关文档和参数,请参阅 man unzip

    下载 dex2jar (see all releases on GitHub) 并将该 zip 文件解压缩到与上一点所述相同的文件夹中。

    打开命令提示符(或终端)并将当前目录更改为上一点创建的文件夹,然后键入命令d2j-dex2jar.bat classes.dex 并按回车键。这将在同一文件夹中生成classes-dex2jar.jar 文件。

    ma​​cOS/Linux 用户:d2j-dex2jar.bat 替换为 d2j-dex2jar.sh。也就是说,在终端中运行d2j-jar2dex.sh classes.dex,然后回车。

    下载 Java Decompiler (see all releases on Github) 并解压并启动(也就是双击)可执行文件/应用程序。

    在 JD-GUI 窗口中,将生成的 classes-dex2jar.jar 文件拖放到其中,或者转到 File > Open File... 并浏览找到 jar。

    接下来,在菜单中,转到File > Save All Sources(Windows:Ctrl+Alt+S,macOS:⌘++S)。这应该会打开一个对话框,询问您将名为“classes-dex2jar.jar.src.zip”的 zip 文件保存在哪里,该文件包含所有包和 java 文件。(您可以重命名要保存的 zip 文件)

    李>

    解压该 zip 文件 (classes-dex2jar.jar.src.zip),您应该会得到应用程序的所有 java 文件。

第 3 步:从 APK 中获取 xml 文件

有关详细信息,请参阅apktool website 了解安装说明和更多信息

窗户:

    下载wrapper script (optional)和apktool jar (required)并将其放在同一个文件夹中(例如myxmlfolder)。 将当前目录更改为myxmlfolder 文件夹并将apktool jar 文件重命名为apktool.jar。 将.apk 文件放在同一文件夹中(即myxmlfolder)。

    打开命令提示符(或终端)并将当前目录更改为存储apktool 的文件夹(在本例中为myxmlfolder)。接下来,输入命令apktool if framework-res.apk

    我们在这里所做的是我们正在安装一个框架。有关详细信息,请参阅docs。

    上面的命令应该导致“Framework installed ...”

    在命令提示符下,键入命令apktool d filename.apk(其中filename 是apk 文件的名称)。这应该解码文件。有关详细信息,请参阅docs。

    这应该会导致输出文件夹filename.out,其中filename 是没有.apk 文件扩展名的apk 文件的原始名称。此文件夹中包含所有 XML 文件,例如布局、可绘制文件等。

来源:How to get source code from APK file - Comptech Blogspot

【讨论】:

它对我有用,可以生成 xml 文件。 更好的JD-GUI链接是:jd.benow.ca "现在打开命令提示符并转到上一步创建的文件夹并键入命令“dex2jar classes.dex”并按回车。这将生成“classes.dex.dex2jar”文件文件夹。” github链接中没有bat文件 Ubuntu 用户,将 'apktool' 和 'apktool.jar' 文件移动到 '/usr/local/bin' 文件夹。打开终端路径指向apk文件夹位置类型apktool d 在第 3 步中你输入了d2j-jar2dex.bat classes.dex 我认为这是d2j-dex2jar.bat classes.dex Dex > Jar【参考方案2】:

市场上的任何 .apk 文件或未签名的文件

    如果您的 apk 是从市场下载的并因此签署了从市场安装 Astro 文件管理器。打开 Astro > Tools > Application Manager/Backup 并选择要备份到 SD 卡上的应用程序。 将手机挂载为 USB 驱动器并访问“backupsapps”文件夹以找到目标应用程序的 apk(我们称之为 app.apk)。将其复制到本地驱动器与未签名的 .apk 相同。

    从此链接下载 Dex2Jar zip:SourceForge

    解压下载的 zip 文件。

    打开命令提示符并在到达 dex2jar exe 所在的目录时写入以下命令,并将 apk 复制到同一目录中。

    dex2jar targetapp.apk file(终端上的./dex2jar app.apk)

    http://jd.benow.ca/从此链接下载反编译器。

    用 jd-gui 打开‘targetapp.apk.dex2jar.jar’ File > Save All Sources 将 jar 中的类文件保存为 java 文件。

【讨论】:

我会试试这个,............【参考方案3】:

第 1 步:

下载dex2jar here。创建一个java项目并粘贴(dex2jar-0.0.7.11-SNAPSHOT/lib)jar文件。

将apk文件复制到java项目中

运行它,刷新项目后得到jar文件。使用java反编译器可以查看所有java类文件

第二步:下载java反编译器here

【讨论】:

感谢 Sony 的回复,但我无法获取 jar 文件,所以请您详细解释一下...您的屏幕截图显示您的 dex2jar lib jar 文件在另一个位置,但它应该保存在里面java项目如何可行..请清除我的歧义.. 只是你在java项目中复制dext2jar lib jar文件,而不是src文件夹 我已将 apk 文件放入 src。 & 什么是主要课程?是这个com.googlecode.dex2jar.dump.Dump吗? linux用户的程序一样吗?​​??【参考方案4】:

Click here这是一个很好的window/ubuntu教程。

    从here下载apktool1.5.1.jar。

    从here下载apktool-install-linux-r05-ibot。

    dex2jar-0.0.9.15.zip 从here下载。

    jd-gui-0.3.3.linux.i686.tar.gz(java反编译器)从here下载。

    framework-res.apk(位于你的安卓设备/system/framework/)

程序:

    重命名 .apk 文件并将扩展名更改为 .zip ,

它将变成 .zip。

    然后解压.zip。

    解压下载的dex2jar-0.0.9.15.zip文件,复制内容并粘贴到解压文件夹中。

    打开终端,切换目录解压“dex2jar-0.0.9.15”

--cd – sh dex2jar.sh classes.dex(此命令“classes.dex.dex2jar.jar”的结果将在您的提取文件夹本身中)。

    现在,创建新文件夹并将“classes.dex.dex2jar.jar”复制到其中。

    解压“jd-gui-0.3.3.linux.i686.zip”并全屏打开“Java反编译器”。

    点击打开文件并在窗口中选择“classes.dex.dex2jar.jar”。

    “Java 反编译器”并转到文件 > 保存并将源代码保存在 .zip 文件中。

    创建“source_code”文件夹。

    解压保存的 .zip 并将内容复制到“source_code”文件夹。

    这将是我们保存您的源代码的地方。

    解压apktool1.5.1.tar.bz2,得到apktool.jar

    现在,解压“apktool-install-linux-r05-ibot.zip”

    复制“framework-res.apk”、“.apk”和apktool.jar

    将其粘贴到解压后的“apktool-install-linux-r05-ibot”文件夹(第 13 行)。

    然后打开终端输入:

    --cd

    – chown -R : ‘apktool.jar’

    – chown -R : ‘apktool’

    – chown -R : ‘aapt’

    – sudo chmod +x ‘apktool.jar’

    – sudo chmod +x ‘apktool’

    – sudo chmod +x ‘aapt’

    – sudo mv apktool.jar /usr/local/bin

    – sudo mv apktool /usr/local/bin

    – sudo mv aapt /usr/local/bin

    – apktool 如果是 framework-res.apk – apktool d .apk

【讨论】:

以上是关于如何提取不起作用的 .apk 文件的代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 iText 提取文本不起作用:编码或加密文本?

如何反编译apk得到源代码

如何在 googleplay 中回滚 apk 版本? [复制]

Rxjava 在签名的 apk 中不起作用

代码不起作用:使用 vba 将文件从一个目录复制到另一个目录

如何检查zip存档中是否存在该文件?