Creator3.7.4 spine有概率导致Android闪退

项目昨天上线的谷歌应用商店,然后到目前为止有大量的崩溃日志集中在一个问题上,报错日志如下


pid: 0, tid: 19305 >>> com.xx.xx <<<

backtrace:

#00 pc 0x000000000085427c /data/app/com.xx.xx-nAtFBSq5GFvRAMtDSjYHeQ==/split_config.arm64_v8a.apk!libcocos.so (spine::SkeletonRenderer::render(float)+864) (BuildId: )

#01 pc 0x0000000000850c5c /data/app/com.xx.xx-nAtFBSq5GFvRAMtDSjYHeQ==/split_config.arm64_v8a.apk!libcocos.so (cc::middleware::MiddlewareManager::render(float)+208) (BuildId: )

#02 pc 0x0000000000bb9670 /data/app/com.xx.xx-nAtFBSq5GFvRAMtDSjYHeQ==/split_config.arm64_v8a.apk!libcocos.so (js_cc_middleware_MiddlewareManager_render(se::State&)+4096) (BuildId: )

#03 pc 0x00000000008cb43c /data/app/com.xx.xx-nAtFBSq5GFvRAMtDSjYHeQ==/split_config.arm64_v8a.apk!libcocos.so (jsbFunctionWrapper(v8::FunctionCallbackInfov8::Value const&, bool ()(se::State&), char const)+192) (BuildId: )

#04 pc 0x00000000016016f0 /data/app/com.xx.xx-nAtFBSq5GFvRAMtDSjYHeQ==/split_config.arm64_v8a.apk!libcocos.so (Builtins_CallApiCallback+4096) (BuildId: )

查看论坛有类似的问题但是不确定解决方案,故此发帖求大佬们给一个解决方案,目前崩溃率超过了谷歌的阈值会影响曝光率,急急急!!!

奇怪了 这spine啊,每天要是见不到几个报问题的帖子,那才是问题的,
到底是spine家的问题?还是COCOS家得问题?

1赞

很无奈呀,我这也是第一次搞原生

额外补充


pid: 0, tid: 16617 >>> com.xx.xx <<<

backtrace:

#00 pc 0x0000000000913450 /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/split_config.arm64_v8a.apk!libcocos.so (Java_com_cocos_lib_websocket_CocosWebSocket_nativeOnClosed+76) (BuildId: com.xx.xx)

#01 pc 0x000000000033aa80 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (art_jni_trampoline+128)

#02 pc 0x0000000000781d9c /apex/com.android.art/lib64/libart.so (nterp_helper+7468)

#03 pc 0x00000000002c11ec /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (com.cocos.lib.websocket.CocosWebSocket.onClosed+80)

#04 pc 0x0000000000780fc4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924)

#05 pc 0x000000000099eaf6 /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (org.cocos2dx.okhttp3.internal.ws.RealWebSocket.onReadClose+106)

#06 pc 0x0000000000781de4 /apex/com.android.art/lib64/libart.so (nterp_helper+7540)

#07 pc 0x000000000099f028 /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (org.cocos2dx.okhttp3.internal.ws.WebSocketReader.readControlFrame+296)

#08 pc 0x0000000000780fc4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924)

#09 pc 0x000000000099eede /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (org.cocos2dx.okhttp3.internal.ws.WebSocketReader.processNextFrame+14)

#10 pc 0x0000000000780fc4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924)

#11 pc 0x000000000099ea72 /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (org.cocos2dx.okhttp3.internal.ws.RealWebSocket.loopReader+14)

#12 pc 0x0000000000780fc4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924)

#13 pc 0x000000000099e0b2 /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (org.cocos2dx.okhttp3.internal.ws.RealWebSocket$2.onResponse+150)

#14 pc 0x0000000000781de4 /apex/com.android.art/lib64/libart.so (nterp_helper+7540)

#15 pc 0x000000000098c926 /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (org.cocos2dx.okhttp3.RealCall$AsyncCall.execute+38)

#16 pc 0x0000000000780fc4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924)

#17 pc 0x000000000098e15a /data/app/~~Pbm_5YFCqb6ud67oagvMxA==/com.xx.xx-c6NyBk5OOi46BRO9vppe6A==/oat/arm64/base.vdex (org.cocos2dx.okhttp3.internal.NamedRunnable.run+34)

