Xamarin应用程序崩溃与JNI RegisterNativeMethods错误

时间:2017-01-11 18:34:28

标签: xamarin xamarin.android

我们的Xamarin应用程序已在许多不同设备上进行了广泛测试。它似乎工作得很好。但是,在运行Android OS 7的Nexus 9上,它在启动后立即崩溃。有关JNI RegisterNativeMethods注册0本机方法的异常被抛出。我不能把任何try / catch块作为异常发生在Xamarin拥有的后台线程中。堆栈跟踪位于此消息的末尾。

有趣的是我们能够重现这个问题的方式。在正常操作下,应用程序运行正常。我可以多次退出并重新运行该应用程序。为了重现这个问题,我们需要做的就是:

  1. 点击底部的“显示所有正在运行的应用”按钮。
  2. 点击显示应用的窗口右上角的X按钮。该应用程序被杀死。
  3. 现在,点击应用图标重新运行它。你开始收到错误。
  4. 我想知道是否有人知道可能导致此问题的原因。

    跟踪堆栈跟踪。

    此致 彼得

    
    01-10 15:25:40.102 W/art     ( 9586): JNI RegisterNativeMethods: attempt to register 0 native methods for md5b60ffeb829f638581ab2bb9b1a7f4f3f.WebViewRenderer
    01-10 15:25:40.106 E/mono-rt ( 9586): Stacktrace:
    01-10 15:25:40.106 E/mono-rt ( 9586): 
    01-10 15:25:40.106 E/mono-rt ( 9586):   at  
    01-10 15:25:40.106 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1..ctor () [0x0001d] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:33
    01-10 15:25:40.106 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.ViewRenderer`2..ctor () 
    01-10 15:25:40.106 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.WebViewRenderer..ctor () [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Renderers\WebViewRenderer.cs:15
    01-10 15:25:40.106 E/mono-rt ( 9586):   at (wrapper runtime-invoke) object.runtime_invoke_void__this__ (object,intptr,intptr,intptr) 
    01-10 15:25:40.106 E/mono-rt ( 9586):   at  
    01-10 15:25:40.106 E/mono-rt ( 9586):   at (wrapper managed-to-native) System.Reflection.MonoCMethod.InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&) 
    01-10 15:25:40.106 E/mono-rt ( 9586):   at System.Reflection.MonoCMethod.InternalInvoke (object,object[]) [0x00002] in /Users/builder/data/lanes/3511/77cb8568/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:661
    01-10 15:25:40.107 E/mono-rt ( 9586):   at System.RuntimeType.CreateInstanceMono (bool) [0x000ca] in /Users/builder/data/lanes/3511/77cb8568/source/mono/mcs/class/corlib/ReferenceSources/RuntimeType.cs:179
    01-10 15:25:40.107 E/mono-rt ( 9586):   at System.RuntimeType.CreateInstanceSlow (bool,bool,bool,System.Threading.StackCrawlMark&) [0x0001a] in /Users/builder/data/lanes/3511/77cb8568/source/mono/mcs/class/corlib/ReferenceSources/RuntimeType.cs:153
    01-10 15:25:40.107 E/mono-rt ( 9586):   at System.RuntimeType.CreateInstanceDefaultCtor (bool,bool,bool,System.Threading.StackCrawlMark&) [0x0002a] in /Users/builder/data/lanes/3511/77cb8568/source/mono/mcs/class/referencesource/mscorlib/system/rttype.cs:5638
    01-10 15:25:40.107 E/mono-rt ( 9586):   at System.Activator.CreateInstance (System.Type,bool) [0x00040] in /Users/builder/data/lanes/3511/77cb8568/source/mono/mcs/class/referencesource/mscorlib/system/activator.cs:201
    01-10 15:25:40.107 E/mono-rt ( 9586):   at System.Activator.CreateInstance (System.Type) [0x00000] in /Users/builder/data/lanes/3511/77cb8568/source/mono/mcs/class/referencesource/mscorlib/system/activator.cs:134
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Registrar`1.GetHandler (System.Type) [0x00015] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Core\Registrar.cs:23
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Registrar`1.GetHandler (System.Type) [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Core\Registrar.cs:29
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement) [0x00006] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Platform.cs:288
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement,Xamarin.Forms.Platform.Android.IVisualElementRenderer,Xamarin.Forms.Platform.Android.RendererPool,bool) [0x00023] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement,Xamarin.Forms.VisualElement) [0x00104] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:58
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager) [0x00007] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:334
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetElement (TElement_REF) [0x00111] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:193
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement) [0x00027] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:126
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement) [0x0001f] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Platform.cs:289
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement,Xamarin.Forms.Platform.Android.IVisualElementRenderer,Xamarin.Forms.Platform.Android.RendererPool,bool) [0x00023] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement,Xamarin.Forms.VisualElement) [0x00104] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207
    01-10 15:25:40.107 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:58
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager) [0x00007] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:334
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetElement (TElement_REF) [0x00111] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:193
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement) [0x00027] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:126
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement) [0x0001f] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Platform.cs:289
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement,Xamarin.Forms.Platform.Android.IVisualElementRenderer,Xamarin.Forms.Platform.Android.RendererPool,bool) [0x00023] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement,Xamarin.Forms.VisualElement) [0x00104] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:58
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs`1) [0x0008b] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\FrameRenderer.cs:181
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer.set_Element (Xamarin.Forms.Frame) [0x00018] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\FrameRenderer.cs:63
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement) [0x00015] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\FrameRenderer.cs:102
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement) [0x0001f] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Platform.cs:289
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement,Xamarin.Forms.Platform.Android.IVisualElementRenderer,Xamarin.Forms.Platform.Android.RendererPool,bool) [0x00023] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement,Xamarin.Forms.VisualElement) [0x00104] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:58
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager) [0x00007] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:334
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetElement (TElement_REF) [0x00111] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:193
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement) [0x00027] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:126
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement) [0x0001f] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Platform.cs:289
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement,Xamarin.Forms.Platform.Android.IVisualElementRenderer,Xamarin.Forms.Platform.Android.RendererPool,bool) [0x00023] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement,Xamarin.Forms.VisualElement) [0x00104] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:58
    01-10 15:25:40.108 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager) [0x00007] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:334
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetElement (TElement_REF) [0x00111] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:193
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement) [0x00027] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:126
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement) [0x0001f] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Platform.cs:289
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement,Xamarin.Forms.Platform.Android.IVisualElementRenderer,Xamarin.Forms.Platform.Android.RendererPool,bool) [0x00023] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement,Xamarin.Forms.VisualElement) [0x00104] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:58
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager) [0x00007] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:334
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.SetElement (TElement_REF) [0x00111] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:193
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement) [0x00027] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:126
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement,Android.Support.V4.App.FragmentManager) [0x00031] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\Platform.cs:325
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Xamarin.Forms.Platform.Android.AppCompat.FragmentContainer.OnCreateView (Android.Views.LayoutInflater,Android.Views.ViewGroup,Android.OS.Bundle) [0x00008] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\FragmentContainer.cs:66
    01-10 15:25:40.109 E/mono-rt ( 9586):   at Android.Support.V4.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ (intptr,intptr,intptr,intptr,intptr) 
    01-10 15:25:40.109 E/mono-rt ( 9586):   at (wrapper dynamic-method) object.6eff0615-3677-48f6-a5c8-9b75e08ae92c (intptr,intptr,intptr,intptr,intptr) 
    01-10 15:25:40.109 E/mono-rt ( 9586):   at (wrapper native-to-managed) object.6eff0615-3677-48f6-a5c8-9b75e08ae92c (intptr,intptr,intptr,intptr,intptr) 
    01-10 15:25:40.109 E/mono-rt ( 9586): 
    01-10 15:25:40.109 E/mono-rt ( 9586): Attempting native Android stacktrace:
    01-10 15:25:40.109 E/mono-rt ( 9586): 
    01-10 15:25:40.113 E/mono-rt ( 9586):   Could not unwind with `libunwind.so`: dlopen failed: library "/data/app/com.hpe.myroom.vrg2.debug-1/lib/arm/libunwind.so" not found
    01-10 15:25:40.113 E/mono-rt ( 9586):   Could not unwind with `libcorkscrew.so`: dlopen failed: library "/data/app/com.hpe.myroom.vrg2.debug-1/lib/arm/libcorkscrew.so" not found
    01-10 15:25:40.113 E/mono-rt ( 9586): 
    01-10 15:25:40.113 E/mono-rt ( 9586):   No options left to get a native stacktrace :-(
    01-10 15:25:40.113 E/mono-rt ( 9586): 
    01-10 15:25:40.113 E/mono-rt ( 9586): =================================================================
    01-10 15:25:40.113 E/mono-rt ( 9586): Got a SIGSEGV while executing native code. This usually indicates
    01-10 15:25:40.113 E/mono-rt ( 9586): a fatal error in the mono runtime or one of the native libraries 
    01-10 15:25:40.113 E/mono-rt ( 9586): used by your application.
    01-10 15:25:40.113 E/mono-rt ( 9586): =================================================================
    01-10 15:25:40.113 E/mono-rt ( 9586): 
    01-10 15:25:40.113 F/libc    ( 9586): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 9586 
    

1 个答案:

答案 0 :(得分:1)

@Demitrian指出了正确的方向,博客Preparing for Native Library Linking Changes in Android N解释了你的应用程序可能在Android 7.0设备上崩溃的原因。

从您的异常消息中,您的libunwind.so lib和libcorkscrew.so lib可能是非公共库,现在一组看到重要用途的库 - 例如libandroid_runtime.solibcutils.solibcrypto.solibssl.so - 可在Android 7.0(API级别24)上临时访问,针对API级别23或更低级别的应用。

您可以直接参考官方文档:NDK Apps Linking to Platform Libraries

  

从Android 7.0开始,系统会阻止应用动态链接非NDK库,这可能会导致您的应用崩溃。此行为更改旨在跨平台更新和不同设备创建一致的应用体验。即使您的代码可能没有链接到私有库,您的应用中的第三方静态库也可能会这样做。