Unity安卓游戏部分机型卡顿后崩溃求助(附堆栈日志)
Unity Android游戏卡顿后崩溃问题分析求助
我开发的Unity游戏com.MAPSGames.FingerEscape在部分Android设备上出现异常:运行数分钟后开始卡顿,随后发生崩溃。以下是从Google Play Console获取的堆栈追踪信息,恳请技术同行帮忙分析解决:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** pid: 0, tid: 0 >>> com.MAPSGames.FingerEscape <<< backtrace: #00 pc 0x0000000000051b7c /apex/com.android.runtime/lib64/bionic/libc.so (abort+168) #01 pc 0x00000000006d157c /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)+668) #02 pc 0x000000000001695c /apex/com.android.art/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*)+76) #03 pc 0x0000000000015f8c /apex/com.android.art/lib64/libbase.so (android::base::LogMessage::~LogMessage()+364) #04 pc 0x00000000002857ec /apex/com.android.art/lib64/libart.so (art::JavaVMExt::AddGlobalRef(art::Thread*, art::ObjPtr<art::mirror::Object>)+1924) #05 pc 0x000000000059add0 /apex/com.android.art/lib64/libart.so (art::JNI<false>::NewGlobalRef(_JNIEnv*, _jobject*)+272) #06 pc 0x0000000002586cfc /data/app/~~TWASomDJJoLgoJ0Ii_lylw==/com.google.android.trichromelibrary_524912634-mVCqI3Yv_FjomGEuf0ULyQ==/base.apk!libmonochrome_64.so #07 pc 0x00000000025869fc /data/app/~~TWASomDJJoLgoJ0Ii_lylw==/com.google.android.trichromelibrary_524912634-mVCqI3Yv_FjomGEuf0ULyQ==/base.apk!libmonochrome_64.so #08 pc 0x0000000003799f0c /data/app/~~TWASomDJJoLgoJ0Ii_lylw==/com.google.android.trichromelibrary_524912634-mVCqI3Yv_FjomGEuf0ULyQ==/base.apk!libmonochrome_64.so #09 pc 0x0000000004a0367c /data/app/~~TWASomDJJoLgoJ0Ii_lylw==/com.google.android.trichromelibrary_524912634-mVCqI3Yv_FjomGEuf0ULyQ==/base.apk!libmonochrome_64.so #10 pc 0x0000000004a03614 /data/app/~~TWASomDJJoLgoJ0Ii_lylw==/com.google.android.trichromelibrary_524912634-mVCqI3Yv_FjomGEuf0ULyQ==/base.apk!libmonochrome_64.so (Java_J_N_MLlibBXh+28) #11 pc 0x0000000000180b14 /data/app/~~5n5gC1GuTVMuUN0apQKPDA==/com.google.android.webview-uUIe4oNpEtr-Yp44RGU08w==/oat/arm64/base.odex (art_jni_trampoline+116) #12 pc 0x00000000003221b0 /data/app/~~5n5gC1GuTVMuUN0apQKPDA==/com.google.android.webview-uUIe4oNpEtr-Yp44RGU08w==/oat/arm64/base.odex (org.chromium.base.JavaExceptionReporter.uncaughtException+80) #13 pc 0x000000000020aec4 /apex/com.android.art/lib64/libart.so (nterp_helper+7636) #14 pc 0x00000000000ec490 /apex/com.android.art/javalib/core-oj.jar (java.lang.ThreadGroup.uncaughtException+28) #15 pc 0x000000000020a044 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) #16 pc 0x00000000000ec47c /apex/com.android.art/javalib/core-oj.jar (java.lang.ThreadGroup.uncaughtException+8) #17 pc 0x000000000020ae64 /apex/com.android.art/lib64/libart.so (nterp_helper+7540) #18 pc 0x00000000000ed702 /apex/com.android.art/javalib/core-oj.jar (java.lang.Thread.dispatchUncaughtException+30) #19 pc 0x00000000002ca764 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) #20 pc 0x0000000000430030 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+880) #21 pc 0x00000000005ab80c /apex/com.android.art/lib64/libart.so (art::JNI<false>::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+300) #22 pc 0x000000000045b87c /apex/com.android.art/lib64/libart.so (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+120) #23 pc 0x000000000045b2e0 /apex/com.android.art/lib64/libart.so (art::Thread::HandleUncaughtExceptions(art::ScopedObjectAccessAlreadyRunnable&)+216) #24 pc 0x00000000004594cc /apex/com.android.art/lib64/libart.so (art::Thread::Destroy()+456) #25 pc 0x00000000004587a8 /apex/com.android.art/lib64/libart.so (art::ThreadList::Unregister(art::Thread*)+132) #26 pc 0x00000000003da814 /apex/com.android.art/lib64/libart.so (art::Runtime::DetachCurrentThread()+128) #27 pc 0x000000000058fccc /apex/com.android.art/lib64/libart.so (art::JII::DetachCurrentThread(_JavaVM*)+48) #28 pc 0x00000000000c71b8 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+984) #29 pc 0x00000000000025a8 /system/bin/app_process64 (main+1360) #30 pc 0x000000000004a040 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+100)
初步分析
从堆栈追踪来看,崩溃核心触发点是Chrome/WebView核心库libmonochrome_64.so在调用JNI的NewGlobalRef方法时触发系统abort,说明WebView相关的JNI全局引用管理出现严重问题,可能的诱因包括:
- 内存泄漏:WebView的全局引用未被正确释放,运行时间累积后内存占用持续升高,最终触发OOM或Art虚拟机的引用数量限制
- 线程操作不当:在Unity后台线程中直接操作WebView对象,或线程退出时未清理WebView相关JNI引用,导致引用失效或冲突
- WebView版本兼容性:部分设备上的Trichrome Library(版本524912634)存在已知bug,与Unity的WebView集成逻辑冲突
排查建议
- 检查WebView生命周期管理:确认所有WebView实例使用完毕后都调用销毁方法,释放相关资源(包括JNI引用)
- 监控内存变化:用Unity Profiler或Android Studio Profiler跟踪内存占用,重点观察WebView模块的内存增长趋势
- 确保线程安全:所有WebView的创建、销毁、内容加载等操作必须在Android主线程执行,避免跨线程调用
- 升级WebView依赖:若使用第三方WebView插件,更新到最新稳定版本;测试不同Android版本下的WebView兼容性
- 捕获详细日志:在游戏中添加WebView相关异常捕获逻辑,或通过Logcat获取崩溃前的详细错误信息,比如OOM警告、JNI错误提示
内容的提问来源于stack exchange,提问作者Marko Psenicnjak
相关产品推荐
相关产品推荐

