You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:15:54