在 Android 上使用 MapboxGL 的 React Native 项目中的 EsxFramebufferObject::DetachAll(EsxContext*) 段错误崩溃

问题描述

所以这次崩溃已经成为我存在的祸根 3 个月了。

Google 单枪匹马地将我们置于“不良行为”阈值之上。我从来没有亲身经历过,我只知道我们每个月有数百名用户因这次崩溃而受到影响。

崩溃发生在 libGLESv2_adreno 内部,libGLESv2_adreno 是一个 libGLESv2_adreno,它为在 Adreno GPU 上运行的嵌入式系统提供 OpenGL。

因此,它只影响带有 Adreno GPU 的 Android 9 设备,这里有一些违规者:

  • 三星 galaxy S8
  • LGE LG Stylo 5
  • LGE LG G7 ThinQ
  • 摩托罗拉 Moto Z(3)
  • 配备蓝宝石防护罩的京瓷 DuraForce PRO 2

这是一个使用 MapBoxGL 的 React Native 项目。事实上,我什至在这里发现了同样的问题: https://github.com/mapbox/mapbox-gl-native-android/issues/264

遗憾的是,这不是我们使用的包..这是我们使用的: https://github.com/react-native-mapbox-gl/maps

而且我也不知道这是一个 mapBox 问题,这个回溯中确实没有任何线索:

signal 11 (SIGSEGV),code 1 (SEGV_MAPERR)

