1

所以这次崩溃一直是我存在 3 个月的祸根。

它单枪匹马地让我们超过了谷歌的不良行为门槛。我从来没有亲身经历过,我只知道我们每个月都有数百名用户经历了这次崩溃。

崩溃发生在 libGLESv2_adreno 内部,这是一个为在 Adreno GPU 上运行的嵌入式系统执行 OpenGL 的库,该 GPU 是 Qualcomm 专用的 GPU。

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

  • 三星盖乐世 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*, art::JValue*, char const*)+104)
  #00  pc 0000000000460084  /system/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1440)
  #00  pc 00000000003ef520  /system/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _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*, 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*, art::JValue*, char const*)+104)
  #00  pc 000000000045e290  /system/lib64/libart.so (art::InvokeWithVarArgs(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+424)
  #00  pc 0000000000362d8c  /system/lib64/libart.so (art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+652)
  #00  pc 00000000000b934c  /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+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 控制台已将其过滤掉,因此我们的应用程序现在低于不良行为标记。我最好的猜测是,谷歌决定不因 GPU 级别的问题而惩罚应用程序?

4

0 回答 0