小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android Kitkat系列文章—OAT文件分析—Part1

 老匹夫 2014-02-22

Android Kitkat系列文章—OAT文件分析—Part1

分享到: 3


本文由 ImportNew - Peter Pan 翻譯自 google。如需轉(zhuǎn)載本文,請(qǐng)先參見(jiàn)文章末尾處的轉(zhuǎn)載要求。

這是關(guān)于Android最新版本Kitkat系列文章的第一篇,我把它們寫(xiě)在了+novex Gmbh上面。這個(gè)系列將帶你從(系統(tǒng))開(kāi)發(fā)人員的角度深入理解Kitkat的內(nèi)部機(jī)制以及相比之前版本的變化。這里會(huì)從新的運(yùn)行時(shí)ART(Android Runtime)開(kāi)始。

1、引擎檢視:什么是ART

Kitkat最令人興奮、卻也最少見(jiàn)諸報(bào)端的特性之一就是ART,這個(gè)處于試驗(yàn)階段的最新運(yùn)行時(shí)。Google并沒(méi)有發(fā)布太多有關(guān)ART的信息(http:///9Jzgdo),盡管事實(shí)上它已經(jīng)出現(xiàn)了。然而,我覺(jué)得這個(gè)特性可能對(duì)未來(lái)的發(fā)布產(chǎn)生巨大的影響,因?yàn)橛辛薃RT后Android將不再理會(huì)執(zhí)行過(guò)的dalvik字節(jié)碼,轉(zhuǎn)而使用一種平臺(tái)特有的、提前編譯(AOT,ahead-of-time)二進(jìn)制碼。

Dalvik虛擬機(jī)遵循傳統(tǒng)Java虛擬機(jī)的運(yùn)行方式:源碼編譯成平臺(tái)無(wú)關(guān)的字節(jié)碼,隨后字節(jié)碼立即編譯成機(jī)器碼(JIT-Just in time編譯)。ART使用了另一種實(shí)現(xiàn)方式:它使用AOT范例將代碼編譯成前期執(zhí)行的本地代碼。但是,這是如何實(shí)現(xiàn)的呢?

鑒于在Android市場(chǎng)上基于當(dāng)前三大不同的體系結(jié)構(gòu)(MIPS,x86,ARM)催生了多種多樣的平臺(tái),應(yīng)用程序之間相互可移植性(inter-portability)變得十分重要。他們不得不找到一種方式整合兩個(gè)世界:互相可移植性和執(zhí)行本地二進(jìn)制代碼。就目前所知,他們的解決方案在移動(dòng)領(lǐng)域是獨(dú)一無(wú)二的:將中間字節(jié)碼裝運(yùn)成可執(zhí)行代碼,然后在目標(biāo)設(shè)備上執(zhí)行最后的編譯步驟——“提前編譯”。

對(duì)ART進(jìn)一步的觀察顯示:他們?cè)谧詈蟮木幾g步驟中使用了LLVM。這種對(duì)本地代碼的編譯處理過(guò)程在安裝應(yīng)用時(shí)可以流暢地完成。

除此之外,Android小組還面臨著一個(gè)額外的挑戰(zhàn):兼容業(yè)已存在的Dalvik虛擬機(jī)/DEX技術(shù)。為了處理這個(gè)問(wèn)題,他們引入了一種把dex格式轉(zhuǎn)變成新的oat格式的方法。請(qǐng)繼續(xù)閱讀獲取更多的細(xì)節(jié):

2、啟動(dòng)的故事:從dex到oat

讓我們來(lái)探究一下Android是如何在不必重新發(fā)布應(yīng)用的情況下,基于ART執(zhí)行業(yè)已存在的程序。

在接下來(lái)的步驟中,我將使用一些新工具,他們伴隨新的運(yùn)行時(shí)一起出現(xiàn):dex2oat和oatdump。這兩個(gè)工具可以在<aosproot>out/host/<yourplatform>/bin/dex2oat中找到。除此之外,還會(huì)用到一些常見(jiàn)的linux工具如objdump、nm、hexdump和hexedit。

從Dalvik運(yùn)行時(shí)轉(zhuǎn)換到ART之后,當(dāng)系統(tǒng)更新已經(jīng)安裝應(yīng)用時(shí),啟動(dòng)程序花費(fèi)了很長(zhǎng)一段時(shí)間——大約有10分鐘。進(jìn)一步查看ADB輸出可以看到正在發(fā)生些什么:很顯然,dex2oat創(chuàng)建了某種“鏡像”。

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啟動(dòng)后在log中顯示為“art”的這個(gè)進(jìn)程,通過(guò)dex2oat工具創(chuàng)建了一個(gè)巨大的“鏡像”文件。命令行參數(shù)映射包含下面幾部分:

  • 虛擬機(jī)的一些運(yùn)行時(shí)參數(shù)。
  • 將被編譯成鏡像的幾個(gè)dex文件。
  • 輸出的鏡像文件名。
  • 輸出的oat文件名。
  • 一個(gè)包含應(yīng)被編譯成鏡像的類的jar文件。
  • 一個(gè)描述了哪些來(lái)自jar文件的類應(yīng)該被使用的說(shuō)明。

在創(chuàng)建鏡像期間,所有已包含在內(nèi)的dex文件會(huì)被編譯。例如:

1
W/dex2oat ( 397): Verification of void org.ccil.cowan.tagsoup.HTMLSchema.<init>() took 187.968ms

看起來(lái)很熟悉,對(duì)不對(duì)?記得dalvik驅(qū)動(dòng)環(huán)境中的zygote吧?基本情況是,樣版鏡像運(yùn)行了事實(shí)上的應(yīng)用、代碼以及那些被頻繁使用的類??梢悦鞔_的是,xygote沒(méi)有被取代,它依然存在于ART環(huán)境中,你可以用跟dalvik一樣的方式來(lái)處理它。

在更早的啟動(dòng)過(guò)程中,包管理器在每一個(gè)已安裝的應(yīng)用中運(yùn)行dexopt。但除此之外,dex2oat編譯器會(huì)把每一個(gè)已經(jīng)產(chǎn)生的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

好吧?,F(xiàn)在讓我們總結(jié)一下目前為止我們所了解到的內(nèi)容:我們知道ART使用了zygote,就像鏡像一樣,之后很可能執(zhí)行了實(shí)際的應(yīng)用程序。同時(shí)它也進(jìn)行了大量的編譯,甚至是對(duì)框架類的編譯。這意味著著從字面上看,我們熟知的Android整個(gè)系統(tǒng)都被改變了。我認(rèn)為這是一個(gè)暗示:ART不僅僅是一個(gè)“更好的Dalvik”——還意味著范例上的一個(gè)改變。

但是現(xiàn)在,我已經(jīng)開(kāi)始準(zhǔn)備該系列的下一篇。在下一篇中我們將進(jìn)一步查看這種新的可執(zhí)行文件格式:OAT文件分析。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多