unity 5.3打包apk闪退发布的游戏在真机上闪退是什么原因

4948人阅读
最近被一个问题纠缠了好久,终于找到解决办法,这里做个记录。
我们做的一款游戏在编辑器里跑的好好的,一打包的手机上就各种崩溃;
而且是不确定什么时候出现,用logcat查看了系统日志,就看到是异常地址访问的log,没有什么有价值的信息。
重复试了好多次之后,发现每次进一个测试关卡的时候必闪退,于是一路上加日志,希望能知道是哪一句导致程序崩溃。
加到最后,场景加载完了,一切都正常。可以推断加载场景过程没问题,应该是在某一个组件脚本的update里面出问题的。
这下线索又断了,因为挂update的组件太多,而且不知道有哪些组件运行;这里就想到一个想法,我们以后的代码应该都由程序自己去调用update,
不要直接用u3d的update,这样我们可以很容易的知道哪些代码在运行,而且是可以保证调用次序的。
接着想了个办法,就是进场景后,逐个把有update的函数禁用,发现某个组件禁用后就不闪退了,于是问题定位到这个组件的update函数。
通过逐条的增加日志,最终定位到一个空引用访问上,导致程序在安卓机上闪退!怀疑是安卓sdk在运行时的jit直接变成了机器指令,导致可能的空异常。
这个问题让我很惊讶,原来以为会抛出空引用异常,没想到很c#的空指针访问一样会导致进程崩溃。于是组织大家把所有可能为空的地方排查可一遍。
另外在编辑器里没问题,是因为编辑器里加载资源是同步加载的,所以加载完直接使用加载后的对象是没问题的;
但是在手机上要从assertbundle中加载,使用了异步过程,会导致后续的访问可能存在访问空异常;
于是把编辑器里的加载也改成异步加载,编辑器中就能跟手机上一样的加载过程,尽量暴露手机上运行可能出现的问题。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1018645次
积分:10675
积分:10675
排名:第1189名
原创:87篇
转载:462篇
评论:108条
(1)(1)(1)(1)(2)(1)(2)(2)(2)(4)(4)(1)(1)(4)(3)(2)(15)(6)(6)(1)(10)(21)(9)(1)(1)(3)(2)(7)(1)(3)(10)(2)(2)(4)(2)(18)(7)(14)(8)(11)(11)(20)(43)(27)(14)(27)(49)(56)(23)(30)(34)(4)(12)(2)(2)(6)(5)(1)(1)Unity程序闪退原因_ylaier_新浪博客
Unity程序闪退原因
原因1:程序吃内存。表现为内存泄露或加载资源时闪退等。
原因2:程序吃CPU。表现为​程序执行复杂运算时闪退等。
原因3:系统内存回收机制。它按照优先级回收内存。如果内存很紧张的时候会回收掉前&&
台进程,有可能就把我们的程序给杀掉。
原因4:兼容性问题。​程序对目标设备的软硬件环境的兼容情况也会造成闪退。
博客等级:
博客积分:0
博客访问:13,009
关注人气:0
荣誉徽章:}

我要回帖

更多关于 unity打包ios闪退 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信