Unity 打包il2cpp模式时的常见问题分析

Unity 编辑器模式下是采用.net 虚拟机解释执行.net 代码,发布的时候有两种模式,一种是mono虚拟机模式,一种是il2cpp模式。由于iOS AppStore规定不允许使用虚拟机,所以发布到iOS,Unity采用了il2cpp技术,把IL(.net字节码) 的代码转成c++代码,然后再用xcode来进行编译。发布到Android的时候,可以用mono与il2cpp模式,il2cpp由于转成native code直接在硬件CPU上跑,性能要比虚拟机解释执行要高,所以发布Android的时候我们也采用il2cpp。但是开发者会遇到一些问题mono模式下能正常运行,编译il2cpp模式下会出现问题,如闪退等,本文将il2cpp 打包发布可能遇到的问题,进行分类,分析与总结,希望能给大家提供解决思路与方向。

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

il2cpp模式编译错误

首先遇到的问题是使用il2cpp模式下编译C++代码报错。由于Android/iOS不同的版本对编译器(NDK/xcode)的版本要求也是不同的,而大多数同学下载的NDK/xcode 是网络上的一个版本,不一定匹配上unity 编译Android/iOS时对应的版本,所以如果在发布il2cpp模式过程中,当我们遇到编译错误的时候,首先先编译空项目,看看是不是NDK,SDK,xcode的版本不匹配导致的。Unity Hub 现在也集成了一个功能就是安装对应Unity版本对应的NDK与SDK。安装正确的工具链编译问题一般能很轻松的解决。(如下图所示, Unity hub中不同unity版本,安装相关编译工具时的模块化安装)

Mono模式下没问题, il2cpp模式下报类型缺失错误

开发完打包的时候,mono模式下没有问题, il2cpp模式下编译通过,但是运行的时候报”类型缺失的错误”。这也是常见的il2cpp模式下遇到的问题。C++是属于根据依赖进行编译的模式。Il2cpp中,如果我们编写的c#代码没有使用这个类,那么编译完C++代码后,这个类的二进制代码就不会出现在c++的代码中,运行的时候就会导致类型缺失,功能不正常等相关报错。很多同学看到这里就有一个疑问,既然IL的.dll代码里面没有,为何C++的代码会调用呢?给大家举个例子你瞬间就明白了,假设有个资源预制体挂了一个组件,而这个组件只在资源上使用,代码中没有使用,编辑器模式下与mono模式下都能正常运行。而打包il2cpp的时候由于这个组件在代码中没有使用, 所以导致IL code中没有依赖,因此就不会被il2cpp打入进去,导致l2cpp模式下运行的时候类型缺失报错,功能不能正常使用。

了解了出错的原因与原理,解决方案就非常简单在ilcode代码里面加上组件类的代码引用与依赖就可以了,让il2cpp将相关的类与组件打入进去。比如动画的timeline等。

Mono模式没有问题,IL2CPP模式下闪退

最后一类问题就是mono模式下没有问题,il2cpp模式下闪退。闪退其实就是手机app的这个进程由于运行时候的错误,OS必须要杀掉这个进程,而虚拟机解释执行式模式,不容易闪退,因为有虚拟机这一层作为保护隔绝,而对于il2cpp而言,全部已经转成了native 代码,如果运行的时候数据不对,比如除0异常,空指针等会导致OS 直接把进程删掉造成闪退。所以这样就会导致mono模式下不闪退,而il2cpp模式下却直接闪退。

引起这类问题原因有很多,比如上面的类型缺失,可能导致闪退, 还有就是某个代码与数据跑出来缺失异常了,但是mono下由于有虚拟机的保护作用,异常可能被直接忽视了,导致我们认为还在app正常运行,而il2cpp模式下由于没有虚拟机的保护,可能直接被OS 杀掉。

一般解决这类我们问题我们还是要通过隔离的手段,找出运行出错的代码与相关数据,然后分析原因来修正它。而不要老想着 “mono正常,而il2cpp模式下报错,闪退”是不是il2cpp的环境问题。其实很大一部分确实是我们的代码或我们代码跑的数据异常导致的。

今天的分享就到这里了,关注我们,可以学习更多的Unity 游戏开发程序员进阶相关的教程内容。

