http://blog.csdn.net/tomken_zhang/article/details/27342913
接触 Android ART 有一段时间了,有必要把分析得和要分析的进行总结。
本文就当自己的Tips
判断系统是否运行在ART模式?
getprop persist.sys.dalvik.vm.lib
输出 libart.so 则运行在ART模式
输出 libdvm.so 则运行在Dalvik模式
ART会把DEX编译成OAT,调用的命令是 dex2oat 命令,什么时候会调用?
1. 安装APK的时候
2. 代码中调用DexClassLoader的时候
dex2oat 中做了什么?
会把classes.dex文件生成一个格式属于ELF格式的OAT文件,里面包括DEX及二进制代码。
是如何编译的?
使用了LLVM,把Dalvik 的Bytecode编译成Thumb-2汇编指令。
LLVM的实现在哪个动态库中?
/system/lib/libart-compiler.so
dex2oat 的参数有哪些?
在用DexClassLoader中测试得到(斜体为说明文字):
--runtime-arg
-Xms64m
--runtime-arg
-Xmx64m
--runtime-arg
-classpath
--runtime-arg
--runtime-arg
-compiler-filter:speed
带有-runtime-arg的,会把下一参数,交付给Runtime使用
--boot-image=/data/dalvik-cache/system@[email protected]
系统关联的镜像文件用于把你调用的系统API关联起来
--dex-file=/storage/emulated/legacy/tl.jar
要加载的JAR包,看内部实现会自动区分ZIP格式和DEX格式
--oat-fd=35
要生成的OAT文件的fd 在调用他的进程中打开
--oat-location=/data/data/com.example.arttest/files/tl.dex
要生成的OAT文件路径
生成的OAT文件如何查看?
1. 可用IDA查看,但只能看到ELF的一些格式,编译生成的代码要自己手动解析
2. 用 oatdump 进行操作,需要在手机上。
安装时生成的OAT文件在哪里?
与原来Dalvik一样也是放到 /data/dalvik-cache 下,文件名与旧版一样,是.dex结尾
暂时记录这些,随时补充!