1.名词解释

  • .dex:

    java源代码编译之后生成众多class文件,之后通过DX/D8编译为dex文件,之后可以由安卓虚拟机执行。

  • .odex:

    dex经过验证与优化后的产物。

  • .art:

    art下根据配置文件生成odex同时,生成.art文件,主要是提升运行时加载odex中热点代码的速度;执行过speed-profile命令的app才会生成.art文件。

  • 解释器:

    程序运行时对代码进行逐行解释,翻译成对应平台的机器码执行。

  • Jit编译:

    解释器方式运行太慢,对于频繁运行的热点代码实时编译(在ART下以方法为粒度)执行,缓存JIT编译后的代码在内存中用于下次执行,JIT编较于解释器可以生成效率更高的代码。

  • AOT编译:

    应用安装时,全量编译所有代码为机器码,运行时,执行机器码。

2.编译选择

  • verify:

    只对 DEX 文件进行代码验证,校验各部分合法性。

  • quicken:

    在verify的基础上优化一些 DEX 指令,提升解释器性能。

  • speed:

    在verify的基础对所有方法进行 AOT 编译。

  • speed-profile:

    在verify的基础对配置文件中列出的方法(热点方法)进行 AOT 编译。