在应用程序设置中清除数据后,Android应用程序的Mono在启动时崩溃

时间:2012-10-24 10:22:35

标签: xamarin.android

我发现用户进入Settings-> Apps-> MyApp并选择“清除数据”后,我的Mono for Android应用程序在每次启动时都会崩溃。我使用Mono for Android“Hello World”应用程序创建了一个新项目,这个应用程序表现出完全相同的行为,这让我想到这发生在远离我控制的单声道堆栈中。如果我查看adb logcat,这是我能找到的相关行:

I/ActivityManager(  185): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=Test_App.Test_App/test_app.Activity1} from pid 386
D/dalvikvm(18358): Late-enabling CheckJNI
I/dalvikvm(18358): Turning on JNI app bug workarounds for target SDK version 8...
I/ActivityManager(  185): Start proc Test_App.Test_App for activity Test_App.Test_App/test_app.Activity1: pid=18358 uid=10074 gids={3003}
D/dalvikvm(  119): GC_EXPLICIT freed 37K, 3% free 12553K/12867K, paused 1ms+2ms
I/ActivityThread(18358): Pub Test_App.Test_App.mono.MonoRuntimeProvider.__mono_init__: mono.MonoRuntimeProvider
D/dalvikvm(18358): Trying to load lib /data/data/Test_App.Test_App/lib/libmonodroid.so 0x4168ba48
D/dalvikvm(18358): Added shared lib /data/data/Test_App.Test_App/lib/libmonodroid.so 0x4168ba48
D/dalvikvm(  119): GC_EXPLICIT freed <1K, 3% free 12553K/12867K, paused 2ms+2ms
E/mono    (18358): WARNING: The runtime version supported by this application is unavailable.
E/mono    (18358): Using default runtime: v2.0.50727
D/OpenGLRenderer(  386): Flushing caches (mode 1)
D/dalvikvm(  119): GC_EXPLICIT freed <1K, 3% free 12553K/12867K, paused 1ms+1ms
I/mono    (18358): Stacktrace:
I/mono    (18358): 
D/OpenGLRenderer(  386): Flushing caches (mode 0)
D/Zygote  (  119): Process 18358 terminated by signal (11)
I/ActivityManager(  185): Process Test_App.Test_App (pid 18358) has died.
W/ActivityManager(  185): Force removing ActivityRecord{41a85018 Test_App.Test_App/test_app.Activity1}: app died, no saved state

有人在他的单声道应用中有相同的行为吗?有修复吗?

3 个答案:

答案 0 :(得分:6)

管理解决我自己的问题。在项目设置下,我不得不转到“Mono for Android Build”选项卡,选择Release配置并使链接器“链接所有程序集”而不是“仅链接SDK程序集”。通过反复试验解决了这个问题,但你能做些什么..

答案 1 :(得分:2)

我发现的另一个解决方案是在构建应用时禁用“共享运行时”。

在Visual Studio中,这是您的Android项目设置,Android选项&gt;包装标签&gt; <包装性能>使用共享运行时(取消勾选)

它会使得到的APK有点大,但意味着用户可以在您的应用上执行“清除数据”,重新启动它,它会在不崩溃的情况下运行!

答案 2 :(得分:0)

将Visual Studio 2015与LG G3 Vigor上的Xamarin Forms应用程序一起用作测试设备。一切都运作好几个月。我正在测试性能文档,所以我决定在我的应用程序中使用Setting - &gt;一般 - &gt;活力上的应用程序。完成此操作后,当我将应用程序部署到设备时,Vigor会导致运行时错误。该应用程序可以在其他设备,模拟器和iOS模拟器上正常工作。

我尝试了这篇文章中列出的其他建议。我最终在设备上进行了恢复出厂设置。解锁开发人员模式并重新连接到我的计算机后,它现在编译并再次运行应用程序。

我认为一个人可以尝试撤销USB调试授权并重新授权,如果他们不想进行工厂重置,看看是否会让事情再次发生。这可能会在VS2015和设备之间创建不同的连接路径,从而重置由缓存重置引起的任何问题。如果一切都失败了,工厂重置就为我做了。希望如果有人遇到这种情况会有所帮助。