【发布时间】:2022-01-08 22:12:41
【问题描述】:
我正在开发一个 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
在发布模式下编译时,我看到完全相同的输出。
如果我创建一个空白 Xamarin.Forms 应用程序,并将其重新定位到 Android 12,它会正常启动,尽管 Visual Studio 仍然无法附加调试器。
如果我在同一个模拟器上运行同样针对 Android 12 的原生 Android 应用,它可以正常运行。
我不完全确定从这里去哪里。我们的应用程序很大,并且已经开发了几年。目前我正在尝试一个一个地删除我们的外部依赖项,看看是否有任何一个可能是原因,但这是一个乏味的过程,我很想知道是否有更好的方法。
【问题讨论】:
-
再次检查 java jdk 路径是否指向 11,而不是 8。例如参见 JDK 11 Warning。 EDIT - 没关系,构建会因错误而失败。但我会在此处留下此评论,以防该链接有用。
-
如果您使用那个空白应用程序并添加您使用的所有依赖项会发生什么? (在调试构建中,因此不会删除未使用的。)下一步是添加由于这些依赖关系而使用的任何初始化代码。
标签: android xamarin xamarin.forms xamarin.android