Dalvik是适用于Android平台的java虚拟机,支持.dex格式的java应用程序运行。
Android Runtime,Android4.4提供的一种与Dalvik完全不同的运行时环境,在5.0以及以上的版本默认是ART环境。在应用安装的时候,预编译字节码到机器码,这种机制叫做AOT(Ahead Of Time),应用安装会变慢,但是运行效率会更高。
ART可以兼容Dalvik虚拟机。.dex文件经过AOT编译之后,产生的文件是.aot文件,ART如果在运行时加载.dex文件,走的流程跟Dalvik一样的流程,如果是热点代码也会通过JIT编译成机器码。
dexopt对dex进行验证和优化成odx(Optimized dex)文件
dex2oat在安装的时候,将dex文件执行dexopt优化之后,在将odex执行AOP编译成AOT可执行的文件(机器码)。
注意:为啥在应用安装的时候,才预编译成机器码,而不是在apk编译的时候呢?
主要的原因是安卓不同的CPU架构,比如arm64-v8a,armeabi-v7a,编译成机器码之后不能跨平台。