二、Dalvik vs ART
Dalvik运行环境使用JIT(Just-In-Time)来进行转译,应用每次运行的时候,字节码都需要通过JIT转换为机器码,这会拖慢应用的运行效率。而ART则是使用AOT进行处理(Ahead-Of-Time),并会在应用程序安装完毕时,进行预先的基础性编译作业,这就减去了JIT运行时的机器码转化时间,应用的启动和执行都会变得更加快速。ART优点:1、系统性能的显著提升。2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。3、更长的电池续航能力。
4、支持更低的硬件。
ART缺点:1、更大的存储空间占用,可能会增加10%-20%。2、更长的应用安装时间。
总的来说ART的功效就是“空间换时间”。
三、初步感知ART
1、设备如何选择ART运行环境
2、Dalvik切换ART后系统变化
/2.2、优化后的文件大小及格式不同:
两个运行环境产生的优化代码路径及文件名都为:/data/dalvik-cache/app/data@app@{package name}.apk@classes.dex
ART环境产生的优化代码文件大小明显比Dalvik环境产生大:
[图片上传中。。。(2)]
虽然都为.dex文件结尾,但是文件格式却是天壤之别:
ART环境文件格式:ELF Shared Object
[图片上传中。。。(3)]
Dalvik环境文件格式:
[图片上传中。。。(4)]
三、ART相关源代码
四、dex2oat优化流程
在应用安装时,installd通过dex2oat优化APK安装包classes.dex的Dalvik字节码为本地机器代码。整个优化为:
[图片上传中。。。(6)]
五、OAT文件格式
OAT文件其实就是基于ELF格式的一种私有文件格式。
OAT的ELF 段信息:
/
OAT的ELF export信息:
[图片上传中。。。(8)]
我们以关键的地址点为分割截取OAT文件数据段:
ELF头:
/
OAT数据内容开始:(注意0x10BB位置,DexHeader开始)
[图片上传中。。。(10)]
可执行本地代码部分:
/
OAT数据结束位置:
/
具体的OAT文件格式可以查看源代码。