返回

告别崩溃134:macOS安卓模拟器闪退修复指南

Android

搞定 Android 模拟器在 macOS 上的崩溃 (退出码 134)

用 Android Studio 开发 App 时,模拟器是个离不开的好帮手。但有时候,特别是更新了某些组件之后,你可能会碰到模拟器启动就闪退的情况,还伴随着一个让人头疼的错误码:Emulator terminated with exit code 134。如果你恰好在 macOS 上遇到这事儿,并且在 idea.log 里翻到了类似下面的记录,那这篇文章或许能帮上你。

2025-02-15 11:20:56,466 [ 113555]   INFO - Emulator: 5.1 WVGA API 34 - /Users/ahmed/Library/Android/sdk/emulator/emulator -netdelay none -netspeed full -avd 5.1\_WVGA\_API\_34 -qt-hide-window -grpc-use-token -idle-grpc-timeout 300
...
2025-02-15 11:20:56,655 [ 113744]   INFO - Emulator: 5.1 WVGA API 34 - dyld: Symbol not found: \_kCGColorSpaceITUR\_2100\_HLG
2025-02-15 11:20:56,655 [ 113744]   INFO - Emulator: 5.1 WVGA API 34 -   Referenced from: /Users/ahmed/Library/Android/sdk/emulator/lib64/qt/lib/libQt6WebEngineCoreAndroidEmu.6.5.3.dylib (which was built for Mac OS X 11.0)
2025-02-15 11:20:56,655 [ 113744]   INFO - Emulator: 5.1 WVGA API 34 -   Expected in: /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
...
2025-02-15 11:20:56,865 [ 113954]   INFO - Emulator: 5.1 WVGA API 34 - Process finished with exit code 134 (interrupted by signal 6:SIGABRT)
2025-02-15 11:20:56,865 [ 113954]   WARN - Emulator: 5.1 WVGA API 34 - Emulator terminated with exit code 134

别急,咱们一起来看看这到底是咋回事,又该怎么解决。

揪出真凶:为啥模拟器会崩?

日志是排查问题的好起点。仔细看上面的日志片段,关键信息在这里:

  1. dyld: Symbol not found: _kCGColorSpaceITUR_2100_HLG
  2. Referenced from: /Users/ahmed/Library/Android/sdk/emulator/lib64/qt/lib/libQt6WebEngineCoreAndroidEmu.6.5.3.dylib (which was built for Mac OS X 11.0)
  3. Expected in: /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics

简单翻译一下:

  • dyld 是 macOS 的动态链接器,负责在程序运行时加载所需的库和符号。
  • 它报告说找不到一个叫做 _kCGColorSpaceITUR_2100_HLG 的符号。
  • 这个符号是被 Android 模拟器依赖的一个 Qt 库 (libQt6WebEngineCoreAndroidEmu.6.5.3.dylib) 引用的。
  • 日志明确指出,这个 Qt 库是为 Mac OS X 11.0 (也就是 macOS Big Sur) 或更高版本构建的
  • dyld 期望在系统的 CoreGraphics.framework 框架里找到这个符号,但在你当前的 macOS 版本 (从问题看是 10.15.7 Catalina) 中,它不存在。

所以,问题的根源很清楚了:你安装的 Android Emulator 版本(或者说它捆绑的 Qt 库版本)太新了,它需要 macOS 11.0 或更高版本才有的系统功能,而你的 macOS 10.15.7 系统满足不了这个要求。 运行时动态链接器找不到需要的符号,程序无法继续执行,最终崩溃退出,并报告了 SIGABRT 信号(Signal 6)以及对应的退出码 134。

这通常发生在你更新了 Android Studio 或者通过 SDK Manager 更新了 Android Emulator 组件之后。新版本的模拟器为了支持新特性或者修复旧问题,可能会依赖更新的操作系统功能。

对症下药:几种解决思路

知道了原因,解决起来就更有方向了。下面是几种可行的方案,你可以根据自己的情况选择尝试:

方案一:请回旧版模拟器

