210

我有一些关于dex 文件的问题

  • dexAndroid中的文件是什么?
  • dex 在 Android 上是如何工作的?
  • 它们如何用于调试 Android 应用程序?
  • 它们类似于 java 类文件吗?

我需要具体信息,请对此提供帮助,欢迎任何真实示例!

4

3 回答 3

253

关于 .dex 文件:

(Android 系统下的主力)最显着的特点之一Dalvik Virtual Machine是它不使用 Java 字节码。相反,引入了一种称为 DEX 的本土格式,甚至字节码指令都与 Java 字节码指令不同。

Compiled Android application code file.

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

dex文件格式:

 1. File Header
 2. String Table
 3. Class List
 4. Field Table
 5. Method Table
 6. Class Definition Table
 7. Field List
 8. Method List
 9. Code Header
10. Local Variable List

Android 有关于Dalvik Executable Format.dex文件)的文档。您可以在官方文档中找到更多信息:Dex 文件格式

.dex文件类似于 java 类文件,但它们在较旧的 Android 版本上的 Dalkvik 虚拟机 (DVM) 下运行,并在设备上安装时编译为带有 ART 的较新 Android 版本的本机代码。

您可以使用android-sdk 中提供decompile的工具 .dex 。dexdump

还有一些逆向工程技术可以从文件中生成jar filejava class file生成.dex文件。

于 2011-10-13T07:06:47.340 回答
93

dexfile 是在 Dalvik VM 上执行的文件。

Dalvik VM 包含几个用于性能优化、验证和监控的功能,其中之一是Dalvik Executable (DEX)

Java 源代码由 Java 编译器编译成.class文件。然后dx(dexer) 工具,Android SDK 的一部分将文件处理成包含 Dalvik 字节码.class的文件格式。DEXdx工具消除了类中存在的所有冗余信息。在DEX应用程序的所有类中都打包到一个文件中。下表提供了 JVM jar 文件和dex工具处理的文件的代码大小之间的比较。

该表比较了系统库、Web 浏览器应用程序和通用应用程序(闹钟应用程序)的代码大小。在所有情况下,dex 工具都将代码的大小减少了 50% 以上。

在此处输入图像描述

在标准 Java 环境中,Java 代码中的每个类都会产生一个.class文件。这意味着,如果 Java 源代码文件有一个公共类和两个匿名类,假设用于事件处理,那么 Java 编译器将创建总共三个.class文件。

Android平台编译步骤相同,产生多个.class文件。但.class文件生成后,“dx”工具用于将所有.class文件转换为单个文件.dex或 Dalvik Executable 文件。它是.dex在 Dalvik VM 上执行的文件。该.dex文件已针对内存使用进行了优化,设计主要由数据共享驱动。

于 2015-01-09T09:37:56.867 回答
92
.dex file

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

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

于 2011-10-13T06:55:25.033 回答