问题的产生
这个问题一般发生在项目比较大,OO使用良好,泛型继承用的较多的时候。第一次真机测试时,项目终于进入真机测试阶段,之前都是在Unity编辑环境下开发测试,运行的都很良好,信心满满的打包安装,结果闪退。。。,各种代码调试,跟踪都没什么线索。这怎么办?问题很可能出在了AOT的设置上。
解决方案
这个通常是因为你的程序编译的时候给 trampoline 分配的空间太小,而你的程序中又大量使用了泛型、泛型方法调用和接口实现导致的。具体的解决方法就是在 Unity3D 的编译选项 Player Setting 中有一个 AOT Compilation Options 条目,在这个选项条目中加上以下编译参数就好了
nrgctx-trampolines=8192,nimt-trampolines=8192,ntrampolines=4096
加上以后,重新打包测试,看还有没有问题
参数意思
关于上面的三个参数的意思分别如下:
- nrgctx-trampolines=8192 这是留给递归泛型使用的空间,默认是 1024
- nimt-trampolines=8192 这是留给接口使用的空间,默认是 128
- ntrampolines=4096 这是留给泛型方法调用使用的空间,默认是 1024
什么是trampoline
Trampoline 是一些手写的非常短小的用来在 Mono Runtime中执行很多操作的Component Code。主要是通过 JIT 使用到的本地代码宏在运行时动态生成的。它们通常都有与之相对应的 C 方法,在某些较为复