告别崩溃134:macOS安卓模拟器闪退修复指南
2025-03-25 23:35:16
搞定 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
别急,咱们一起来看看这到底是咋回事,又该怎么解决。
揪出真凶:为啥模拟器会崩?
日志是排查问题的好起点。仔细看上面的日志片段,关键信息在这里:
dyld: Symbol not found: _kCGColorSpaceITUR_2100_HLG
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)
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。- 打开 Android Studio。
- 点击顶部菜单栏
Tools
->SDK Manager
。 - 切换到
SDK Tools
标签页。 - 取消勾选 顶部的
Hide Obsolete Packages
(如果存在)。 - 找到
Android Emulator
这一项。 - 勾选右下角的
Show Package Details
。这会展开Android Emulator
下面所有可用的版本。 - 你会看到当前安装的版本(通常是最新的)是被勾选的。取消勾选这个最新版本 。
- 向下滚动列表,找到一个较旧的版本 并勾选它。哪个版本合适?没有绝对的标准答案,你可能需要试一下。从日志看,出问题的模拟器版本是
35.3.11.0
左右 (根据 build id 推断或者 Qt 库版本)。你可以尝试安装 34.x.x 或 33.x.x 系列的版本,比如33.1.24
或更早的版本通常在 Catalina 上兼容性较好。稳妥起见,可以先尝试比当前版本低一两个大版本的最新修订版。 - 点击
Apply
或OK
。SDK Manager 会卸载当前的新版本,然后下载并安装你选中的旧版本。 - 安装完成后,重启 Android Studio 。
- 再次尝试启动你的 AVD (Android Virtual Device)。
-
命令行方式 (进阶):
如果你更喜欢用命令行,可以使用sdkmanager
工具。- 打开终端 (Terminal)。
- 切换到 Android SDK 的
cmdline-tools/latest/bin
目录,或者确保sdkmanager
在你的 PATH 环境变量里。路径通常类似:/Users/你的用户名/Library/Android/sdk/cmdline-tools/latest/bin
。 - 首先,查看当前安装和可用的模拟器版本:
./sdkmanager --list | grep emulator
- 卸载当前版本(如果知道具体版本号可以指定,或者直接卸载
emulator
):
(如果卸载失败,可能需要先通过 Android Studio 的 SDK Manager 卸载)。./sdkmanager --uninstall "emulator"
- 安装一个指定的旧版本。你需要从
--list
的输出中找到一个合适的旧版本字符串,比如emulator;33.1.24
(版本号仅为示例,请根据实际列表选择):
注意:版本号需要精确匹配./sdkmanager "emulator;version=33.1.24" # 或者尝试其他版本号,例如 # ./sdkmanager "emulator;version=34.2.13"
sdkmanager --list
显示的格式。 - 安装完成后,同样建议重启 Android Studio 再尝试启动模拟器。
-
安全建议:
降级模拟器意味着你可能会失去最新版本带来的性能优化、新功能或安全修复。这是一个临时的权衡。
方案二:升级你的 macOS
这是更彻底,也是面向未来的解决方案。既然模拟器需要更新的系统,那就把系统升上去。
-
原理:
升级 macOS 到 11.0 (Big Sur) 或更高版本 (如 Monterey, Ventura, Sonoma 等),系统自带的CoreGraphics.framework
就会包含_kCGColorSpaceITUR_2100_HLG
这个符号,从而满足新版模拟器的依赖要求。 -
操作步骤:
- 重要:升级前务必备份你的 Mac! 使用时间机器 (Time Machine) 或其他备份工具完整备份你的数据。
- 检查你的 Mac 硬件是否支持你想升级到的 macOS 版本。可以在 Apple 官网查阅系统要求。macOS Big Sur (11.0) 对硬件的要求比 Catalina (10.15) 要高一些。
- 确保你的磁盘有足够的可用空间进行升级。
- 打开
系统偏好设置
(System Preferences) 或系统设置
(System Settings) (取决于你的 macOS 版本)。 - 点击
软件更新
(Software Update)。 - 系统会检查可用的 macOS 升级。如果检测到 Big Sur 或更新的版本,点击
立即升级
(Upgrade Now) 并按照屏幕提示操作。 - 下载和安装过程可能需要较长时间,并会重启电脑。
- 升级完成后,你的 Android Emulator 应该就能正常启动了(可能需要先确保模拟器是最新版本)。
-
安全建议与注意事项:
- 升级操作系统是个大动作,除了硬件兼容性,还需要考虑你日常使用的其他软件是否兼容新系统。最好在升级前确认关键应用的支持情况。
- 确保在网络稳定、电源充足的情况下进行升级。
方案三:试试冷启动或清除数据
虽然这个问题很可能是版本不兼容导致的,但在排查模拟器问题时,冷启动 (Cold Boot) 和清除数据 (Wipe Data) 是常用的手段,有时也能解决一些奇怪的启动问题。
-
原理:
- 冷启动 (Cold Boot Now): 强制模拟器进行一次完整的启动流程,就像物理手机关机再开机一样,而不是从快照恢复。可以解决某些因保存状态损坏导致的问题。
- 清除数据 (Wipe Data): 将模拟器恢复到出厂设置,删除所有用户安装的应用和数据。可以解决因模拟器内部数据损坏或配置错误导致的问题。
-
操作步骤:
- 打开 Android Studio。
- 点击顶部菜单栏
Tools
->AVD Manager
(或通过工具栏图标进入)。 - 找到你无法启动的那个 AVD。
- 在该 AVD 的行末,点击那个下拉小三角(或 Actions 列下的菜单按钮)。
- 选择
Cold Boot Now
,然后尝试启动模拟器。 - 如果冷启动无效,再次打开 AVD Manager 的 AVD 菜单,选择
Wipe Data
。请注意:这会删除该模拟器内的所有数据! 确认后,再尝试启动模拟器。
-
适用场景:
对于dyld: Symbol not found
这个特定错误,这两种方法效果可能有限,但操作简单,值得一试,特别是如果降级或升级系统暂时不方便的话。
方案四:检查 AVD 图形渲染设置
偶尔,图形渲染设置不当也可能导致模拟器启动失败,尽管和日志显示的 dyld
错误关联不大,但也属于排查范围。
-
原理:
Android 模拟器支持不同的图形渲染后端:自动选择、硬件加速 (利用宿主机的 GPU)、软件渲染 (利用 CPU)。在某些系统或驱动组合下,特定的设置可能会出问题。 -
操作步骤:
- 打开
AVD Manager
。 - 找到你的 AVD,点击编辑按钮 (铅笔图标)。
- 在虚拟设备配置窗口中,找到
图形 (Graphics)
或Emulated Performance - Graphics
相关的设置 (可能需要点击Show Advanced Settings
)。 - 尝试切换选项:
- 如果当前是
Automatic
或Hardware
,尝试改成Software - GLES 2.0
。 - 如果当前是
Software
,可以试试改成Hardware - GLES 2.0
或Automatic
(如果你的 Mac 和驱动支持)。
- 如果当前是
- 保存更改 (
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_HOME
或ANDROID_SDK_ROOT
环境变量正确设置,指向你的 Android SDK 安装目录。虽然这个问题主要由库依赖引起,但环境配置正确总是好的。
面对 Emulator terminated with exit code 134
和 dyld: Symbol not found
错误时,根本原因通常是 Android Emulator 版本与其运行的 macOS 版本之间的不兼容。最有效的解决办法是调整这两者之一:要么降级模拟器以适应旧系统,要么升级系统以满足新模拟器的要求。其他方法如冷启动、清除数据或调整图形设置,可以作为辅助排查手段。根据你的具体情况和偏好,选择最合适的方案来让你的模拟器重新跑起来吧。