2012-03-06 148 views

回答

15

This Blog article解釋的ODEX文件的內部:

什麼是ODEX文件?

在Android文件系統中,應用程序與 擴展名爲.apk的包打包在一起。這些應用程序包或APK包含某些 .odex文件,它們的功能是節省空間。這些'odex' 文件實際上是引導前優化的 應用程序的各個部分的集合。這樣做會加快啓動過程,因爲它會預加載應用程序的一部分。另一方面,它也使得 竊取這些應用程序變得困難,因爲在執行之前,部分編碼已經被提取到另一個位置。

+0

如果我希望我的應用程序具有相同的功能(應用程序在odex中運行而不是APK),該怎麼做? – user1253435 2012-03-07 00:32:32

+0

你應該得到一個減號!達爾維克不會優化啓動時間。代碼在編譯器中從高級語言到更低級別進行了優化,只是在這種情況下,dalvik的代碼幾乎是對機器代碼的轉換。這就是爲什麼你可以用C++創建應用程序的原因,而不僅僅是來自java。 – cox 2014-04-05 12:50:03

65

The blog article大多是正確的,但不完整。要充分了解odex文件的功能,您必須瞭解應用程序文件(APK)的工作方式。

申請基本上都是榮耀的ZIP檔案。 java代碼存儲在一個名爲classes.dex的文件中,該文件由Dalvik JVM進行解析,處理後的classes.dex文件的緩存存儲在手機的Dalvik緩存中。

一種ODEX基本上是一個應用程序的classes.dex的預處理版本即執行-準備的Dalvik。當應用程序被索引時,classes.dex將從APK檔案中移除,並且它不會向Dalvik緩存寫入任何內容。沒有提供索引的應用程序最終會得到2個classes.dex文件副本 - APK中的打包文件,以及Dalvik緩存中已處理的文件。自從Dalvik必須提取和處理classes.dex文件以來,第一次啓動需要更長的時間。

如果你正在建設一個自定義ROM,這是一個很好的主意,以最大限度地爲用戶安裝的應用程序的內部存儲空間,以ODEX雙方你的框架JAR文件和應用程序的股票。如果你想主題,那麼只需deodex - >應用你的主題 - > reodex - >發佈。

要真正deodex,使用小型和baksmali:

http://code.google.com/p/smali/wiki/DeodexInstructions

+0

你能分享一下我們如何重新編譯apk文件嗎? – Basher51 2014-08-07 13:51:31

0

ART

藝術,.odex文件包含:

包含AOT編譯代碼的方法APK。

根據文檔:http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure

而且,他們似乎是常規的共享庫,因爲如果你得到任何應用程序,並檢查:

file /data/app/com.android.appname-*/oat/arm64/base.odex 

它說:

base.odex: ELF shared object, 64-bit LSB arm64, stripped 

aarch64-linux-gnu-objdump -d base.odex似乎工作,並給予一些有意義的反彙編(但也有一些垃圾分區NS)。