使用ILRuntime,你可能需要了解這些

是否要選用IL2CPP

總結:最好選用IL2CPP
ios
目前unity只有il2cpp模式的編譯才支持64位系統,mono是不支持的。
蘋果在2016年1月就要求所有新上架遊戲必須支持64位架構,所以必須要選il2cpp。
android
從2019年8月1日起,在Google Play上發佈app必須支持64位體系。從021年8月1日起,Google Play將停掉尚未支持64位體系的APP。
國內上架應該 32 64 都可以

IL2CPP是什麼?

請閱讀這篇文章
https://www.cnblogs.com/decode1234/p/10270911.html
總結一下,對於Unity來說,腳本是這樣運行的:
Mono
Mono虛擬機保證跨平臺,C#這樣遵循CLI(Common Language Infrastructure)規範的高級語言,被先被各自的編譯器編譯成中間語言:IL(中間語言) ,等到需要真正執行的時候,這些IL會被加載到運行時庫,由Mono虛擬機動態的編譯成彙編代碼(JIT)然後在執行。
IL2CPP
現在出現了IL2CPP,顧名思義,就是把IL中間語言轉換成CPP文件,這麼做的原因有很多,比如說Mono的各個移植很費勁,Mono的版權等等,現在可以在得到中間語言IL後,使用IL2CPP將他們重新變回C++代碼,然後再由各個平臺的C++編譯器直接編譯成能執行的原生彙編代碼。

爲何Ios熱更困難

因爲 iOS平臺禁止JIT編譯

AOT(Ahead Of Time)、JIT(Just In Time)、Full AOT

JIT即時編譯:
從名字就能看的出來,即時編譯,或者稱之爲動態編譯,是在程序執行時才編譯代碼,解釋一條語句執行一條語句
AOT靜態編譯:
其實Mono的AOT靜態編譯和JIT並非對立的。AOT同樣使用了JIT來進行編譯,只不過是被AOT編譯的代碼在程序運行之前就已經編譯好了。當然還有一部分代碼會通過JIT來進行動態編譯。
Full AOT
默認情況下AOT並不編譯所有IL代碼,而是在優化和JIT之間取得一個平衡。由於iOS平臺禁止JIT編譯,於是Mono在iOS上需要Full AOT編譯和運行。即預先對程序集中的所有IL代碼進行AOT編譯生成一個本地代碼映像,然後在運行時直接加載這個映像而不再使用JIT引擎
IL2CPP
由於C++是一門靜態語言,這就意味着我們不能使用動態語言的那些酷炫特性。運行時生 成代碼並執行肯定是不可能了,使用了IL2CPP,就完全是AOT方式

ILRuntime原理

官網
https://ourpalm.github.io/ILRuntime/public/v1/guide/principle.html
更直觀的解釋:
在這裏插入圖片描述