这是最直接解决版本不兼容问题的办法。既然新版模拟器用不了,那就换回一个能在你的 macOS 10.15.7 上跑的旧版本。

  • 原理:
    旧版本的 Android Emulator 是基于旧版 macOS SDK 构建的,不会依赖 macOS 11.0+ 才有的新符号或特性。通过安装一个兼容你操作系统的模拟器版本,就能绕开这个 Symbol not found 的错误。

  • 操作步骤:
    你可以通过 Android Studio 自带的 SDK Manager 来降级 Android Emulator。

    1. 打开 Android Studio。
    2. 点击顶部菜单栏 Tools -> SDK Manager
    3. 切换到 SDK Tools 标签页。
    4. 取消勾选 顶部的 Hide Obsolete Packages (如果存在)。
    5. 找到 Android Emulator 这一项。
    6. 勾选右下角的 Show Package Details 。这会展开 Android Emulator 下面所有可用的版本。
    7. 你会看到当前安装的版本(通常是最新的)是被勾选的。取消勾选这个最新版本
    8. 向下滚动列表,找到一个较旧的版本 并勾选它。哪个版本合适?没有绝对的标准答案,你可能需要试一下。从日志看,出问题的模拟器版本是 35.3.11.0 左右 (根据 build id 推断或者 Qt 库版本)。你可以尝试安装 34.x.x33.x.x 系列的版本,比如 33.1.24 或更早的版本通常在 Catalina 上兼容性较好。稳妥起见,可以先尝试比当前版本低一两个大版本的最新修订版。
    9. 点击 ApplyOK。SDK Manager 会卸载当前的新版本,然后下载并安装你选中的旧版本。
    10. 安装完成后,重启 Android Studio
    11. 再次尝试启动你的 AVD (Android Virtual Device)。
  • 命令行方式 (进阶):
    如果你更喜欢用命令行,可以使用 sdkmanager 工具。

    1. 打开终端 (Terminal)。
    2. 切换到 Android SDK 的 cmdline-tools/latest/bin 目录,或者确保 sdkmanager 在你的 PATH 环境变量里。路径通常类似:/Users/你的用户名/Library/Android/sdk/cmdline-tools/latest/bin
    3. 首先,查看当前安装和可用的模拟器版本:
      ./sdkmanager --list | grep emulator
      
    4. 卸载当前版本(如果知道具体版本号可以指定,或者直接卸载 emulator):
      ./sdkmanager --uninstall "emulator"
      
      (如果卸载失败,可能需要先通过 Android Studio 的 SDK Manager 卸载)。
    5. 安装一个指定的旧版本。你需要从 --list 的输出中找到一个合适的旧版本字符串,比如 emulator;33.1.24 (版本号仅为示例,请根据实际列表选择):
      ./sdkmanager "emulator;version=33.1.24"
      # 或者尝试其他版本号,例如
      # ./sdkmanager "emulator;version=34.2.13"
      
      注意:版本号需要精确匹配 sdkmanager --list 显示的格式。
    6. 安装完成后,同样建议重启 Android Studio 再尝试启动模拟器。
  • 安全建议:
    降级模拟器意味着你可能会失去最新版本带来的性能优化、新功能或安全修复。这是一个临时的权衡。

方案二:升级你的 macOS

这是更彻底,也是面向未来的解决方案。既然模拟器需要更新的系统,那就把系统升上去。

  • 原理:
    升级 macOS 到 11.0 (Big Sur) 或更高版本 (如 Monterey, Ventura, Sonoma 等),系统自带的 CoreGraphics.framework 就会包含 _kCGColorSpaceITUR_2100_HLG 这个符号,从而满足新版模拟器的依赖要求。

  • 操作步骤:

    1. 重要:升级前务必备份你的 Mac! 使用时间机器 (Time Machine) 或其他备份工具完整备份你的数据。
    2. 检查你的 Mac 硬件是否支持你想升级到的 macOS 版本。可以在 Apple 官网查阅系统要求。macOS Big Sur (11.0) 对硬件的要求比 Catalina (10.15) 要高一些。
    3. 确保你的磁盘有足够的可用空间进行升级。
    4. 打开 系统偏好设置 (System Preferences) 或 系统设置 (System Settings) (取决于你的 macOS 版本)。
    5. 点击 软件更新 (Software Update)。
    6. 系统会检查可用的 macOS 升级。如果检测到 Big Sur 或更新的版本,点击 立即升级 (Upgrade Now) 并按照屏幕提示操作。
    7. 下载和安装过程可能需要较长时间,并会重启电脑。
    8. 升级完成后,你的 Android Emulator 应该就能正常启动了(可能需要先确保模拟器是最新版本)。
  • 安全建议与注意事项:

    • 升级操作系统是个大动作,除了硬件兼容性,还需要考虑你日常使用的其他软件是否兼容新系统。最好在升级前确认关键应用的支持情况。
    • 确保在网络稳定、电源充足的情况下进行升级。

