java文件,class文件与dex文件的转化。(详细教程)

 这张图是一个整体框架

java文件,class文件与dex文件的转化。(详细教程)

.java文件

的Java的源文件


.class文件

Java的字节码文件,是一种能够被的Java虚拟机(JVM:Java的虚拟机)识别,加载并且执行的文件格式。

.class文件生成

在java的中是由的.java文件转化而来的(也可由蟒,C ++等通过编译转化而来),下面举例Hello.java转化为Hello.class的两种方法:

•生成时不指定JDK的版本,则可以执行javac Hello.java

•通常为了兼容低版本,例如Android的系统,我们一般指定比较低版本的JDK,否则无法运行,如要指定1.6版本的JDK,命令如下:

java文件,class文件与dex文件的转化。(详细教程)

.class文件执行命令

如要执行hello.class,命令为:java hello,注意不加.class后缀,

java文件,class文件与dex文件的转化。(详细教程)


类文件的作用

类文件的作用是记录一个类文件的所有信息。

例如记住了当前类的引用这一点,父类超等等的的.class文件记录的信息往往比Java的的文件多。

类文件的结构

•8位字节的二进制流文件

•各个数据紧密排列,无间隙,减少了文件体积,加快加载速度

•每个类或者接口单独占据一个类文件,每个类单独管理,没有交叉

类文件的弊端

•内存占用大,不适合于移动端

•堆栈的加载模式导致加载速度慢

•文件IO操作多,类查找慢


.DEX文件

Dalvik字节码文件,是一种能够被Dalvik虚拟机(DVM:Dalvik Virtual Machine)或者Art虚拟机执行并且加载的文件格式。

DEX文件的生成

是由的的.class文件转化而来的,先生成的的.class文件(注意执行低版本的JDK版本,否则手机无法运行),然后需要dx.bat工具,执行:

java文件,class文件与dex文件的转化。(详细教程)

DEX文件执行

•第一步:打开Android Vitual Device Manager

•第二步:将.DEX文件放进安卓模拟器环境

•adb push Hello.dex / data / local

•第三步:执行.DEX文件

adb shell dalvikvm -cp /data/local/Hello.dex Hello(注意这里最后的java原文件名HelloXidian要与文件中类名同名,否则在编译时不会出错,到了这里才会出错)

此时命令输出:你好

DEX文件的作用

DEX文件的作用是记录整个工程(通常是一个的Android的工程)的所有类文件的信息。


类文件与DEX文件的比较

本质上都是一样的,都是二进制流文件格式,DEX文件是从类文件演变而来的

类文件存在冗余信息,DEX文件则去掉了冗余,并且整合了整个工程的类信息。