51

使用 WinRar(打开压缩文件的软件)打开 APK 文件时。我在 APK 中打包了一堆文件。其中classes.dex之一。我的问题是这个文件的作用是什么,如果我们修改/删除同一个文件会影响APK吗?

4

5 回答 5

65

要制作APK文件,首先要编译Android程序,然后将其所有部分打包到一个文件中。这包含该程序的所有代码(这些是.dex files)、资源、资产、证书和清单文件。

程序通常Javabytecode. 然后在设备上安装之前将它们转换Java Virtual Machine-compatible .class filesDalvik-compatible .dex(Dalvik 可执行文件)文件。紧凑的 Dalvik 可执行文件格式旨在适用于内存和处理器速度受限的系统。

  • classes.dex:编译成Dalvik虚拟机可理解的dex文件格式的类

由于 .dex 文件包含 APK 资源,因此对这些文件的任何编辑都会直接影响 APK。

于 2013-01-09T08:00:24.470 回答
10

.dex 文件 编译的 Android 应用程序代码文件。

来自 Android API 指南

Android 程序被编译成.dex (Dalvik Executable)文件,这些文件又被压缩到设备上的单个.apk文件中。.dex 文件可以通过自动翻译用 Java 编程语言编写的已编译应用程序来创建。

是的,如果您删除这些文件,它将影响 APK。

于 2013-01-09T07:58:58.077 回答
7

classes.dex 本质上是所有应用程序逻辑。给定应用程序的代码是用 java 编写的,然后编译为类文件,然后这些类文件被交叉编译(经过许多优化)为 dalvik VM 格式。请注意,可能还有一些 .so 文件也是应用程序代码,但这些文件是在使用 NDK 时生成的。您不能删除此文件。但是,您可以通过首先运行此实用程序来更改它https://github.com/JesusFreke/smali它将从这个编译的 dex 生成 smali 代码,这有点类似于 java 并且可以理解。您还可以使用工具 ApkOneClick 或 ApkMultiTool 从 smali 文件中获取 Java 源代码,但这些可能并不完美,需要进一步修复。当您更改您想要的代码时,您应该再次构建 classes.dex 并将它们放入您拥有的现有 zip/apk 文件中。请注意,现有的证书文件 (META-INF) 将不再有效,您需要删除此文件夹并重新签名 apk 包才能将其安装在手机或模拟器上。

有关更多信息,您也可以查看此问题Android 中的 .dex 文件是什么?

这也是使用现有工具反汇编 dex 文件的一个很好的教程http://blog.vogella.com/2011/02/14/disassemble-android-dex

于 2014-02-14T11:53:22.097 回答
5

这个文件的作用是什么?

Android中的作用classes.dex类似于纯Java中的JAR文件。这是一个包含字节码的文件。在 Android 的情况下,字节码是 Dalvik 字节码,它不同于 Java 字节码。

如果我们修改/删除同一个文件会影响apk吗?

如果您修改classes.dex,您正在修改程序行为,重新打包后可能会或可能不会工作。如果你 delete classes.dex,那么你的应用程序没有代码,你不应该期望它工作。

于 2016-12-07T14:51:48.747 回答
1

apk 中的 .dex 文件是由应用程序代码中的所有 java 类组成的压缩文件。它与 jar 文件不同。jar 文件是隔离的 .class 文件的集合。如果我们解压缩 .jar,我们将分别获取所有类。另一方面,.dex 文件是由应用程序代码中的所有 .class 文件组成的单个文件。

代码编译流程:多个 .java 文件 --> 多个 .classes 文件 --> 一个 .dex 文件

.dex 文件是由 DVM 执行的可执行文件...Dalvik 虚拟机,它是 Android 的运行时。

.dex 永远不会包含资源。资源在 .apk 的 /res 文件夹中单独维护

于 2016-02-16T05:19:37.863 回答