在OnePlus 6上显示广告时,应用程序崩溃

Sam*_*ekl 6 android google-dfp double-click-advertising google-play-console

我们在Google Play商店中发布了一个应用,可以显示来自Google DFP广告管理系统的广告.

在某些广告中,应用程序在OnePlus 6上崩溃.我们在崩溃报告中没有得到堆栈跟踪,但在Google Play控制台中收到错误日志,如下所示.我们确信它是由广告引起的,因为它只出现在有广告的版本上.此外,在广告呈现期间会出现崩溃.

OnePlus 6崩溃

Google Play中的回溯会针对每次崩溃显示以下日志:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> com.myapp.app <<<

backtrace:
  #00  pc 000000000076eb50  /vendor/lib/libllvm-glnext.so (ShaderObjects::loadProgramBinary(CompilerContext*, void*, unsigned int, QGLC_LINKPROGRAM_RESULT*)+855)
  #01  pc 00000000006ddba5  /vendor/lib/libllvm-glnext.so (CompilerContext::loadProgramBinary(void*, unsigned int, QGLC_LINKPROGRAM_RESULT*)+108)
  #02  pc 000000000077fb73  /vendor/lib/libllvm-glnext.so (QGLCLoadProgramBinary(void*, void*, unsigned int, QGLC_LINKPROGRAM_RESULT*)+54)
  #03  pc 00000000001612b1  /vendor/lib/egl/libGLESv2_adreno.so (EsxShaderCompiler::LoadProgramBinaryBlob(EsxContext*, EsxProgram*, void const*, unsigned int, EsxInfoLog*)+164)
  #04  pc 0000000000140191  /vendor/lib/egl/libGLESv2_adreno.so (EsxProgram::LoadProgramBinary(EsxContext*, unsigned int, void const*, int)+186)
  #05  pc 00000000000aff67  /vendor/lib/egl/libGLESv2_adreno.so (EsxContext::GlProgramBinary(unsigned int, unsigned int, void const*, int)+230)
  #06  pc 00000000000991d9  /vendor/lib/egl/libGLESv2_adreno.so (glProgramBinary+40)
  #07  pc 0000000001748bff  /data/app/com.android.chrome-2SPtcpkG5Ik-UldbIaNfyw==/base.apk
Run Code Online (Sandbox Code Playgroud)

在本地,我们设法重现了这一点并获得了以下追踪:https: //gist.github.com/Sammekl/66fc018f81a04d21717440924a206bdb

有谁知道如何修复或捕获此崩溃?它正在影响一个非常庞大的用户群.

Sam*_*ekl 3

我发现了问题。这是由于在之前的应用程序之上安装了此应用程序而导致的。之前的应用程序在 Web 视图中使用了某种形式的 GPU 缓存,这会干扰新应用程序。

GPU 缓存位于应用程序的内部存储位置:

data/data/com.sammekl.myapp/app_webview/GPUCache
Run Code Online (Sandbox Code Playgroud)

我通过使用新应用程序首次启动期间调用的KotlinFile扩展函数递归删除此目录中的所有文件解决了此问题。deleteRecursively()

val gpuCache = File("${context.filesDir.parent}/app_webview/GPUCache")
gpuCache.deleteRecursively()
Run Code Online (Sandbox Code Playgroud)