什么是Android中的.dex文件?


193

我对dex文件有一些疑问

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

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



Answers:


226

关于.dex文件:

Dalvik Virtual Machine(Android系统中的主力军)最显着的功能之一就是它不使用Java字节码。相反,引入了一种称为DEX的本地格式,甚至字节码指令也与Java字节码指令相同。

Compiled Android application code file.

Android程序被编译为.dex(Dalvik Executable)文件,这些文件又被压缩为.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 File Format

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

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

也有一些逆向工程技术可用于从文件制作jar file或。java class file.dex


我的jar文件在资产文件夹中包含一些xml。我希望它成为.dex的一部分。有什么想法要实现吗?
AndroidGuy 2013年

@AndroidGuy-Jar文件不包含您必须为此使用Android Library Package的任何android资源包(/ asset)。
user370305

它在Android Lollipop上的ART上如何工作?在那里使用了哪些文件,在哪个路径中使用?有人说会占用更多空间。是真的吗 如果是这样,怎么会呢?我的意思是,本机代码似乎总是比字节码小得多,而dex文件在其工作方式方面类似于字节码。
Android开发人员

需要注意的重要一件事是,dexdump不是反编译器而是反汇编程序
genghiskhan

90
.dex file

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

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


2
我的jar文件在资产文件夹中包含一些xml。我希望它成为.dex的一部分。有什么想法要实现吗?
AndroidGuy 2013年

87

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

Dalvik VM包括用于性能优化,验证和监视的多种功能,其中之一是Dalvik Executable(DEX)

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

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

在此处输入图片说明

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

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


18
好信息。只需指出一件事。由于方法调用指令的数量限制,有时会有多个dex文件。此限制为65k方法。在这种情况下,您的代码将不会在单个文件中,而是会在2个或更多文件中,但其他所有内容仍然适用。另外,由于还可以使用动态类加载,因此您可以从文件中加载代码(同样以dexed形式),因此代码将位于多个dex文件中。
伊戈尔·科尔达什(IgorČordaš),2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.