https://myhloli.com/about-il2cpp.html
JIT方式:
Unity的跨平台技術是通過一個Mono虛擬機實現的。而這個虛擬機更新太慢,不能很好地適應眾多的平台。
Android下會生成:
\assets\bin\Data\Managed\ Assembly-CSharp.dll (游戲的控制邏輯,運行時調用)
\lib\armeabi-v7a\ libmono.so, libmain.so, libunity.so (libmono.so會完成mono VM的功能)
AOT方式:
unity公司就自行研發了IL2cpp,把本來應該再mono的虛擬機上跑的中間代碼轉換成cpp代碼,這樣再把生成的cpp代碼,利用c++的跨平台特性,
在各個平台上通過對各平台都有良好優化的native c++編譯器編譯,以獲得更高的效率和更好的兼容性。
Android下會生成:
\assets\bin\Data\Managed\ Assembly-CSharp.dll 一般不打包進apk(游戲的控制邏輯,只作為中間文件存放,運行時不會調用)
\lib\armeabi-v7a\ libil2cpp.so, libmain.so, libunity.so (libil2cpp.so中包含了游戲控制的native code,和IL2CPP VM功能)

上圖,對libil2cpp.so反編譯可見,其中包含il2cpp::vm功能。圖中為注冊一個控制腳本中的方法。
Managed下托管代碼(比如UnityEngine.dll)也會被編譯進libil2cpp.so中。

![b54684b854d295f6a80aaa332ae17529[1]_看圖王](/image/aHR0cHM6Ly9ibG9nY2RuLm15aGxvbGkuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE1LzA4L2I1NDY4NGI4NTRkMjk1ZjZhODBhYWEzMzJhZTE3NTI5MV9LYW5UdVdhbmcuanBn.png)
