代码之家  ›  专栏  ›  技术社区  ›  Softlion

“Android”的类型初始值设定项。运行时。UncaughtExceptionHandler'引发了异常

  •  6
  • Softlion  · 技术社区  · 6 年前

    我的xamarin android应用程序运行良好,每次发布时都会崩溃,只有这个例外。

    该应用程序是根据appcenter的构建服务构建的,一如往常。如果我在调试或发布模式下本地构建它,它将正常启动。使用Android 7设备。

    是否有人遇到此异常并知道该怎么办?
    泰!

    18828 W monodroid: Calling into managed runtime init E mono : E mono : Unhandled Exception: E mono : System.TypeInitializationException: The type initializer for 'Android.Runtime.UncaughtExceptionHandler' threw an exception. ---> System.ArgumentNullException: Value cannot be null. E mono : Parameter name: method E mono : at System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method, System.Boolean throwOnBindFailure, System.Boolean allowClosed) <0x56d026b4 + 0x00d74> in :0 E mono : at System.Delegate.CreateDelegate (System.Type type, System.Reflection.MethodInfo method) <0x56d03594 + 0x0001f> in :0 : at Android.Runtime.UncaughtExceptionHandler..cctor () <0x57d908a4 + 0x0003f> in :0 : --- End of inner exception stack trace --- : at (wrapper managed-to-native) System.Object:__icall_wrapper_mono_generic_class_init (intptr) : at Android.Runtime.JNIEnv.Initialize (Android.Runtime.JnienvInitializeArgs* args)

    --编辑

    所有AOT/LVVM/并发垃圾收集器/proguard/multidex选项都已启用

    --编辑2

    错误源代码: https://github.com/xamarin/xamarin-android/blob/master/src/Mono.Android/Android.Runtime/UncaughtExceptionHandler.cs

    static UncaughtExceptionHandler ()
        {
            var mono_UnhandledException = typeof (System.Diagnostics.Debugger)
                .GetMethod ("Mono_UnhandledException", BindingFlags.NonPublic | BindingFlags.Static);
            mono_unhandled_exception = (Action<Exception>) Delegate.CreateDelegate (typeof(Action<Exception>), mono_UnhandledException);
    
            var ad_due = typeof (AppDomain)
                .GetMethod ("DoUnhandledException",
                    bindingAttr:  BindingFlags.NonPublic | BindingFlags.Instance,
                    binder:       null,
                    types:        new []{typeof (UnhandledExceptionEventArgs)},
                    modifiers:    null);
            if (ad_due != null) {
                AppDomain_DoUnhandledException  = (Action<AppDomain, UnhandledExceptionEventArgs>) Delegate.CreateDelegate (
                        typeof (Action<AppDomain, UnhandledExceptionEventArgs>), ad_due);
            }
        }
    

    因此,似乎mono\u UnhandledException为null,或者AppDomain\u DoUnhandledException为null。

    将尝试在appcenter中升级或降级mono版本。这应该是错误的。

    --编辑3

    AppDomain。cs最近在mono中发生了变化:

    https://github.com/mono/mono/commits/c1cbe060f617707258fd5111fd5ffd7ccd581899/mcs/class/corlib/System/AppDomain.cs

    但DoUnhandledException并没有改变。

    --编辑4

    在本地构建/发布时效果良好。因此,这个问题特定于appcenter。

    4 回复  |  直到 6 年前
        1
  •  1
  •   nevalenny    6 年前

    AppCenter最近发布了与Xamarin捆绑的Mono 5.8。Android 8.2(支持TargetFrameworkVersion:8.1),要使用它,请更改分支配置->&保存;建筑

    而且 filed the issue 供Xamarin调查。Android团队。

        2
  •  1
  •   pfedotovsky    6 年前

    在我的例子中,这个问题是由于使用Android SDK 8.1引起的,而App Center目前还不支持该SDK。 我不得不降级到SDK 8.0,现在构建工作正常。

    App Center团队承诺将为SDK 8.1添加支持,但他们还没有ETA。

        3
  •  0
  •   qwertylolman    6 年前

    jenkins和msbuild也面临同样的问题。作为目标回滚到8.0并禁用“使用最新版本”工作。在本地,借助“使用最新版本”,构建工具26.0.3和macos应用程序上的msbuild工作得很好。不确定jenkins上安装了什么构建工具。

        4
  •  0
  •   Vackup    6 年前

    我在App Center中遇到了同样的问题。我的Android应用程序设置为以Android 8.1(最新版本)为目标,并在app Center中构建正常,但运行“启动测试”时失败。

    该应用程序在调试和发布模式下本地运行良好。

    我尝试禁用启动测试,以便将应用程序分发给我的合作者。当我的任何合作者下载并使用该应用程序时,该应用程序无法工作。

    我使用VST构建它,并通过App Center分发给我的合作伙伴,他们说该应用程序正在运行,因此我可以断定这是App Center构建问题。

    我没有尝试使用Android 8.0构建我的应用程序,因为有些nuget软件包只能在Android 8.1上运行,我没有时间降级。