Android 中的 .dex 文件是啥?
Posted
技术标签:
【中文标题】Android 中的 .dex 文件是啥?【英文标题】:What are .dex files in Android?Android 中的 .dex 文件是什么? 【发布时间】:2011-12-06 17:14:53 【问题描述】:我有一些关于dex文件的问题
什么是 android 中的dex
文件?
dex 如何在 Android 上运行?
它们如何用于调试 Android 应用程序?
它们是否类似于 java 类文件?
我需要具体信息,请对此提供帮助,欢迎提供任何真实示例!
【问题讨论】:
请看到这个链接***.com/questions/1249973/… 如何在设备上运行它们:***.com/questions/10199863/… 是的,它们在一方面类似于 java .class 文件。 Java VM 解释 .class 文件,而 Delvik VM 或 Android Run Time 解释 .dex 文件。 【参考方案1】:关于 .dex 文件:
Dalvik Virtual Machine
(Android 系统下的主力)最显着的特点之一是它不使用 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 File Format
.dex
文件类似于 java 类文件,但它们在较旧的 Android 版本上的 Dalkvik 虚拟机 (DVM) 下运行,并在安装时在设备上编译为带有 ART 的较新 Android 版本的本机代码。
您可以使用android-sdk中提供的dexdump
工具decompile
.dex。
还有一些逆向工程技术可以从.dex
文件中创建jar file
或java class file
。
【讨论】:
我的 jar 文件在 assets 文件夹中包含一些 xml。我希望它成为 .dex 的一部分 知道如何实现吗? @AndroidGuy - Jar 文件不包含任何 android 资源包 (/asset),您必须为此使用 Android Library Package。 它在 ART 和 Android Lollipop 上是如何工作的?那里使用了哪些文件,在哪个路径中?有人说它会占用更多空间。这是真的吗?如果有,怎么来的?我的意思是,本机代码似乎总是比字节码小得多,而 dex 文件在工作方式上与字节码相似。 需要注意的重要一点是dexdump
不是反编译器而是反汇编器【参考方案2】:
dex
文件是在 Dalvik VM 上执行的文件。
Dalvik VM 包含多项性能优化、验证和监控功能,其中之一是 Dalvik 可执行文件 (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 可执行文件。它是在 Dalvik VM 上执行的 .dex
文件。 .dex
文件已针对内存使用进行了优化,设计主要由数据共享驱动。
【讨论】:
好消息。只需指出一件事。有时由于方法调用指令数的限制,会出现多个dex文件。此限制为 65k 方法。在这种情况下,您的代码将不在单个文件中,而是在 2 个或更多文件中,但其他所有内容仍然适用。此外,由于还可以使用动态类加载,您可以从文件中加载代码(再次以 dex 形式),因此代码将位于多个 dex 文件中。【参考方案3】:.dex file
编译的Android应用程序代码文件。
Android 程序被编译成 .dex(Dalvik 可执行文件)文件,然后在设备上压缩成单个 .apk 文件。 .dex 文件可以由 Android 自动创建,通过翻译用 Java 编程语言编写的编译应用程序。
【讨论】:
我的 jar 文件在 assets 文件夹中包含一些 xml。我希望它成为 .dex 的一部分 知道如何实现吗?以上是关于Android 中的 .dex 文件是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向启动 DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 )(代