什么是Android中的.dex文件?

Nik*_*tel 181 android dex

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

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

我需要具体的信息请帮忙,欢迎任何真实的例子!

use*_*305 213

关于.dex文件:

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

Compiled Android application code file.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

您可以decompile使用dexdumpandroid-sdk中提供的工具进行索引.

还有一些逆向工程技术来制作文件jar filejava class file来自.dex文件.


Vin*_*kla 89

.dex file
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我的jar文件在assets文件夹中包含一些xml.我希望这是.dex的一部分任何想法如何实现这一点? (2认同)

Suf*_*ori 83

dex file是在Dalvik VM上执行的文件.

Dalvik VM包括多项性能优化,验证和监控功能,其中之一是Dalvik Executable(DEX).

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

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

在此输入图像描述

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

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

  • 好消息.只需要指出一点.由于方法调用指令数量限制,有时会有多个dex文件.这个限制是65k方法.在这种情况下,您的代码不会在单个文件中,而是在2个或更多文件中,但其他所有内容仍然适用.此外,由于动态类加载也可用,您可以从文件加载代码(再次以dexed形式),因此代码将在多个dex文件中. (16认同)
  • 这是一个比其他人更好,更完整的答案 (3认同)