2016-02-27 130 views
1

在ART wiki中已經描述了它: https://en.m.wikipedia.org/wiki/Android_Runtime?_e_pi_=7%2CPAGE_ID10%2C1898354483 ,ART在安裝時將apk文件編譯成ELF文件。android art elf和Linux elf文件有什麼區別?

GNU/Linux上的GCC也創建ELF文件作爲輸出,最近代替a.out格式。

我知道在這兩種環境下API和架構都存在差異,但是這兩種格式中是否存在任何結構或任何其他顯着差異?

這些格式是否相互兼容,如果架構相同(Android已經移植到x86)?

或者這兩種文件格式完全不同嗎?

+0

解釋是[這裏](https://www.google.com/events/io/io14videos/b750c8da-aebe-e311-b297-00155d5066d7)6:30 - 10:00 – Enkelli

回答

2

自制解釋:在PDF (Dalvik and ART)中,你可以發現「OAT文件實際上嵌入在ELF目標文件中」(在PDF的第16頁上,你可以看到OAT結構)。文件結構與wiki相同。這是可能的,因爲ELF「通過設計靈活且可擴展,並且不受任何特定處理器或體系結構的約束」。

elf format on wikipedia:使用Android Runtime(ART),默認Android 5.0爲「Lollipop」後,所有應用程序在安裝時都會編譯爲本機ELF二進制文件。

結論:回答你的問題是gcc elf和android elf是相同的文件格式。更多關於你可以在wiki找到的格式。

更新

「這些格式相互兼容,如果architechture是相同的」

Readelf爲Android燕麥文件(我的應用程序之一檢查)表明,燕麥文件類型是「DYN(共享對象文件)」。它與.so文件類似,如果您的項目使用jni庫,您可以看到.so文件。由於「仿生學系統庫函數和動態鏈接器」(在android中使用),即使爲相同的體系結構構建,這些精靈文件也不能與通常的GNU/Linux精靈文件兼容。更多描述爲什麼他們不兼容,你可以找到here。仿生於wiki

+0

這些格式是否兼容其他,如果建築是相同的(作爲android已被移植到x86)?..這個問題還沒有得到解答 –

+0

我添加更多的問題更新(沒有張貼在評論中,因爲我試圖添加更多的描述這在評論中看起來很尷尬)。 –