backtrace:
  #00  pc 000000000012ae70  /system/vendor/lib64/egl/libGLESv2_adreno.so (EsxFramebufferObject::DetachAll(EsxContext*)+56)
  #00  pc 00000000001fda4c  /system/vendor/lib64/egl/libGLESv2_adreno.so (EglContext::UnmakeCurrentEsx()+308)
  #00  pc 00000000001fd8c0  /system/vendor/lib64/egl/libGLESv2_adreno.so (EglContext::UnmakeCurrent()+128)
  #00  pc 00000000001fe888  /system/vendor/lib64/egl/libGLESv2_adreno.so (EglThreadList::SearchCurrentdisplayAndUnmake(Egldisplay*)+224)
  #00  pc 00000000001fe468  /system/vendor/lib64/egl/libGLESv2_adreno.so (Egldisplay::Terminate(int)+168)
  #00  pc 00000000001f4864  /system/vendor/lib64/egl/libGLESv2_adreno.so (EglApi::Terminate(void*)+84)
  #00  pc 000000000001115c  /system/lib64/libEGL.so (android::egl_display_t::terminate()+128)
  #00  pc 000000000006f9a8  /system/lib64/libgui.so (android::GLConsumer::EglImage::~EglImage()+80)
  #00  pc 000000000006f7ec  /system/lib64/libgui.so (android::GLConsumer::abandonLocked()+68)
  #00  pc 0000000000065ad0  /system/lib64/libgui.so (android::ConsumerBase::onLastStrongRef(void const*)+48)
  #00  pc 00000000001687bc  /system/lib64/libandroid_runtime.so (android::SurfaceTexture_release(_jnienv*,_jobject*)+80)
  #00  pc 000000000042982c  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.graphics.Camera.nativeConstructor [DEDUPED]+124)
  #00  pc 000000000088eb58  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.graphics.SurfaceTexture.release+40)
  #00  pc 0000000000d995dc  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.TextureView.releaseSurfaceTexture+252)
  #00  pc 0000000000d9a048  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.TextureView.onDetachedFromWindowInternal+248)
  #00  pc 0000000000cd1c20  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.View.dispatchDetachedFromWindow+192)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000da12c0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewGroup.dispatchDetachedFromWindow+240)
  #00  pc 0000000000d04f0c  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewRootImpl.dispatchDetachedFromWindow+188)
  #00  pc 0000000000d05884  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewRootImpl.doDie+180)
  #00  pc 0000000000d049b4  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.ViewRootImpl.die+68)
  #00  pc 0000000000c0c50c  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.WindowManagerGlobal.removeViewLocked+316)
  #00  pc 0000000000c0da4c  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.WindowManagerGlobal.removeView+220)
  #00  pc 0000000000dad9e4  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.view.WindowManagerImpl.removeViewImmediate+68)
  #00  pc 000000000090996c  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.app.ActivityThread.handleDestroyActivity+316)
  #00  pc 0000000000af9468  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.app.servertransaction.DestroyActivityItem.execute+136)
  #00  pc 00000000008134a0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.app.servertransaction.TransactionExecutor.executeLifecycleState+416)
  #00  pc 0000000000813b30  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.app.servertransaction.TransactionExecutor.execute+304)
  #00  pc 00000000008f6a78  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.app.ActivityThread$H.handleMessage+1112)
  #00  pc 0000000000b26a94  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.os.Handler.dispatchMessage+180)
  #00  pc 0000000000b29b90  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.os.Looper.loop+1264)
  #00  pc 0000000000903948  /system/framework/arm64/boot-framework.oat (offset 0x420000) (android.app.ActivityThread.main+680)
  #00  pc 000000000055844c  /system/lib64/libart.so (art_quick_invoke_static_stub+604)
  #00  pc 00000000000cfce8  /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*,unsigned int*,unsigned int,art::JValue*,char const*)+232)
  #00  pc 000000000045e630  /system/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedobjectAccessAlreadyRunnable const&,art::ArtMethod*,art::(anonymous namespace)::ArgArray*,char const*)+104)
  #00  pc 0000000000460084  /system/lib64/libart.so (art::InvokeMethod(art::ScopedobjectAccessAlreadyRunnable const&,_jobject*,unsigned long)+1440)
  #00  pc 00000000003ef520  /system/lib64/libart.so (art::Method_invoke(_jnienv*,_jobjectArray*)+52)
  #00  pc 000000000011f7e4  /system/framework/arm64/boot.oat (offset 0x115000) (java.lang.class.getDeclaredMethodInternal [DEDUPED]+180)
  #00  pc 0000000000e11f08  /system/framework/arm64/boot-framework.oat (offset 0x420000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+136)
  #00  pc 0000000000e18aa0  /system/framework/arm64/boot-framework.oat (offset 0x420000) (com.android.internal.os.ZygoteInit.main+2208)
  #00  pc 000000000055844c  /system/lib64/libart.so (art_quick_invoke_static_stub+604)
  #00  pc 00000000000cfce8  /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*,char const*)+104)
  #00  pc 000000000045e290  /system/lib64/libart.so (art::InvokeWithVarargs(art::ScopedobjectAccessAlreadyRunnable const&,_jmethodID*,std::__va_list)+424)
  #00  pc 0000000000362d8c  /system/lib64/libart.so (art::JNI::CallStaticVoidMethodV(_jnienv*,_jclass*,std::__va_list)+652)
  #00  pc 00000000000b934c  /system/lib64/libandroid_runtime.so (_jnienv::CallStaticVoidMethod(_jclass*,...)+116)
  #00  pc 00000000000bbfa4  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*,android::Vector<android::String8> const&,bool)+768)
  #00  pc 0000000000004b84  /system/bin/app_process64 (main+1832)
  #00  pc 00000000000c9ec8  /system/lib64/libc.so (__libc_init+88)

有人特别擅长阅读神秘的回溯来确定问题的根源吗? 关于如何更好地调试它有什么建议吗?

如果有办法对上面的代码进行去符号化,我会很高兴,但我认为这需要 GPU lib 符号文件.. 也许我错了..

非常感谢!

更新: 此问题仍在继续(它仍会出现在 Sentry 中),但现在 Google Play Console 已将其过滤掉,因此我们的应用现在低于不良行为标记。我最好的猜测是,Google 决定不因 GPU 级别的问题而惩罚应用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)