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”的這個進(jìn)程,通過dex2oat工具創(chuàng)建了一個巨大的“鏡像”文件。命令行參數(shù)映射包含下面幾部分:
在創(chuàng)建鏡像期間,所有已包含在內(nèi)的dex文件會被編譯。例如:
1 | W/dex2oat ( 397): Verification of void org.ccil.cowan.tagsoup.HTMLSchema.<init>() took 187.968ms |
看起來很熟悉,對不對?記得dalvik驅(qū)動環(huán)境中的zygote吧?基本情況是,樣版鏡像運(yùn)行了事實上的應(yīng)用、代碼以及那些被頻繁使用的類??梢悦鞔_的是,xygote沒有被取代,它依然存在于ART環(huán)境中,你可以用跟dalvik一樣的方式來處理它。
在更早的啟動過程中,包管理器在每一個已安裝的應(yīng)用中運(yùn)行dexopt。但除此之外,dex2oat編譯器會把每一個已經(jīng)產(chǎn)生的dex文件編譯成oat文件。
1 2 | I/PackageManager( 559): Running dexopt on: com.android.inputmethod.latinI/dex2oat ( 918): dex2oat: /data/dalvik-cache/system@app@LatinIME.apk@classes.dex |
好吧?,F(xiàn)在讓我們總結(jié)一下目前為止我們所了解到的內(nèi)容:我們知道ART使用了zygote,就像鏡像一樣,之后很可能執(zhí)行了實際的應(yīng)用程序。同時它也進(jìn)行了大量的編譯,甚至是對框架類的編譯。這意味著著從字面上看,我們熟知的Android整個系統(tǒng)都被改變了。我認(rèn)為這是一個暗示:ART不僅僅是一個“更好的Dalvik”——還意味著范例上的一個改變。
但是現(xiàn)在,我已經(jīng)開始準(zhǔn)備該系列的下一篇。在下一篇中我們將進(jìn)一步查看這種新的可執(zhí)行文件格式:OAT文件分析。
|
|