Unity il2cpp项目Android端Firebase Crashlytics调用栈不准确问题
Unity IL2CPP项目Android端Firebase Crashlytics调用栈缺失Unity相关库的问题解决
问题描述
- 在Unity IL2CPP项目中使用Firebase 10.7.0,Crashlytics可正常捕获崩溃与异常,但Android端调用栈存在异常:与Unity自带崩溃报告不符,所有线程均无
libil2cpp.so或libunity.so条目。 - 主动触发崩溃验证时,Unity崩溃诊断中的调用栈显示正常(包含
libunity.so、libil2cpp.so等关键库),但同一次崩溃的Firebase调用栈仅显示libc.so相关内容,完整栈追踪中也无上述Unity相关库,仅部分线程有libunitytuningfork.so引用,疑似来自其他进程。 - iOS端Crashlytics调用栈显示正常,仅Android端存在问题。我们希望继续使用Crashlytics,但Unity崩溃看板仅显示崩溃线程,对多线程问题排查帮助有限,寻求解决方法。
Unity崩溃诊断调用栈
Thread 0 (crashed) 0 libc.so 0x00000000f3e64bac <symbols missing for uuid: 13bc715234d0861084dc092396cf9938> 1 libunity.so 0x00000000b43a54e1 Utils_CUSTOM_ForceCrash(DiagnosticsUtils_Bindings::ForcedCrashCategory) 2 libil2cpp.so 0x00000000045b71ec (unknown) (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:0) 3 libil2cpp.so 0x00000000b3a431f0 UnityEvent_Invoke_mFBF80D59B03C30C5FE6A06F897D954ACADE061D2 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:15108) 4 libil2cpp.so 0x00000000045b71ec (unknown) (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:0) 5 libil2cpp.so 0x00000000b3a431f0 UnityEvent_Invoke_mFBF80D59B03C30C5FE6A06F897D954ACADE061D2 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\UnityEngine.CoreModule__3.cpp:15108) 6 libil2cpp.so 0x000000000198c63c EventFunction_1_Invoke_m98A8A653E7180305E41F7CFFDDD9D32C63B96FE7_gshared_inline (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\GenericMethods__34.cpp:44326) 7 libil2cpp.so 0x000000000198c630 EventFunction_1_Invoke_m98A8A653E7180305E41F7CFFDDD9D32C63B96FE7_inline (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\GenericMethods__34.cpp:15124) 8 libil2cpp.so 0x00000000b0e18644 ExecuteEvents_Execute_TisRuntimeObject_mDC4455B743BE4A6BA46DD741D0E0AB150FF1209A_gshared (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\GenericMethods__34.cpp:42151) 9 libil2cpp.so 0x0000000004101004 ExecuteEvents_Execute_TisIPointerClickHandler_t77341AA19DE37C26F5F619DE8BD28B70D5A2B5D8_m024FB23AA1DBB1B7A5E1935FA35A1E4FF57AC5F6 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:5169) 10 libil2cpp.so 0x00000000b358d008 InputSystemUIInputModule_ProcessPointerButton_m68284C737796E80096AD8EAD1E0C687577131FE6 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:8033) 11 libil2cpp.so 0x00000000b358c590 InputSystemUIInputModule_ProcessPointer_mD889935190247CE78A8FE68ACA10CDD1C3B43E5D (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:6936) 12 libil2cpp.so 0x00000000b3592c50 InputSystemUIInputModule_Process_mD46ECAA34DE552BF7178B12774FDF80ED24FB980 (C:/workspace/workspace/p/Library/Bee/artifacts/Android/il2cppOutput/cpp\Unity.InputSystem__6.cpp:13692) 13 libil2cpp.so 0x00000000b076b344 il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) 14 libil2cpp.so 0x00000000b076b284 il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) 15 libunity.so 0x00000000b4566e09 scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) 16 libunity.so 0x00000000b45725bd ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) 17 libunity.so 0x00000000b457c455 MonoBehaviour::CallUpdateMethod(int) 18 libunity.so 0x00000000b4420a29 void BaseBehaviourManager::CommonUpdate<BehaviourManager>() 19 libunity.so 0x00000000b44b537f ExecutePlayerLoop(NativePlayerLoopSystem*) 20 libunity.so 0x00000000b44b53a1 ExecutePlayerLoop(NativePlayerLoopSystem*) 21 libunity.so 0x00000000b44b5583 PlayerLoop() 22 libunity.so 0x00000000b45cd87b UnityPlayerLoop() 23 libunity.so 0x00000000b45de387 nativeRender(_JNIEnv*, _jobject*) 24 base.odex 0x00000000c73869cb <symbols missing for uuid: 0000000000000000000000000000000000000000>
Firebase调用栈
Crashed: Thread: SIGSEGV 0x0000000000001d86 #00 pc 0x9fbac libc.so (BuildId: 13bc715234d0861084dc092396cf9938) #01 pc 0xbf7ffffe
解决方法
1. 上传正确的符号文件到Firebase
- 构建Android包时,Unity会生成
libil2cpp.so和libunity.so对应的符号文件,路径为Temp/gradleOut/build/intermediates/merged_native_libs/[buildType]/out/lib/[abi]/(比如arm64-v8a)。 - 确保这些符号文件被正确上传到Firebase:可以启用Unity Firebase插件的自动上传功能,或手动使用Firebase CLI的
firebase crashlytics:symbols:upload命令上传。 - 若使用ProGuard混淆,需在规则中添加以下内容保护Unity相关库的符号:
-keep class com.unity3d.player.** { *; } -keep class il2cpp.** { *; } -dontwarn com.unity3d.player.** -dontwarn il2cpp.**
2. 调整Firebase初始化时机
- 确保Firebase在Unity环境初始化完成后再启动,避免初始化顺序导致的捕获异常。可将Firebase初始化代码放在
Start()方法中,或通过UnityPlayer相关回调确认环境就绪后执行初始化。
3. 排查崩溃捕获冲突
- 检查项目中是否同时启用了其他崩溃监控工具(如Unity Analytics崩溃功能),暂时禁用其他工具测试是否恢复正常。
- 确保Firebase Crashlytics是唯一的原生崩溃捕获工具,或调整捕获优先级。
4. 版本兼容性排查
- 尝试升级Firebase Unity SDK到最新稳定版,或降级到10.x系列内的其他兼容版本,排查是否为版本兼容性问题。
- 确认Unity版本与Firebase SDK版本兼容,参考官方兼容说明。
5. 手动捕获上报Unity异常
- 通过Unity的
Application.logMessageReceivedThreaded事件手动捕获异常和崩溃信息,再调用Firebase接口上报,确保栈信息完整传递:void OnEnable() { Application.logMessageReceivedThreaded += HandleLog; } void OnDisable() { Application.logMessageReceivedThreaded -= HandleLog; } void HandleLog(string logString, string stackTrace, LogType type) { if (type == LogType.Exception || type == LogType.Error) { Firebase.Crashlytics.FirebaseCrashlytics.Instance.Log(logString); Firebase.Crashlytics.FirebaseCrashlytics.Instance.RecordException(new System.Exception(stackTrace)); } }
内容的提问来源于stack exchange,提问作者Troy LFG
相关产品推荐
相关产品推荐

