我想知道.class文件中的字节码和.dex文件中的字节代码之后的区别代码有什么区别。它们的格式不同吗?如果是,则采用哪种格式
答案 0 :(得分:5)
JVM .class
包含JVM字节码。您可以在the JVM Specification中读取JVM字节码的规范,特别是Chapter 6: The Java Virtual Machine Instruction Set。
.dex
个文件包含Dalvik bytecode。 Dalvik是Android使用的原始VM。它现在已被Android Runtime取代。 Dalvik的原始版本是一个纯粹的解释器,后来添加了一个编译器。 ART是一个纯粹的编译器,它在安装时提前编译一次(每次 >运行作为JIT编译器。)
JVM字节码和Dalvik字节码之间的主要区别是:
答案 1 :(得分:4)
您可以找到有关构建过程的详细信息here。
引用,
所有Java代码,包括R.java和.aidl文件,都是 由Java编译器编译并输出.class文件。
dex 工具将.class文件转换为Dalvik字节代码。任何第三方 您已包含在模块构建中的库和.class文件 也会转换为.dex文件,以便将它们打包 最后的.apk文件。
@Andreas评论的来源提供了Dalvik bytecode的技术见解,显然不是Java字节码。
答案 2 :(得分:2)
Android应用程序通常用Java语言编写,并在Dalvik虚拟机(DVM)中执行,这与传统的Java虚拟机(JVM)不同。
DVM由Google开发,针对移动操作系统(特别是Android平台)的特性进行了优化。
通过使用转换工具dx转换Java .class文件,Dalvik中运行的字节码从传统的JVM字节码转换为dex格式。与DVM相反,JVM使用纯Java类文件。
JVM字节码由一个或多个.class文件组成(每个文件包含一个Java类)。在运行时,JVM将从相应的.class文件动态加载每个类的字节码。而Dalvik字节码只由一个.dex文件组成,包含应用程序的所有类。
在Java编译器创建了JVM字节码之后,Dalvik dx编译器删除所有.class文件并将它们重新编译为Dalvik字节码。然后dx将它们合并到一个.dex文件中。
答案 3 :(得分:1)
Dalvik doc:http://source.android.com/devices/tech/dalvik/
Java doc:http://docs.oracle.com/javase/specs/
这两个文档完全不同。阅读所有疑问将被清除。
请参阅此ans:What is the difference between .class and .dex files?
注意:虽然Java jar文件有许多类文件,但每个APK文件只有一个classes.dex文件。根据Google的说法,出于性能和安全原因,APK格式与类文件格式不同。