调试时Xamarin Forms安卓应用卡在启动屏问题求助
Xamarin Forms应用在Android模拟器启动屏卡死问题排查
调试Xamarin Forms应用时,应用始终卡在启动屏。这是我们最后一个基于Xamarin Forms部署的版本,之后将切换至Flutter,需解决此问题以完成迁移准备。
项目配置信息
- 目标框架:.NET Standard 2.0
- 目标Android版本:Android 14.0(API level 34)
- 编译使用Android版本:Android 13.0(无法选择更高版本)
- 快速部署:已禁用
- 高级Android选项-支持架构:armeabi-v7a;x86_64;arm64-v8a
- Visual Studio 2022版本:17.12.2
- 模拟器:Pixel 6 Pro - API 33
运行日志(中文翻译)
开始调试Android应用... > am start -D -a "android.intent.action.MAIN" -c "android.intent.category.LAUNCHER" -n "com.test.testing/crc6482ec456c74a2c136.SplashActivity" > 启动中: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.test.testing/crc6482ec456c74a2c136.SplashActivity } [.Testing] 延迟启用 -Xcheck:jni [.Testing] 使用CollectorTypeCC垃圾回收器。 [.Testing] 意外的x86 CPU变体:x86_64。 [.Testing] 已知变体:atom, sandybridge, silvermont, kabylake, default [CompatibilityChangeReporter] 报告兼容性变更ID: 171979766; UID 10175; 状态: 已启用 [System.out] 发送WAIT块 [System.out] 调试器已连接 [System.out] 等待调试器稳定... [System.out] 等待调试器稳定... [System.out] 等待调试器稳定... [System.out] 等待调试器稳定... [System.out] 等待调试器稳定... [System.out] 等待调试器稳定... [System.out] 调试器已稳定 (1387) [nativeloader] 为其他APK配置类加载器命名空间:/system/framework/org.apache.http.legacy.jar。target_sdk_version=34, uses_libraries=ALL, library_path=/data/app/~~BFtrfUGM32UOgD29gClmkA==/com.test.testing-SQIu3WS69LUgA4mgbcwTKA==/lib/x86_64:/data/app/~~BFtrfUGM32UOgD29gClmkA==/com.test.testing-SQIu3WS69LUgA4mgbcwTKA==/base.apk!/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/com.test.testing [ziparchive] 无法打开 '/data/app/~~BFtrfUGM32UOgD29gClmkA==/com.test.testing-SQIu3WS69LUgA4mgbcwTKA==/base.dm': 没有该文件或目录 [ziparchive] 无法打开 '/data/app/~~BFtrfUGM32UOgD29gClmkA==/com.test.testing-SQIu3WS69LUgA4mgbcwTKA==/base.dm': 没有该文件或目录 [nativeloader] 为其他APK配置类加载器命名空间:/data/app/~~BFtrfUGM32UOgD29gClmkA==/com.test.testing-SQIu3WS69LUgA4mgbcwTKA==/base.apk。target_sdk_version=34, uses_libraries=, library_path=/data/app/~~BFtrfUGM32UOgD29gClmkA==/com.test.testing-SQIu3WS69LUgA4mgbcwTKA==/lib/x86_64:/data/app/~~BFtrfUGM32UOgD29gClmkA==/com.test.testing-SQIu3WS69LUgA4mgbcwTKA==/base.apk!/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/com.test.testing [GraphicsEnvironment] 'com.test.testing'的ANGLE开发者选项设置为: 'default' [GraphicsEnvironment] com.test.testing的ANGLE GameManagerService: false [GraphicsEnvironment] 不支持可更新的生产驱动程序或预发布驱动程序。 [NetworkSecurityConfig] 未指定网络安全配置,使用平台默认值 [NetworkSecurityConfig] 未指定网络安全配置,使用平台默认值 [monodroid] 创建公共更新目录: `/data/user/0/com.test.testing/files/.__override__` [.Testing] 尝试移除非JNI本地引用,正在转储线程 [monodroid-debug] 尝试使用以下选项初始化调试器: --debugger-agent=transport=dt_socket,loglevel=0,address=10.0.2.2:49376,embedding=1 [monodroid-assembly] open_from_bundles: 加载程序集Xamarin.Android.Arch.Core.Common.dll失败 已加载程序集: Testing.App.Android.dll 已加载程序集: AutoMapper.dll [外部]
解决方案建议
1. 修复缺失的Xamarin.Android.Arch.Core.Common.dll
- 打开NuGet包管理器,检查
Xamarin.Android.Arch.Core.Common包是否已安装,确保版本与项目其他依赖兼容;未安装则手动添加,已安装则尝试更新或重新安装 - 执行清理解决方案,再执行重新生成解决方案,确保所有依赖程序集正确复制到Android项目的输出目录
2. 调整CPU架构配置
- 日志提示
Unexpected CPU variant for x86: x86_64,当前模拟器为x86_64架构,可暂时在高级Android选项中仅保留x86_64架构,移除armeabi-v7a和arm64-v8a,减少架构匹配冲突
3. 对齐目标版本与模拟器版本
- 当前目标Android版本为API 34,但模拟器使用API 33,版本不匹配可能导致兼容性问题:
- 尝试创建API 34的Pixel 6 Pro模拟器进行测试
- 或暂时将项目的目标Android版本降级至API 33,与模拟器版本一致后重新部署
4. 优化调试与启动配置
- 尝试启用快速部署:在Android项目属性 -> 生成 -> 安卓选项中勾选“使用快速部署”,减少部署时的文件复制问题
- 以非调试模式运行应用:在Visual Studio工具栏中选择“开始执行(不调试)”,判断是否是调试器初始化过程导致的启动阻塞
5. 清理模拟器状态
- 在模拟器中进入设置 -> 应用 -> 找到测试应用 -> 清除数据和缓存,重新部署应用,避免旧缓存数据干扰
6. 检查启动屏代码
- 查看
SplashActivity的实现,确认OnCreate等生命周期方法中是否存在耗时操作(如同步网络请求、大量文件读取/计算),此类操作会阻塞主线程导致启动屏卡死,需将耗时逻辑移至异步线程执行
内容的提问来源于stack exchange,提问作者BluePalmTree
相关产品推荐
相关产品推荐