Unity_IL2CPP常见问题分析相关推荐

  1. pda找不到服务器,PDA连不上服务器常见问题分析.doc

    PDA连不上服务器常见问题分析.doc PDA连不上服务器常见问题分析 请查看PDA的网络通不通,可以先检查WIFI/3G是否连接上网络,如果连接不上,点击PingToots工具,用"pin ...

  2. Web开发常规调试方法与常见问题分析

    一.Web项目基本原理 现在的web项目大都已经前后端独立开发与部署. 前后端独立开发,一般是前端与后端通过web接口(常见的有RESTful与websocket)文档进行交流.前端开发人员先更具业务 ...

  3. can总线配置读入是什么意思_STM32学习笔记—CAN总线收发数据常见问题分析

    CAN,Controller Area Network(控制器局域网络),在汽车电子.工业控制领域的应用比较多,通常用于局域组网. 这是第9篇学习分享文章,<STM32学习笔记>之CAN总 ...

  4. 微信小程序 RTMP 音视频 通话 ffmpeg_音视频常见问题分析和解决:HLS切片丢帧引起的视频卡顿问题排查...

    问题背景: 前两天看读者留言让再写写音视频问题排查方面的思路,前面大概写几篇:<音视频播放疑难杂症分析和解决 :序篇>.<音视频常见问题分析和解决:延时和抖动>.<记一次 ...

  5. 图片上传压缩android,android 图片上传压缩常见问题分析

    图片的上传与压缩是android经常需要用到的步骤,那么,如何解决上传图片oom问题呢?android 图片上传压缩常见问题分析,希望可以帮助大家更加的了解android 图片方面的困惑. 下面,是我 ...

  6. ffmpeg 丢帧 灰屏_音视频常见问题分析和解决:HLS切片丢帧引起的视频卡顿问题排查...

    问题背景: 前两天看读者留言让再写写音视频问题排查方面的思路,前面大概写几篇:<音视频播放疑难杂症分析和解决 :序篇>.<音视频常见问题分析和解决:延时和抖动>.<记一次 ...

  7. 想了解Xtrabackup备份原理和常见问题分析,看这篇就够了

    摘要:本文来自华为云MySQL研发团队,主要分享了MySQL备份工具Xtrabackup的备份过程.华为云数据库团队对其做的优化改进,以及在使用中可能遇到的问题与解决方法. 本文分享自华为云社区< ...

  8. 【Android】【TP】TP开发常见问题分析

    TP开发常见问题&分析 1.TP重点关注范围以及checklist 先附录上TP的内部checklist,所有在列内容都为常见问题切比较严重问题,如下: 上下电时序 Operating Vol ...

  9. 放大器电路在设计过程中常见问题分析及如何解决

    放大器电路介绍 放大器电路,或称放大电路,能增加信号的输出功率.它透过电源取得能量来源,以控制输出信号的波形与输入信号一致,但具有较大的振幅.依此来讲,放大器电路亦可视为可调节的输出电源,用来获得比输 ...

最新文章

  1. python进阶:JSON与枚举
  2. php链接Access数据库代码,PHP连接Access数据库代码
  3. [设计模式]策略模式
  4. halcon 图像差分_Halcon编程-基于纹理的mara检测
  5. 王爽 汇编语言第三版 第8章( 寻址方式 ) --- 数据处理的两个问题
  6. WebService学习总结(二)——WebService相关概念介绍
  7. php mysql刷新表格_PHP和AJAMYSQL数据库刷新表格
  8. python根据频率画出词云_利用pandas+python制作100G亚马逊用户评论数据词云
  9. 计算机六年级基础知识,六年级计算机试题
  10. python菜鸟教程100例-对菜鸟教程的Python一百例的个别改进
  11. guido发布python版本的年份_Guido van Rossum
  12. comsol 超声声场模拟_Comsol Multiphysics 声场仿真模块整体介绍
  13. 华为光纤猫HG8240R设置
  14. js 注释,分号用法
  15. Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time
  16. 被放逐的皇后 金建云
  17. 聊聊编程中的 “魔数”
  18. Android Canvas rotate 和translate 两个方法的研究
  19. Jsp+Servlet+Mysql简单的登录
  20. 2023最新支付宝微信运动步数网页源码+附带原始接口

热门文章

  1. 用事实证明:外包员工完胜正式员工
  2. 支付宝技术认证/职业技能等级认证上线啦~3月1日前免费考
  3. python代码库-哪些 Python 库让你相见恨晚?
  4. 【iOS开发】判断iOS设备是否越狱
  5. 2009教师节短信大全
  6. 计算机操作系统中,缺页次数和缺页中断次数
  7. Linux使用npm安装cnpm
  8. flack框架..学习中
  9. Tomcat10——JVM内存参数配置
  10. 计算机系运动会横幅怎么写,运动会横幅标语(精选50条)