快速理清 .dex、.odex、ART、AOT、OAT 逻辑关系

目的

理清 .dex、.odex、ART、AOT、OAT 等近似名称的概念和意义。

APK 生成

apk的打包过程

最终 apk 内的代码文件为 .dex 文件。

APK 安装运行

基础概念

AOT:编译方式,运行前编译。
JIT:编译方式,动态编译。
Dalvik:Android 5.0 之前默认虚拟机。
ART:Android 5.0 及其之后默认虚拟机。
OAT:Android 私有 ELF 文件格式,后缀为 .odex。不仅包含从 .dex 翻译过来的二进制本地机器指令,还包含原来的 .dex 文件内容。这使得无需重新编译原 APK 就能直接在 ART 中运行。

多种安装运行方式

名称 编译方式 特性 备注
Dalvik JIT 运行时编译 .dex,.dex 是 DVM 使用的运行时编译字节码。系统第一次开机会提取 apk 内的 dex 文件生成 .odex,以提升运行时编译的速度。 此 .odex 只是对 .dex 文件的提取,这样运行时无需再次从 apk 提取,可以加速编译,并非可执行文件。
ART AOT 安装时编译。安装时生成 OAT 文件,该文件包含机器码,可以直接运行。 此 .odex 可以直接运行。
Android N 之后 JIT、AOT 混编 安装时 JIT,系统空闲时 AOT 针对 "热代码"(常用代码块)编译为 OAT 保存在本地。 时间、空间的综合方案。

猜你喜欢

转载自blog.csdn.net/weixin_40611659/article/details/109090968