说下最近遇到的一个bug。我写了一个sdk,接入一个游戏的时候,点击sdk界面上的按钮,出现了崩溃。
最开始排查到是使用retrofit+okhttp框架导致的,换成volley、okhttp、原生httpClient都不会崩溃。但是使用Eventbus进行跳转的时候又崩溃了。最后在一个技术大牛的指导下,发现是我的sdk的eventbus库和游戏中一个音频sdk的eventbus库冲突导致,将eventbus换成音频sdk的eventbus库就解决问题了。
崩溃日志如下:
没有显示java层sdk的崩溃,而是系统的dvm库崩溃,无从查起。后来在大牛的指导下,0x0003000a可能是栈溢出,或者申请内存出现导致的,后来才想到可能是eventbus导致的递归调用导致栈溢出崩溃的。最后下载eventbus源码,然后放到自己的应用中,变成自己的包名下的EventBus,这样就不会导致冲突了。总结:写sdk尽量使用原生的api,少用第三方框架,容易导致冲突。