https://myhloli.com/about-il2cpp.html

JIT方式:

Unity的跨平台技术是通过一个Mono虚拟机实现的。而这个虚拟机更新太慢,不能很好地适应众多的平台。
Unity的JIT和AOT实现Unity的JIT和AOT实现

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++编译器编译,以获得更高的效率和更好的兼容性。
Unity的JIT和AOT实现Unity的JIT和AOT实现

 

Android下会生成:

\assets\bin\Data\Managed\           Assembly-CSharp.dll    一般不打包进apk(游戏的控制逻辑,只作为中间文件存放,运行时不会调用)

\lib\armeabi-v7a\                           libil2cpp.so, libmain.so, libunity.so    (libil2cpp.so中包含了游戏控制的native code,和IL2CPP VM功能

Unity的JIT和AOT实现

上图,对libil2cpp.so反编译可见,其中包含il2cpp::vm功能。图中为注册一个控制脚本中的方法。

Managed下托管代码(比如UnityEngine.dll)也会被编译进libil2cpp.so中。

 

相关文章:

  • 2021-10-13
  • 2021-09-28
  • 2022-12-23
  • 2022-12-23
  • 2021-07-19
  • 2021-06-12
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-27
  • 2021-11-13
  • 2022-12-23
相关资源
相似解决方案