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

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

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

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

哈嘍,大家好,我是LittleG。

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

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等后綴的文件說明:

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

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

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

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

 
5.art (optional)
包含APK中列出的某些字符串和類的ART內(nèi)部表示,用于加快應(yī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:

?

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
KSZ8895MQI 1 Micrel Inc Ethernet Transceiver, CMOS, PQFP128, LEAD FREE, PLASTIC, QFP-128
$8.91 查看
9DBV0441AKLF 1 Integrated Device Technology Inc VFQFPN-32, Tray

ECAD模型

下載ECAD模型
$12.45 查看
AFBR-720XPDZ 1 Foxconn Transceiver, 840nm Min, 860nm Max, 10000Mbps(Tx), 10000Mbps(Rx), LC Connector, Board/panel Mount, ROHS COMPLIANT PACKAGE-30
$164.34 查看
谷歌

谷歌

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

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

查看更多

相關(guān)推薦

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

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