SIGABRT 当 运行 Xamarin.Forms 应用程序在 Android 12 上

SIGABRT when running a Xamarin.Forms app on Android 12

我正在开发 Xamarin.Forms 应用程序,运行 适用于所有 Android 版本,包括 11。

但是,我被要求使用该应用程序定位 Android 12。所以我将所有 NuGet 包更新到最新的,已安装的 JDK11,在项目 > Android > 位置中进行设置。我在 Android 项目设置中将“编译方式”SDK 更改为 Android 12.0 (S),将“目标 Android 版本”更改为 Android 12.0

应用程序编译正常,并且 运行s 在 Android 11 模拟器上正确。但是一旦我部署到 Android 12 模拟器,Visual Studio 显示“无法附加调试器”错误,并且应用程序在本机启动后立即崩溃。 Logcat 有这个要显示:

2021-12-01 17:41:51.888 17289-17289/com.my.project W/monodroid-gc: GREF GC Threshold: 46080
2021-12-01 17:41:53.132 17289-17289/com.my.project W/com.my.project: Attempt to remove non-JNI local reference, dumping thread
2021-12-01 17:41:54.382 17289-17321/com.my.project D/libEGL: loaded /vendor/lib64/egl/libEGL_emulation.so
2021-12-01 17:41:54.392 17289-17321/com.my.project D/libEGL: loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so
2021-12-01 17:41:54.400 17289-17321/com.my.project D/libEGL: loaded /vendor/lib64/egl/libGLESv2_emulation.so
2021-12-01 17:41:58.663 17289-17289/com.my.project W/com.my.project: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
2021-12-01 17:41:58.664 17289-17289/com.my.project W/com.my.project: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
2021-12-01 17:42:09.395 17289-17289/com.my.project I/com.my.project: Explicit concurrent copying GC freed 3212(948KB) AllocSpace objects, 2(40KB) LOS objects, 49% free, 2495KB/4990KB, paused 430us total 10.736ms
2021-12-01 17:42:18.466 17289-17336/com.my.project E/app_process64: * Assertion at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mono/utils/mono-context.c:474, condition `fpctx->head.magic == FPSIMD_MAGIC' not met
2021-12-01 17:42:18.466 17289-17337/com.my.project E/app_process64: * Assertion at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mono/utils/mono-context.c:474, condition `fpctx->head.magic == FPSIMD_MAGIC' not met
2021-12-01 17:42:18.466 17289-17335/com.my.project E/app_process64: * Assertion at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mono/utils/mono-context.c:474, condition `fpctx->head.magic == FPSIMD_MAGIC' not met
2021-12-01 17:42:18.472 17289-17335/com.my.project A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 17335 (Thread-3), pid 17289 (com.my.project)
2021-12-01 17:42:18.584 17340-17340/? I/crash_dump64: performing dump of process 17289 (target tid = 17335)
2021-12-01 17:42:18.865 17340-17340/? A/DEBUG: pid: 17289, tid: 17335, name: Thread-3  >>> com.my.project <<<
2021-12-01 17:42:18.983 336-336/? I/Zygote: Process 17289 exited due to signal 6 (Aborted)
2021-12-01 17:42:18.997 1292-2303/? I/ActivityManager: Process com.my.project (pid 17289) has died: fg  TOP 
2021-12-01 17:42:19.041 1292-1772/? I/libprocessgroup: Successfully killed process cgroup uid 10157 pid 17289 in 44ms
2021-12-01 17:42:19.082 1292-1722/? W/ActivityManager: setHasOverlayUi called on unknown pid: 17289

我在发布模式下编译时看到完全相同的输出。

如果我创建一个空白的 Xamarin.Forms 应用程序,并将其重新定位为 Android 12,它会正常启动,尽管 Visual Studio 仍然无法附加调试器。

如果我 运行 一个本机 Android 应用程序,它也针对 Android 12,在同一个模拟器上,它 运行 是正确的。

我不太确定从这里到哪里去。我们的应用程序很大,并且已经开发了几年。目前我正在尝试一个一个地删除我们的外部依赖项,看看是否有任何一个可能是原因,但这是一个乏味的过程,我很想知道是否有更好的方法。

应用程序在我执行以下操作后开始启动:

  • 从 Android 项目引用中删除了 Java.Interop 引用。
  • 在 Android 项目 > 选项 > Android 构建 > 高级中勾选 x86_64 支持。由于某种原因,支持的架构复选框在我们的 P4 历史记录中被随机选中和取消选中,我认为我们团队中没有人故意这样做。