Android Kitkat系列文章—OAT文件分析—Part1
|
1 | I /art ( 123): GenerateImage: /system/bin/dex2oat --image= /data/dalvik-cache/system @framework@boot.art@classes.dex--runtime-arg-Xms64m--runtime-arg-Xmx64m--dex- file = /system/framework/core-libart .jar--dex- file = /system/framework/conscrypt .jar--dex- file = /system/framework/okhttp .jar--dex- file = /system/framework/core-junit .jar--dex- file = /system/framework/bouncycastle .jar--dex- file = /system/framework/ext .jar--dex- file = /system/framework/framework .jar--dex- file = /system/framework/framework2 .jar--dex- file = /system/framework/telephony-common .jar--dex- file = /system/framework/voip-common .jar --dex- file = /system/framework/mms-common .jar --dex- file = /system/framework/android .policy.jar --dex- file = /system/framework/services .jar --dex- file = /system/framework/apache-xml .jar --dex- file = /system/framework/webviewchromium .jar --oat- file = /data/dalvik-cache/system @framework@boot.art@classes.oat--base=0x60000000--image-classes-zip= /system/framework/framework .jar--image-classes=preloaded-classes |
system_server启动后在log中显示为“art”的这个进程,通过dex2oat工具创建了一个巨大的“镜像”文件。命令行参数映射包含下面几部分:
在创建镜像期间,所有已包含在内的dex文件会被编译。例如:
1 | W /dex2oat ( 397): Verification of void org.ccil.cowan.tagsoup.HTMLSchema.<init>() took 187.968ms |
看起来很熟悉,对不对?记得dalvik驱动环境中的zygote吧?基本情况是,样版镜像运行了事实上的应用、代码以及那些被频繁使用的类。可以明确的是,xygote没有被取代,它依然存在于ART环境中,你可以用跟dalvik一样的方式来处理它。
在更早的启动过程中,包管理器在每一个已安装的应用中运行dexopt。但除此之外,dex2oat编译器会把每一个已经产生的dex文件编译成oat文件。
1 2 | I /PackageManager ( 559): Running dexopt on: com.android.inputmethod.latin I /dex2oat ( 918): dex2oat: /data/dalvik-cache/system @app@LatinIME.apk@classes.dex |
好吧。现在让我们总结一下目前为止我们所了解到的内容:我们知道ART使用了zygote,就像镜像一样,之后很可能执行了实际的应用程序。同时它也进行了大量的编译,甚至是对框架类的编译。这意味着着从字面上看,我们熟知的Android整个系统都被改变了。我认为这是一个暗示:ART不仅仅是一个“更好的Dalvik”——还意味着范例上的一个改变。
但是现在,我已经开始准备该系列的下一篇。在下一篇中我们将进一步查看这种新的可执行文件格式:OAT文件分析。
|