Bugly在Android4.x Crash Bug【Unity】

发表于2017-03-10
评论1 1.9k浏览

Bugly是一个可提供问题页面截图、日志、机型、网络等信息的问题反馈工具,旨在方便用户随时随地反馈产品问题。而下面我要给大家介绍的是Bugly在Android4.x Crash Bug的解决办法,一起来看看吧。

Bug类似:

JNI ERROR (app bug): accessed stale local reference 0xbc00021 (index 0 in a table of size 0)
VM aborting
Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 30944 

下载Bugly 的Unity版本,我们这边使用的是v1.5.2版本。
需要修改的文件:BuglyUnitySampleAssetsPluginsBuglyPluginsBuglyAgent.cs,该文件主要是调用Android,iOS代码,其中Android对应BuglyUnitySampleAssetsPluginsBuglyPluginsAndroidlibsbuglyagent.jar包

1、先说下在Android4.x上 Bugly导致程序Crash的问题,由于Android4.x会将static 变量GC回收,不可控制,在调用静态变量时,可能已经回收了Read a null object,导致Crash。
2、BuglyAgent.cs 一开始申明了一个static AndroidJavaClass GameAgent,然后在要访问Java层方法的时候,直接GameAgent.CallStatic调用,这方式本应该没什么问题,然而在Android4.x下由于操作系统更改过对static变量的回收机制,GameAgent.CallStatic调用的可能就是个null的。
3、有两种方式可以修改这个Bug,我们推荐这个,也是建议的,不需要去需改buglyagent.jar,而是直接修改BuglyAgent.cs .附上代码:


代码插入出问题,提交不了,详情的参考我在简书分享的文章。谢谢!!!

每次调用Java层代码都 new一个AndroidJavaClass 变量出来,用它来调用Java层方法,这样就不会crash。

4、另一种方式就是buglyagent.jar里面需要CSharp访问的方法把static去掉,改为非静态的,GameAgent.CallStatic 改为GameAgent.Call, 本文推荐第一种,测试可用, 把上面的脚本替换你的脚本就OK了。

5、还需要注意的一点就是Bugly的初始化需要在Java层初始化,建议在主Activity的OnCreate进行。详细参考Android介入方式。

【原创】转载请保留原文链接http://www.jianshu.com/p/e0d8865b17b1

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引