dex文件经过dex2oat编译,会生成.art、.oat两个文件,oat是一个android定制的elf文件,原始dex也保存在其中。8.0后,dex单独保存到.vdex文件中。art文件类似于一个内存映像,缓存常用的ArtField、ArtMethod、DexCache等内容,加载后可直接使用,避免解析耗时。
art文件格式介绍
以boot.art为例,它分为Image Section和Bitmap Section区域。每个Section在文件中的偏移量和大小由ImageSection类来描述。
主要Section介绍:
Object Section:存储的一个个的mirror Object对象。需要这个Object对象时,从art文件里读出来(反序列化)即可。Object Section前200个字节保存的是art文件头ImageHeader内容。
ArtField和ArtMethod Section:ArtField和ArtMethod对象的内容。
DexCacheArrays Section:DexCache有关,通过DexCacheArraysLayout将一个DexCache对象所关联的GcRoot数组、ArtMethod数组、ArtFiled数组、GcRoot数组按顺序存储在该Section中。
ClassTable Section:存储的是一个ClassTable对象的内容。
Bitmap Section:
Bitmap区域是一个位图,用于描述Object Section里各个Object的地址,以8字节对齐。如果一个比特位的值为1,则它指向Object Section中的一个Object对象。
假设Object存储的基地址是0x700000