1. 程式人生 > >可移植的oat檔案

可移植的oat檔案

oat檔案是不能移植的,但通過修改libart-compiler,生成可以移植的oat檔案。

相關程式碼在這裡:

http://androidxref.com/6.0.1_r10/xref/art/compiler/driver/compiler_driver-inl.h#308

讓IsFastInvoke永遠返回false,那麼生成的oat就是可以移植的了。

fast_path是art的一種優化模式,作用跟linux下的懶繫結一樣

讓編譯出來的oat在執行函式呼叫時,呼叫的是boot.art裡的DexCache的方法

DexCache裡的所有方法,一開始指向art_quick_resolution_trampoline,用來尋找真正的方法,

找到以後,把真正的方法地址寫到DexCache裡面

如果去掉fast_path,那麼生成的函式呼叫程式碼,再也不使用DexCache,每次都是全新的查詢。

當然,也就與boot.art沒有關係了,這樣一樣,就可以在不同的手機間拷貝了。