加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

android開(kāi)發(fā)帶有odex, oat, vdex, art等后綴的文件,都是什么含義?

09/21 10:55
4.6萬(wàn)
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

哈嘍,大家好,我是LittleG。

雖然我主要是做底層驅(qū)動(dòng)開(kāi)發(fā),但平時(shí)經(jīng)常會(huì)看到android應(yīng)用編譯出來(lái)帶有odex, oat, vdex, art等后綴的文件,不明其義,比較困惑,所以專門(mén)查閱整理學(xué)習(xí)了下,寫(xiě)篇文章記錄一下。

ref:

https://blog.csdn.net/u010164190/article/details/103328654

https://lief.quarkslab.com/doc/latest/tutorials/10_android_formats.html

有關(guān)odex, oat, vdex, art等后綴的文件說(shuō)明:

1.dex
java程序編譯成class后,dx工具將所有class文件合成一個(gè)dex文件,dex文件是jar文件大小的50%左右.

 
2.odex(Android5.0之前)全稱:Optimized DEX;即優(yōu)化過(guò)的DEX.
Android5.0之前APP在安裝時(shí)會(huì)進(jìn)行驗(yàn)證和優(yōu)化,為了校驗(yàn)代碼合法性及優(yōu)化代碼執(zhí)行速度,驗(yàn)證和優(yōu)化后,會(huì)
產(chǎn)生ODEX文件,運(yùn)行Apk的時(shí)候,直接加載ODEX,避免重復(fù)驗(yàn)證和優(yōu)化,加快了Apk的響應(yīng)時(shí)間.
注意:優(yōu)化會(huì)根據(jù)不同設(shè)備上Dalvik虛擬機(jī)版本、Framework庫(kù)的不同等因素而不同,在一臺(tái)設(shè)備上被優(yōu)化過(guò)
的ODEX文件,拷貝到另一臺(tái)設(shè)備上不一定能夠運(yùn)行。

 
3.oat(Android5.0之后)
oat是ART虛擬機(jī)運(yùn)行的文件,是ELF格式二進(jìn)制文件,包含DEX和編譯的本地機(jī)器指令,oat文件包含DEX文件,因此比ODEX文件占用空間更大。
Android5.0以后在編譯的時(shí)候(此處指系統(tǒng)預(yù)制app,如果通過(guò)adb install或者商店安裝,在安裝時(shí)
dex2oat把dex編譯為odex的ELF格式文件)dex2oat默認(rèn)會(huì)把classes.dex翻譯成本地機(jī)器指令,生成ELF格
式的OAT文件,ART加載OAT文件后不需要經(jīng)過(guò)處理就可以直接運(yùn)行,它在編譯時(shí)就從字節(jié)碼裝換成機(jī)器碼了,因
此運(yùn)行速度更快。不過(guò)android5.0之后oat文件還是以.odex后綴結(jié)尾,但是已經(jīng)不是android5.0之前的文件
格式,而是ELF格式封裝的本地機(jī)器碼.可以認(rèn)為oat在dex上加了一層殼,可以從oat里提取出dex.

 
4.vdex
Android8.0以后加入的,包含APK的未壓縮DEX代碼,另外還有一些旨在加快驗(yàn)證速度的元數(shù)據(jù)。

 
5.art (optional)
包含APK中列出的某些字符串和類的ART內(nèi)部表示,用于加快應(yīng)用啟動(dòng)速度。

 
注意:Android5.0以后在/data/dalvik-cache目錄下的.dex文件已經(jīng)不是android5.0之前的dex文件,
它是ELF文件,可以使用file命令查看如下:

 
# file system@app@Camera2@Camera2.apk@classes.dex
system@app@Camera2@Camera2.apk@classes.dex: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, stripped

以下是關(guān)于OAT的形成圖解:

ELF格式oat :

java to oat:

?

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
ST3215SB32768B0HSZA1 1 Kyocera AVX Components Quartz Crystal,

ECAD模型

下載ECAD模型
暫無(wú)數(shù)據(jù) 查看
KSZ8895RQXIA 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP128

ECAD模型

下載ECAD模型
$7.22 查看
HFBR-2528 1 Hewlett Packard Co Receiver, 5Mbps, DIP, Through Hole Mount
暫無(wú)數(shù)據(jù) 查看
谷歌

谷歌

谷歌公司(Google Inc.)成立于1998年9月4日,由拉里·佩奇和謝爾蓋·布林共同創(chuàng)建,被公認(rèn)為全球最大的搜索引擎公司。谷歌是一家位于美國(guó)的跨國(guó)科技企業(yè),業(yè)務(wù)包括互聯(lián)網(wǎng)搜索、云計(jì)算、廣告技術(shù)等,同時(shí)開(kāi)發(fā)并提供大量基于互聯(lián)網(wǎng)的產(chǎn)品與服務(wù),其主要利潤(rùn)來(lái)自于關(guān)鍵詞廣告等服務(wù)。

谷歌公司(Google Inc.)成立于1998年9月4日,由拉里·佩奇和謝爾蓋·布林共同創(chuàng)建,被公認(rèn)為全球最大的搜索引擎公司。谷歌是一家位于美國(guó)的跨國(guó)科技企業(yè),業(yè)務(wù)包括互聯(lián)網(wǎng)搜索、云計(jì)算、廣告技術(shù)等,同時(shí)開(kāi)發(fā)并提供大量基于互聯(lián)網(wǎng)的產(chǎn)品與服務(wù),其主要利潤(rùn)來(lái)自于關(guān)鍵詞廣告等服務(wù)。收起

查看更多

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

記錄和分享C/C++、Linux、ARM、Android、IoT相關(guān)知識(shí)。技術(shù)相伴于生活和成長(zhǎng),愿你我永為少年,心中有火,眼中有光,始保熱情。