0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Android文件格式詳解

哆啦安全 ? 來源:哆啦安全 ? 2024-01-02 10:21 ? 次閱讀

1.dex文件格式

dex是android虛擬機(jī)的可執(zhí)行字節(jié)碼文件,java文件經(jīng)過javac編譯成class文件,class文件又被dx處理后生成dex文件。

wKgaomWTcyGAespiAABUNfZ3pUw199.png

dex文件分為四大部分: DEX文件頭,索引結(jié)構(gòu)區(qū),data數(shù)據(jù)區(qū),靜態(tài)鏈接數(shù)據(jù)區(qū)。

所有的代碼和數(shù)據(jù)都放在data數(shù)據(jù)區(qū)中,索引結(jié)構(gòu)區(qū)中存放的是data中各種數(shù)據(jù)的對應(yīng)的偏移和索引。

wKgZomWTcyGAKGVvAABTNmV3blM069.png

利用010查看一個(gè)dex文件的信息,可以發(fā)現(xiàn)此文件并沒有靜態(tài)鏈接數(shù)據(jù)區(qū)。

2.odex和oat格式

在android4.4之前,android為了優(yōu)化程序執(zhí)行效率使用的是JIT(just-in-time)即時(shí)編譯,也就是程序運(yùn)行時(shí)編譯。因?yàn)閍pk文件是一個(gè)zip壓縮包的格式,每次系統(tǒng)啟動(dòng)程序時(shí)都需要從apk中讀取dex文件并加載執(zhí)行,為了減少程序啟動(dòng)時(shí)從apk讀取dex文件所需要的,android在apk第一次安裝的時(shí)候dexopt將程序的dex文件進(jìn)行優(yōu)化生成odex文件,并將其放在了/data/dalvik-cache目錄下。等下次apk啟動(dòng)時(shí)直接加載這個(gè)目錄中經(jīng)過優(yōu)化的odex文件減少啟動(dòng)所需要的時(shí)間(優(yōu)化基于當(dāng)前系統(tǒng)的dalvik虛擬機(jī)版本,不同版本上的odex文件無法進(jìn)行兼容)。在程序運(yùn)行時(shí)android虛擬機(jī)會(huì)對一些執(zhí)行頻率較高的熱點(diǎn)函數(shù)進(jìn)行jit編譯生成對應(yīng)的本地代碼,下次再執(zhí)行此函數(shù)的時(shí)候直接執(zhí)行對應(yīng)的本地代碼提高了執(zhí)行的效率,注意jit編譯的代碼只會(huì)存在于內(nèi)存中并不會(huì)持久化保存再磁盤中,下次啟動(dòng)apk后執(zhí)行此函數(shù)還需要解釋執(zhí)行。

在android4.4之后,android使用的是AOT(Ahead-of-time)事前編譯,也就是程序在運(yùn)行前先編譯。oat是ART虛擬機(jī)運(yùn)行的文件,是ELF格式二進(jìn)制文件,包含DEX和編譯的本地機(jī)器指令,oat文件包含DEX文件,因此比ODEX文件占用空間更大。程序在首次安裝的時(shí)候,dex2oat默認(rèn)會(huì)把classes.dex編譯成本地機(jī)器指令,生成ELF格式的OAT文件,并將其放在了/data/dalvik-cache或者是/data/app/packagename/目錄下。ART加載OAT文件后不需要經(jīng)過處理就可以直接運(yùn)行,它在編譯時(shí)就從字節(jié)碼裝換成機(jī)器碼了,因此運(yùn)行速度更快。不過android4.4之后oat文件的后綴還是odex,但是已經(jīng)不是android4.4之前的文件格式,而是ELF格式封裝的本地機(jī)器碼.可以認(rèn)為oat在dex上加了一層殼,可以從oat里提取出dex.

wKgaomWTcyGAWFU6AABrBrcvzT8733.png

因?yàn)榇藭r(shí)的oat文件是一個(gè)標(biāo)準(zhǔn)的elf文件,識(shí)別其是不是oat文件的標(biāo)準(zhǔn)就是看其符號表。

wKgZomWTcyGAUHu5AABXj-L9TYk340.png

oatdata指向的是ELF文件的.rodata節(jié)區(qū),存放了OAT文件頭OATHeader,OAT的DEX文件頭,原始DEX文件的DexFile等信息。

oatexec指向的是ELF文件的.text節(jié)區(qū),這里存放的是編譯生成的指定平臺(tái)的二進(jìn)制代碼。

oatlastword指向的是對應(yīng)oat文件的結(jié)尾。

wKgaomWTcyGAduFFAABpPifzAio955.png

3.vdex文件格式

在android8.0(Android O)之前dex文件嵌入到oat文件本身中,在Android 8.0之后dex2oat將classes.dex優(yōu)化生成兩個(gè)文件oat文件(.odex)和vdex文件(.vdex)

odex文件中包含了本機(jī)代碼的OAT

vdex文件包含了原始的DEX文件副本

wKgZomWTcyGAdnF_AADo2UEo-lU107.png

