Unity集成Fabric/Crashlytics失败:导入Crashlytics时崩溃报错
解决Unity集成Fabric 1.2.8时崩溃/窗口冻结的问题
我之前也踩过Fabric 1.2.8和Unity兼容的这个坑,给你几个亲测有效的解决办法:
先还原下问题场景:导入Fabric最新1.2.8版本后,能正常登录、选择组织并勾选Crashlytics导入,但下载完成后Unity要么直接崩溃,要么Fabric窗口卡死,同时抛出两类错误:
错误1:SynchronizationLockException
SynchronizationLockException: Object synchronization method was called from an unsynchronized block of code. Fabric.Internal.Editor.Update.Dependency.DependencyGraphManager.Continue () (at Assets/Fabric/Editor/Update/Dependency/DependencyGraphManager.cs:44) Fabric.Internal.Editor.Update.PeriodicUpdateManager.Continue () (at Assets/Fabric/Editor/Update/PeriodicUpdateManager.cs:105) Fabric.Internal.Editor.Controller.PluginController.CleanKitUpgrade (System.String name) (at Assets/Fabric/Editor/GUI/Controller/PluginController.cs:403) Fabric.Internal.Editor.Controller.PluginController.PageFromState () (at Assets/Fabric/Editor/GUI/Controller/PluginController.cs:468) Fabric.Internal.Editor.Editor.OnGUI () (at Assets/Fabric/Editor/GUI/Editor.cs:52) System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:305) Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation. System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:313) System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:295) UnityEditor.HostView.Invoke (System.String methodName, System.Object obj) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:295) UnityEditor.HostView.Invoke (System.String methodName) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:288) UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGUIPosition) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:261) UnityEditor.DockArea.OldOnGUI () (at /Users/builduser/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:398) UnityEngine.Experimental.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt) (at /Users/builduser/buildslave/unity/build/Runtime/UIElements/Managed/IMGUIContainer.cs:182) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
错误2:NullReferenceException
NullReferenceException: Object reference not set to an instance of an object Fabric.Internal.Editor.Editor.OnGUI () (at Assets/Fabric/Editor/GUI/Editor.cs:54) System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:305) Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation. System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:313) System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:295) UnityEditor.HostView.Invoke (System.String methodName, System.Object obj) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:295) UnityEditor.HostView.Invoke (System.String methodName) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:288) UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGUIPosition) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:261) UnityEditor.DockArea.OldOnGUI () (at /Users/builduser/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:398) UnityEngine.Experimental.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt) (at /Users/builduser/buildslave/unity/build/Runtime/UIElements/Managed/IMGUIContainer.cs:198) UnityEngine.Experimental.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e) (at /Users/builduser/buildslave/unity/build/Runtime/UIElements/Managed/IMGUIContainer.cs:338) UnityEngine.Experimental.UIElements.IMGUIContainer.DoRepaint (UnityEngine.IStylePainter painter) (at /Users/builduser/buildslave/unity/build/Runtime/UIElements/Managed/IMGUIContainer.cs:69) UnityEngine.Experi
具体解决步骤:
- 回退到Fabric 1.2.7版本:这是最快捷有效的方案,1.2.8版本的Editor代码存在同步锁逻辑错误,直接用旧版本能完全避开问题。导入前记得删除项目里已有的
Assets/Fabric文件夹和Packages中相关的Fabric条目。 - 手动修复Editor代码:如果不想换版本,找到
Assets/Fabric/Editor/Update/Dependency/DependencyGraphManager.cs文件,定位到第44行的Continue()方法,修正锁的使用逻辑——原代码大概率是在未持有锁的情况下调用了Monitor.Exit,你可以用lock关键字包裹方法内容,确保锁的获取和释放配对:private object _lockObj = new object(); public void Continue() { lock(_lockObj) { // 原方法的业务逻辑代码 } } - 清理Unity缓存:关闭Unity后,删除项目根目录的
Library和Temp文件夹,再重新打开项目导入Fabric包,避免缓存冲突导致的异常。 - 禁用自动更新:导入完成后,在Fabric的设置面板里关闭自动更新功能,防止它自动升级回有问题的1.2.8版本。
内容的提问来源于stack exchange,提问作者Adam Sutcliffe
相关产品推荐
相关产品推荐

