Xamarin.Forms Android 应用程序启动时崩溃

9
当我启动Xamarin.Forms Android项目的调试会话时,它立即崩溃,并显示以下错误消息: ``` java.lang.RuntimeException: Unable to get provider mono.MonoRuntimeProvider: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference ```
我使用共享运行时和快速部署,但是禁用其中任何一个似乎都无法解决我的问题。
然而,解决我的问题的方法是手动从设备中卸载应用程序。然后它将在一个调试会话中工作,但是一旦我开始下一个调试会话,同样的错误就会再次出现。
对我来说,似乎应用程序在以前的调试会话中如果无法找到Mono共享运行时,则无法正常运行,但我无论如何也看不出原因。

前往“设置”>“应用程序”,从您的设备/虚拟设备中卸载Xamarin和Mono运行时。然后再试一次。 - Akash Kava
@AkashKava 是的,正如我在帖子中所说的那样,这可以解决问题并使应用程序重新启动,但这只是一个临时的解决方法,问题总会再次出现。 - Andreas Eriksson
在对目标三星设备进行root操作(以安装sqlite3 ARM二进制文件)后,我立即注意到了这个错误。我还安装了busybox(它没有唯一需要的命令“file”,并且无法干净卸载)。如果重要的测试工作很重要,我建议不要对三星设备进行root操作。 - samus
4个回答

7
以下是解决此类问题的步骤:
  1. 您是否使用最新稳定版本的Xamarin?如果没有,请升级。
  2. 正如评论中提到的那样,您还应尝试从设备中删除Mono运行时。您需要在已安装应用程序列表中查找以下项目(我只会先删除Mono Shared Runtime,但删除所有项目不会有害):
    • Mono Shared Runtime
    • Mono Android-x Support
    • Xamarin.Android API-X Support
  3. 清理解决方案并重试
如果这些步骤无法解决问题,您应该发布来自错误日志的更多信息。我要寻找的是主要异常定义后面的几行以查看堆栈跟踪,例如(主要是以at开头的行):
java.lang.RuntimeException: Unable to start activity ComponentInfo{plp.cs4b.thesis.drawitapp/plp.cs4b.thesis.drawitapp.PlayGame}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String plp.cs4b.thesis.drawitapp.Player.getName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)

在使用Xamarin和Android开发时,错误可能并不总是出现在异常指向的位置。因此,在这种情况下,值得深入研究。


我很感激这个解决方案。在这个问题上我已经苦思冥想了很长时间,但是这个解决方案解决了我的问题! - Karlomanio

2
根据在这里找到的另外两篇文章:
Xamarin.Forms "App has stopped working" on android
Why does my Xamarin Android application suddenly require external storage permissions?
看起来你“可能”缺少外部存储权限,通常在AssemblyInfo.cs文件中:
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] 或者你可以在AndroidManifest.xml文件中设置它。
或者像第一个问题的作者发布他的答案那样,只需将安装位置更改为内部即可。
我建议您检查一下这个。

0
尝试删除项目中所有的'bin'和'obj'文件夹。 然后清理并重新构建。

0

我也遇到了同样的问题。

在使用Visual Studio + Xamarin时,我必须承认这个环境非常糟糕。问题不是来自于你的代码,而是整个环境的复杂性,其中还包括Google的要求。

有几件事情需要检查,包括:

  • 每次从调试、创建apk或创建aab文件切换时都要清理并创建构建
  • 删除每个环境的bin和obj文件夹
  • 检查Android / iOS(取决于你遇到的问题)中的属性选项

有几件事情涉及其中之一就是使用Proguard或R8,这会导致应用程序无缘无故崩溃。禁用它们并将其留空允许交付不会在启动时崩溃的apk / aab文件。

我花了大约10个小时来检查所有内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接