4.art文件格式

ART虛擬機(jī)在執(zhí)行dex文件時(shí),需要將dex文件中使用的類,字符串等信息轉(zhuǎn)換為自定義的結(jié)構(gòu)。art文件就是保存了apk中使用的一些類,字符串等信息的ART內(nèi)部表示,可以加快程序啟動(dòng)的速度。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3936

    瀏覽量

    127403
  • 文件格式
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    15083
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3787

    瀏覽量

    81043
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    917

    瀏覽量

    28194

原文標(biāo)題:Android的dex、odex、oat、vdex、art文件格式

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RIFF文件格式簡介

    RIFF(Resources Interchange File Format)中文翻譯為資源互換文件格式,是Windows下大部分多媒體文件遵循的一種文件結(jié)構(gòu)。
    的頭像 發(fā)表于 10-07 16:25 ?1739次閱讀
    RIFF<b class='flag-5'>文件格式</b>簡介

    App加固技術(shù)解析:DEX文件格式詳解

    1、DEX文件格式的解析  Android應(yīng)用的源代碼主要分為java與C/C++兩部分,其中java編譯后的文件是DEX文件,也是Android
    發(fā)表于 09-28 11:21

    MP3 文件格式資料

    MP3 文件格式資料
    發(fā)表于 04-08 03:37 ?22次下載

    如何光繪輸出AutoCAD文件格式

    教你光繪輸出AutoCAD文件格式
    發(fā)表于 06-07 15:16 ?36次下載

    .mpp文件格式打開軟件下載

    .mpp文件格式打開
    發(fā)表于 07-07 13:14 ?2517次下載

    適用于IPTV大并發(fā)應(yīng)用的文件格式

    分析交互式網(wǎng)絡(luò)電視(IPTV)大并發(fā)應(yīng)用的特性,提出一種適用于IPTV大并發(fā)應(yīng)用的服務(wù)器內(nèi)部文件格式cl4文件格式。該文件格式采用了符合IPTV大并發(fā)應(yīng)用特性的音視頻數(shù)據(jù)交織、媒體數(shù)
    發(fā)表于 04-15 10:02 ?17次下載

    LabVIEW數(shù)據(jù)文件格式的視頻教程

    LabVIEW數(shù)據(jù)文件格式的視頻教程 LabVIEW數(shù)據(jù)文件格式之華山論
    發(fā)表于 03-26 12:16 ?113次下載

    數(shù)碼相機(jī)伴侶的文件格式

    數(shù)碼相機(jī)伴侶的文件格式              文件格式指的是數(shù)碼相機(jī)伴侶獨(dú)特的文件系統(tǒng)結(jié)構(gòu)在
    發(fā)表于 12-23 10:05 ?879次閱讀

    GIF圖形文件格式文檔

    GIF圖形文件格式文檔 GIF圖形文件格式文檔 GIF圖形文件格式文檔
    發(fā)表于 05-24 10:53 ?2次下載

    GIF文件格式詳解

    GIF文件格式詳解 GIF文件格式詳解 GIF文件格式詳解
    發(fā)表于 05-24 10:53 ?2次下載

    了解LabVIEW數(shù)據(jù)文件格式

    LabVIEW數(shù)據(jù)文件格式之華山論劍視頻教程
    的頭像 發(fā)表于 06-25 00:13 ?4835次閱讀
    了解LabVIEW數(shù)據(jù)<b class='flag-5'>文件格式</b>

    STM32--hex文件格式

    ? ? hex 是 Intel 公司制定的一種使用 ASCII 文本記錄機(jī)器碼或常量數(shù)據(jù)的文件格式,它可以燒錄到MCU中,被MCU執(zhí)行的一種文件格式。一個(gè)hex文件由多條記錄組成,而每條記錄由5個(gè)
    發(fā)表于 12-06 11:21 ?4次下載
    STM32--hex<b class='flag-5'>文件格式</b>

    WAV文件格式詳解

    WAV是微軟公司開發(fā)的一種音頻格式文件,用于保存Windows平臺(tái)的音頻信息資源,它符合資源互換文件格式(Resource Interchange File Format,RIFF)文件規(guī)范。標(biāo)準(zhǔn)
    的頭像 發(fā)表于 10-21 09:52 ?5344次閱讀
    WAV<b class='flag-5'>文件格式</b><b class='flag-5'>詳解</b>

    常用對象文件格式

    電子發(fā)燒友網(wǎng)站提供《常用對象文件格式.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 09:25 ?0次下載
    常用對象<b class='flag-5'>文件格式</b>

    EPS文件格式如何轉(zhuǎn)換 EPS和SVG文件的區(qū)別

    EPS文件格式轉(zhuǎn)換 EPS(Encapsulated PostScript)是一種用于存儲(chǔ)矢量圖形的文件格式,最初由Adobe公司開發(fā)。由于EPS文件在打印時(shí)能夠保持極高的質(zhì)量,并且廣泛被各種
    的頭像 發(fā)表于 11-19 10:31 ?505次閱讀