方案三:试试冷启动或清除数据

虽然这个问题很可能是版本不兼容导致的,但在排查模拟器问题时,冷启动 (Cold Boot) 和清除数据 (Wipe Data) 是常用的手段,有时也能解决一些奇怪的启动问题。

  • 原理:

    • 冷启动 (Cold Boot Now): 强制模拟器进行一次完整的启动流程,就像物理手机关机再开机一样,而不是从快照恢复。可以解决某些因保存状态损坏导致的问题。
    • 清除数据 (Wipe Data): 将模拟器恢复到出厂设置,删除所有用户安装的应用和数据。可以解决因模拟器内部数据损坏或配置错误导致的问题。
  • 操作步骤:

    1. 打开 Android Studio。
    2. 点击顶部菜单栏 Tools -> AVD Manager (或通过工具栏图标进入)。
    3. 找到你无法启动的那个 AVD。
    4. 在该 AVD 的行末,点击那个下拉小三角(或 Actions 列下的菜单按钮)。
    5. 选择 Cold Boot Now,然后尝试启动模拟器。
    6. 如果冷启动无效,再次打开 AVD Manager 的 AVD 菜单,选择 Wipe Data请注意:这会删除该模拟器内的所有数据! 确认后,再尝试启动模拟器。
  • 适用场景:
    对于 dyld: Symbol not found 这个特定错误,这两种方法效果可能有限,但操作简单,值得一试,特别是如果降级或升级系统暂时不方便的话。

方案四:检查 AVD 图形渲染设置

偶尔,图形渲染设置不当也可能导致模拟器启动失败,尽管和日志显示的 dyld 错误关联不大,但也属于排查范围。

  • 原理:
    Android 模拟器支持不同的图形渲染后端:自动选择、硬件加速 (利用宿主机的 GPU)、软件渲染 (利用 CPU)。在某些系统或驱动组合下,特定的设置可能会出问题。

  • 操作步骤:

    1. 打开 AVD Manager
    2. 找到你的 AVD,点击编辑按钮 (铅笔图标)。
    3. 在虚拟设备配置窗口中,找到 图形 (Graphics)Emulated Performance - Graphics 相关的设置 (可能需要点击 Show Advanced Settings)。
    4. 尝试切换选项:
      • 如果当前是 AutomaticHardware,尝试改成 Software - GLES 2.0
      • 如果当前是 Software,可以试试改成 Hardware - GLES 2.0Automatic (如果你的 Mac 和驱动支持)。
    5. 保存更改 (Finish),然后尝试启动 AVD。
  • 提示:

    • 软件渲染通常兼容性最好,但性能较低。
    • 硬件加速性能好,但在旧系统或特定硬件上可能不稳定。在 macOS 上,硬件加速通常利用 Metal API。

进阶技巧与诊断

如果你想更深入地了解问题或尝试更细致的控制:

  • 查找兼容的模拟器版本: 可以在 Google 的 Android Emulator 发行说明 (release notes) 或者一些开发者社区(如 Stack Overflow)搜索,看看其他 macOS 10.15 用户报告哪个模拟器版本是稳定可用的。
  • 命令行启动模拟器获取详细日志:
    可以直接从命令行启动模拟器,并加上 -verbose 参数,这样可以在终端看到更详细的输出,有助于诊断问题。
    # 找到模拟器可执行文件路径
    # 通常在 /Users/你的用户名/Library/Android/sdk/emulator/
    cd /Users/你的用户名/Library/Android/sdk/emulator/
    # 启动指定的 AVD,例如名字叫 Pixel_6_API_34
    ./emulator -avd Pixel_6_API_34 -verbose
    
  • 检查 Android SDK 环境变量: 确保你的 ANDROID_HOMEANDROID_SDK_ROOT 环境变量正确设置,指向你的 Android SDK 安装目录。虽然这个问题主要由库依赖引起,但环境配置正确总是好的。

面对 Emulator terminated with exit code 134dyld: Symbol not found 错误时,根本原因通常是 Android Emulator 版本与其运行的 macOS 版本之间的不兼容。最有效的解决办法是调整这两者之一:要么降级模拟器以适应旧系统,要么升级系统以满足新模拟器的要求。其他方法如冷启动、清除数据或调整图形设置,可以作为辅助排查手段。根据你的具体情况和偏好,选择最合适的方案来让你的模拟器重新跑起来吧。