aot,oat,art...是不是有的时候傻傻分不清楚,该文章主要解释dalvik, Art,JIT ,AOT, oat, dex, odex这些概念,已便于理解Android 应用编译和运行的过程及安装过程。
执行环境dalvik, Art
dalvik这个大家肯定很熟悉 Dalvik是Google公司设计用于Android平台的Java虚拟机
Art是(Android runtime) 在Android系统4.4提出 在5.0之后完全弃用dalvik 全部采用art为执行环境
在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器(JIT)转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码(这种机制称为AOT) 这样的话,应用执行变得更加快速。
编译模式 JIT,AOT
上述提到的两种编译模式jit 和aot,可以理解为是一种编译策略
JIT (just in time) 运行时编译
AOT (Ahead-Of-Time) 运行前编译 Art的主要特征就是AOT
文件格式 oat dex和odex
dex(Dalvik Executable)格式是专门为Dalvik设计的一种压缩格式,
(javac) (dx工具)
.java------>.class------->.dex
.java文件经过javac编译器生成.class字节码 再经过。dx工具生成.dex
odex(optimized dex)即优化的dex
对于在dalvik环境中 使用dexopt来对dex字节码进行优化 生成odex文件 最终存在手机的data/dalvik-cache目录下
对于art环境,使用dex2oat工具来对dex字节码生成oat文件
oat文件是art的核心,oat文件包含oatdata和oatexec
前者包含dex文件内容,后者包含生成的本地机器指令,进而可以直接运行,同样保存在手机的data/dalvik-cache目录下
PMS(PackgetManagerService)--->installd(守护进程)------>dex2oat(/system/bin/dex2oat)
注意存放在data/dalvik-cache目录下的后缀名都仍为.dex 前者其实表示一个优化过的.dex文件 后者为.oat文件
apk安装过程
大家都知道 apk其实就是zip包 apk安装过程其实就是解压过程
用户应用安装涉及以下几个目录
data/app 安装目录 安装时会把apk文件copy到这里
data/dalvik-cache 如上述描述中的存放.dex(.odex 无论davilk的dex 还是art的oat格式)
data/data/pkg/ 存放应用程序的数据