#18 pc 0x00000000005344c4 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor.runWorker+724)

#19 pc 0x0000000000531df8 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor$Worker.run+56)

#20 pc 0x000000000040c8e0 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (java.lang.Thread.run+64)

#21 pc 0x0000000000368774 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612)

#22 pc 0x0000000000353f04 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+132)

#23 pc 0x0000000000947a48 /apex/com.android.art/lib64/libart.so (art::detail::ShortyTraits<(char)86>::Type art::ArtMethod::InvokeInstance<(char)86>(art::Thread*, art::ObjPtrart::mirror::Object, art::detail::ShortyTraits<>::Type…)+60)

#24 pc 0x000000000061afcc /apex/com.android.art/lib64/libart.so (art::thread::CreateCallback(void*)+1344)

#25 pc 0x000000000061aa7c /apex/com.android.art/lib64/libart.so (art::thread::CreateCallbackWithUffdGc(void*)+8)

#26 pc 0x00000000000be888 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208)

#27 pc 0x000000000005b370 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

补充


pid: 0, tid: 5620 >>> com.xx.xx <<<

backtrace:

#00 pc 0x0000000000c25338 /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (se::Class* JSBClassType::findClassspine::BoneData(spine::BoneData const*)+48) (BuildId: com.xx.xx)

#01 pc 0x0000000000c25220 /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (std::__ndk1::enable_if<!std::is_pointer<spine::BoneData const>::value, bool>::type native_ptr_to_seval<spine::BoneData const>(spine::BoneData const&, se::Value*, bool*)+48) (BuildId: com.xx.xx)

#02 pc 0x0000000000bf3eb4 /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (js_spine_Bone_getData(se::State&)+4096) (BuildId: com.xx.xx)

#03 pc 0x00000000008cb43c /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (jsbFunctionWrapper(v8::FunctionCallbackInfov8::Value const&, bool ()(se::State&), char const)+192) (BuildId: com.xx.xx)

#04 pc 0x0000000001752c4c /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo)+4096) (BuildId: com.xx.xx)

#05 pc 0x00000000017522ac /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (v8::internal::MaybeHandlev8::internal::Object v8::internal::(anonymous namespace)::HandleApiCallHelper(v8::internal::Isolate*, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::FunctionTemplateInfo, v8::internal::Handlev8::internal::Object, v8::internal::BuiltinArguments)+4096) (BuildId: com.xx.xx)

#06 pc 0x0000000001751a3c /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*)+4096) (BuildId: com.xx.xx)

#07 pc 0x0000000001669b28 /data/app/~~cLX9rjYzz1UuiPcCeBtHxg==/com.xx.xx-LHsznYk1GIocTxaWr6UBQQ==/split_config.arm64_v8a.apk!libcocos.so (Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit+4096) (BuildId: com.xx.xx)

一般都是切换active或者动态切换skentonData导致的。
可以考虑active=false切换,或者干脆直接别切换,别考虑性能先,先把问题解决了

或者可以考虑spine中是不是使用了 一些高级技术之类的

没有动态切换skentonData了,都是根据url做的对象池

请问你是否知道出现报错时,spine 组件是否只是在播放动画然后没有其它操作?我们需要了解发生错误时,项目层正在使用 spine 做什么

我们这边能获取到信息也是谷歌后台提供的那些,确实不知道spine组件当时的行为

确实也是因为目前能够获取到的信息量太少,测试时无法复现

你们是否有定制了 spine 模块相关的代码?

没有,只有在ts代码这边做对象池维护spine对象

你们在项目中调用 spine bone 的 getData 是吗?

没有的,我们项目都没有见过这个

麻烦你对 js_spine_Bone_getData 这个 jsb C++ 代码位置进行断点 debug ,查一下调用此代码的堆栈,看下是项目层调的,还是引擎这边

在c++这边断点没搞过,还要研究研究 :joy:


断点看的的堆栈貌似也看不出来

能否先告诉我们在目前查不到问题的情况下是否可以先规避掉这个报错,让应用能继续运行下去而不是直接闪退



目前由于你这边能提供的信息不足以判断找出具体问题原因,我这边提供一些在 3.8.x 版本上修复的一些 spine 崩溃问题代码记录,你们可以尝试合并一下修复代码解决问题。