Help !!! JsbBridge 的 So 线上 Crash

新上架商店, 模拟器和测试机无复现, GP 后台显示崩溃占比 40%
不知道该如何排查这个问题了, 求 help ~
有没有思路我去排查排查, 手动 @jare

  • Creator 版本:3.7.2, 对引擎无修改
  • 目标平台: Android
  • 重现方式:
// Android 层调用
JsbBridgeWrapper.getInstance().dispatchEventToScript("on_rv_loaded");
  • 手机型号: 范围很广, v8a, v7a 均有, SDK 10~13 均有

  • 编辑器操作系统:Apple M1 Pro, Version 13.3.1 (22E261)

  • 首个报错:

backtrace:
  #00  pc 0x00000000002d34f4  /data/app/~~mccd9y7Sr09y4009BI9ZHA==/com.xxx.pkg-289b-Ja9HB1CIOIKNGDOXQ==/split_config.arm64_v8a.apk!libcocos.so (Java_com_cocos_lib_JsbBridge_nativeSendToScript+84)
  #01  pc 0x0000000000461d54  /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+148)
  #02  pc 0x0000000000209398  /apex/com.android.art/lib64/libart.so (nterp_helper+152)
  #03  pc 0x000000000051eede  /data/app/~~mccd9y7Sr09y4009BI9ZHA==/com.xxx.pkg-289b-Ja9HB1CIOIKNGDOXQ==/oat/arm64/base.vdex (com.cocos.lib.JsbBridge.sendToScript+2)
  #04  pc 0x0000000000209334  /apex/com.android.art/lib64/libart.so (nterp_helper+52)
  #05  pc 0x000000000051edec  /data/app/~~mccd9y7Sr09y4009BI9ZHA==/com.xxx.pkg-289b-Ja9HB1CIOIKNGDOXQ==/oat/arm64/base.vdex (com.cocos.lib.JsbBridgeWrapper.dispatchEventToScript)
  #06  pc 0x000000000020a254  /apex/com.android.art/lib64/libart.so (nterp_helper+3924)
  #07  pc 0x0000000000513f0c  /data/app/~~mccd9y7Sr09y4009BI9ZHA==/com.xxx.pkg-289b-Ja9HB1CIOIKNGDOXQ==/oat/arm64/base.vdex (com.cocos.game.JsbSdkBridge.onRvLoaded+12)
  #08  pc 0x0000000000209334  /apex/com.android.art/lib64/libart.so (nterp_helper+52)
  #09  pc 0x0000000000515040  /data/app/~~mccd9y7Sr09y4009BI9ZHA==/com.xxx.pkg-289b-Ja9HB1CIOIKNGDOXQ==/oat/arm64/base.vdex (com.cocos.game.applovin.AppLovinRvMgr.onAdLoaded+56)
  #10  pc 0x000000000020b120  /apex/com.android.art/lib64/libart.so (nterp_helper+7712)
  #11  pc 0x0000000000489648  /data/app/~~mccd9y7Sr09y4009BI9ZHA==/com.xxx.pkg-289b-Ja9HB1CIOIKNGDOXQ==/oat/arm64/base.vdex (com.applovin.impl.sdk.utils.n$7.run+24)
  #12  pc 0x0000000000d349a4  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (android.os.Handler.dispatchMessage+84)
  #13  pc 0x0000000000d397ec  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (android.os.Looper.loopOnce+1276)
  #14  pc 0x0000000000d391b0  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (android.os.Looper.loop+1232)
  #15  pc 0x000000000093ce68  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (android.app.ActivityThread.main+1912)
  #16  pc 0x0000000000458600  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+576)
  #17  pc 0x000000000048b39c  /apex/com.android.art/lib64/libart.so (_jobject* art::InvokeMethod<(art::PointerSize)8>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1560)
  #18  pc 0x000000000048ad5c  /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*) (.__uniq.165753521025965369065708152063621506277)+48)
  #19  pc 0x00000000003d6148  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (art_jni_trampoline+120)
  #20  pc 0x00000000010e1620  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+144)
  #21  pc 0x00000000010f1614  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (com.android.internal.os.ZygoteInit.main+4484)
  #22  pc 0x0000000000458600  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+576)
  #23  pc 0x0000000000589dfc  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+912)
  #24  pc 0x0000000000606de4  /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+160)
  #25  pc 0x00000000000c0cd8  /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+120)
  #26  pc 0x00000000000cd224  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+948)
  #27  pc 0x0000000000002560  /system/bin/app_process64 (main+1280)
  #28  pc 0x0000000000074dd0  /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+96)

有点抓瞎现在, 没有线索
接下来想到能改的就只能是把 dispatchEventToScript 放到 CocosHelper.runOnGameThread 里
可是这问题要是改完再提审去测, 一次成本也忒高了, 有没有哪位大哥有思路启发一下?

考虑线程的问题吧

1赞

嗯嗯, 今天发个带 runOnGameThread 的版本试试看

自己来更新一下, 手动设置游戏线程以后, 问题得到缓解
所以

广告 SDK 对游戏内容的回调通知, 最好放在 CocosHelper.runOnGameThread 下执行
引擎的 JsbBridgeWrapper 没有做这件事儿 (可以期待一下官方可以加上)

加完之后,问题减少,但是还会发生呀

上述的问题,我已经把回调放再CocosHelper.runOnGameThread线程里调用了,情况确实少了。但是还是有存在这个报错情况。请问这块怎么来杜绝?