ART 学习 (1) --- 初探

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结尾


暂时记录这些,随时补充!


你可能感兴趣的:(ART 学习 (1) --- 初探)