在 Android 12 上运行 Xamarin.Forms 应用时的 SIGABRT

Dmi*_*riy 4 android xamarin.android xamarin xamarin.forms

我正在开发一个 Xamarin.Forms 应用程序,它可以在所有 Android 版本(包括 11)上正常运行。

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

该应用程序编译良好,并在 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Dmi*_*riy 13

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

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