Unity开发游戏在Google Play Store出现大量ANR崩溃求助
分析Unity游戏Google Play上的VSync相关ANR问题
先来看你提供的ANR日志,核心调用链能帮我们定位问题方向:
"main" tid=1 Native "main" prio=5 tid=1 Native | group="main" sCount=1 dsCount=0 flags=1 obj=0x73960618 self=0xecf6f000 | sysTid=28247 nice=-4 cgrp=default sched=0/0 handle=0xf1a014bc | state=S schedstat=( 2314581326 753030573 4325 ) utm=164 stm=66 core=1 HZ=100 | stack=0xff11e000-0xff120000 stackSize=8MB | held mutexes= #00 pc 0000000000018e9c /system/lib/libc.so (syscall+28) #01 pc 000000000004850d /system/lib/libc.so (_ZL24__pthread_cond_timedwaitP23pthread_cond_internal_tP15pthread_mutex_tbPK8timespec+102) #02 pc 0000000000039bb1 /data/app/com.android.chrome-Oy13PXODRGoydMIrhaZcSQ==/base.apk (???) at org.chromium.ui.base.WindowAndroid.nativeOnVSync (Native method) at org.chromium.ui.base.WindowAndroid.access$700 (WindowAndroid.java:134) at org.chromium.ui.base.WindowAndroid$1.onVSync$5166USJ75THMGSJFDLKNAR9FELKIULIJF5N66JBFDPKN8RRI7D52ILG_0 (WindowAndroid.java:16) at org.chromium.ui.VSyncMonitor$1.doFrame (VSyncMonitor.java:22) at android.view.Choreographer$CallbackRecord.run (Choreographer.java:909) at android.view.Choreographer.doCallbacks (Choreographer.java:723) at android.view.Choreographer.doFrame (Choreographer.java:655) at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:897) at android.os.Handler.handleCallback (Handler.java:789) at android.os.Handler.dispatchMessage (Handler.java:98) at android.os.Looper.loop (Looper.java:164) at android.app.ActivityThread.main (ActivityThread.java:6938) at java.lang.reflect.Method.invoke (Native method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
从日志能明确看出,主线程卡在了__pthread_cond_timedwait(线程等待条件变量的系统调用),触发点是Chrome WebView的WindowAndroid.nativeOnVSync——这说明ANR和WebView的VSync帧回调处理直接相关,且阻塞发生在主线程。结合你提到的“两周前突然爆发”,给你几个优先级最高的排查方向:
- 排查近期依赖更新:两周内有没有升级Unity版本、更新广告/社交/支付类SDK(这类SDK普遍内嵌WebView),或者引入了新的WebView相关插件?很多突发ANR都是依赖更新后的兼容性问题导致的。
- 检查WebView主线程操作:游戏里有没有在WebView的回调(比如页面加载完成、JS交互回调)里执行耗时逻辑?或者在Unity的帧更新/VSync回调中调用WebView的同步API?主线程被这类操作阻塞就会触发ANR。
- 验证系统WebView版本兼容性:部分Android设备的系统WebView会自动更新,新版本可能和你的游戏代码出现适配冲突。可以在测试设备上降级WebView版本,观察ANR是否消失;如果用的是Unity内嵌WebView插件,也可以尝试锁定插件的WebView内核版本。
- 检查Unity的VSync设置:查看Project Settings里的VSync Count选项,有没有在两周前从“Don't Sync”改成其他值?或者代码里有没有自定义VSync相关的回调逻辑?如果VSync回调和WebView操作产生冲突,也可能导致主线程阻塞。
- 捕获更详细的调用栈:用Android Studio的CPU Profiler或者Unity Profiler,在测试环境复现ANR时捕获主线程的完整调用栈,确认是WebView内部的问题,还是你的游戏代码触发的阻塞。
内容的提问来源于stack exchange,提问作者CodeLazarus
相关产品推荐
相关产品推荐

