如何解决 macOS Catalina 10.15.7 中最新 Android Studio Meerkat 启动模拟器 Unknown Error 的问题

如何解决 macOS Catalina 10.15.7 中最新 Android Studio Meerkat 启动模拟器 Unknown Error 的问题

大家好,今天我在 macOS Catalina 10.15.7 上使用最新版 Android Studio(代号 Meerkat)时,启动 Android 模拟器老是遇到"Unknown Error"的报错,搞得开发效率直线下降。作为一个常年在 macOS 上折腾 Android 开发的码农,我深知这种问题的烦人之处,今天就来跟大家分享一下我的解决经验,顺便详细讲讲如何通过命令行启动模拟器,希望能帮到你!

问题复现:从"Unknown Error"说起

先说说我遇到的情况吧。我在 macOS Catalina 10.15.7 上装了最新版的 Android Studio Meerkat,配置好 AVD(Android Virtual Device)后,满怀期待地点击启动项目的时候,结果屏幕一闪,模拟器跳出"Unknown Error"的错误。什么鬼?试了几次后,我开始怀疑是不是哪里配置错了,但检查了环境变量、AVD 设置,一切似乎都正常。这让我有点抓狂------新版工具怎么还不如老版本稳定呢?到底是什么问题引起的呢?

后来我尝试用命令行启动模拟器,结果发现更具体的错误信息,这让我逐渐摸到了一些线索。

前置准备:从命令行启动模拟器

在解决问题之前,我想先跟大家聊聊如何通过命令行启动 Android 模拟器,因为很多朋友可能更习惯用 Android Studio 的图形界面,但命令行其实更灵活,还能帮我们调试问题。

  1. 确保环境变量配置好

    首先,得让终端认识 Android SDK 的工具。打开终端,编辑你的 shell 配置文件(我用的是 Zsh,所以是 ~/.zshrc,如果你用 Bash 就编辑 ~/.bashrc),加入以下内容:

    bash 复制代码
    export ANDROID_HOME=~/Library/Android/sdk
    export PATH=$PATH:$ANDROID_HOME/emulator
    export PATH=$PATH:$ANDROID_HOME/tools
    export PATH=$PATH:$ANDROID_HOME/platform-tools

    保存后,运行 source ~/.zshrc 让配置生效。可以用 echo $ANDROID_HOME 检查是否设置成功。

  2. 查看可用 AVD

    配置好环境后,输入以下命令列出你创建的虚拟设备:

    bash 复制代码
    emulator -list-avds

    这会返回类似 Pixel_4_XL 这样的名字,就是你的 AVD 名。

  3. 启动模拟器

    用这个命令启动指定的 AVD:

    bash 复制代码
    emulator -avd Pixel_4_XL

    如果一切正常,模拟器就会弹出来。但如果像我一样遇到"Unknown Error",那就得接着往下看解决办法了!

问题排查:错误信息指向兼容性

我用命令行启动时,第一次遇到了这个错误:

bash 复制代码
dyld: Symbol not found: __ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE
  Referenced from: /Users/xxx/Library/Android/sdk/emulator/lib64/libabseil_dll.dylib (which was built for Mac OS X 12.7)
  Expected in: /usr/lib/libc++.1.dylib
in /Users/xxx/Library/Android/sdk/emulator/lib64/libabseil_dll.dylib
zsh: abort      emulator -avd Pixel_4_XL

这让我怀疑是版本兼容性问题,因为错误提到 Mac OS X 12.7,而我的系统是 10.15.7,显然低了不少。于是我在网上查了查,有人建议降低 Emulator 版本,并推荐了官方的 Android Emulator 历史版本存档。我决定试试看。

解决方法:降低 Emulator 版本

根据 Android Emulator Archive 的指引,我尝试降低 Emulator 版本来解决问题。官方页面提供了详细的手动安装步骤,我按照以下方法操作,最终搞定了:

  1. 找到 SDK 安装目录

    首先,我需要确认我的 Android SDK 安装路径。在 macOS 上,默认路径是 $HOME/Library/Android/sdk,也就是 /Users/xxx/Library/Android/sdk

    • 你可以在 Android Studio 中打开 Preferences > Appearance & Behavior > System Settings > Android SDK ,查看 Android SDK Location,确认具体路径。
    • 如果用 Finder 浏览,Library 文件夹可能默认隐藏,可以通过 Finder 的 Go > Go to Folder 输入 ~/Library 打开。
  2. 备份现有的 Emulator 文件夹

    在 SDK 目录下有个 emulator 文件夹,我先把它改名备份一下,以免操作失误搞乱原文件。比如,我改成了 emulator_original

    bash 复制代码
    mv ~/Library/Android/sdk/emulator ~/Library/Android/sdk/emulator_original
  3. 下载并解压新版本

    • 打开 Android Emulator Archive,我先试了 33.1.24,下载对应的 macOS 压缩包。

    • 解压后,把内容移动到 SDK 的 emulator 目录下:

      bash 复制代码
      unzip emulator-darwin-x86_64-33.1.24.zip -d ~/Library/Android/sdk/emulator
    • 运行测试:

      bash 复制代码
      emulator -avd Pixel_4_XL
    • 结果还是报错:

      bash 复制代码
      INFO    | Android emulator version 33.1.24.0 (build_id 11237101) (CL:N/A)
      dyld: Symbol not found: _vmnet_enable_isolation_key
      Referenced from: /Users/xxx/Library/Android/sdk/emulator/qemu/darwin-x86_64/qemu-system-x86_64 (which was built for Mac OS X 11.1)
      Expected in: /System/Library/Frameworks/vmnet.framework/Versions/A/vmnet
      zsh: abort      emulator -avd Pixel_4_XL
    • 看来 33.1.24 还是太新,依赖 macOS 11.1。

  4. 清除隔离属性(macOS 特有步骤)

    macOS 有个安全机制,可能会标记下载的文件为"隔离",需要清除这个属性。我运行了:

    bash 复制代码
    xattr -dr com.apple.quarantine ~/Library/Android/sdk/emulator

    这样可以减少启动时系统弹窗提示。

  5. 替换 package.xml 并修改版本号

    • 从备份的 emulator_original 文件夹中复制 package.xml 到新的 emulator 目录:

      bash 复制代码
      cp ~/Library/Android/sdk/emulator_original/package.xml ~/Library/Android/sdk/emulator/
    • 打开 package.xml,找到版本号部分,比如:

      xml 复制代码
      <revision><major>31</major><minor>1</minor><micro>4</micro></revision>
    • 修改成我下载的版本号(比如 33.1.24),保存文件。

  6. 再试更低版本:32.1.15

    • 既然 33.1.24 不行,我又从存档页面下载了 32.1.15,重复上面步骤解压并替换。

    • 修改 package.xml 中的版本号为 <major>32</major><minor>1</minor><micro>15</micro>

    • 运行:

      bash 复制代码
      emulator -avd Pixel_4_XL
    • 这次终于成功了!模拟器顺利启动,我跑了个简单 App 测试,完全没问题。

为什么这样能解决?

分析下来,最新版 Emulator 是为 macOS 12 或 11 设计的,依赖一些新系统符号(像 _vmnet_enable_isolation_key),而 Catalina 10.15.7 的框架太老,压根不支持。降低到 32.1.15 后,Emulator 的依赖刚好跟我的系统匹配上了。

小建议:调试和优化

  • 加日志查问题 :如果还不确定问题出在哪,可以加 -verbose 参数:

    bash 复制代码
    emulator -avd Pixel_4_XL -verbose

    这样能看到详细日志,方便定位。

  • 试试软件渲染 :如果启动慢或不稳定,可以加个参数:

    bash 复制代码
    emulator -avd Pixel_4_XL -gpu swiftshader

写在最后

折腾了一圈,总算让模拟器在 macOS Catalina 上跑起来了。通过命令行启动和手动换版本的方法,我不仅解决了"Unknown Error",还对 Android 工具链多了几分了解。希望这篇经验分享能帮到跟我一样卡在兼容性问题里的朋友。如果你也试了这些步骤,欢迎在评论区聊聊你的结果,或者有啥更好的办法,咱们一起探讨!

题外话:欢迎关注我个人公众号"IT个人圈"。

相关推荐
HyaCinth28 分钟前
产品经理:那谁不在,你来做一下吧
前端·javascript·react.js
程序员马晓博1 小时前
Cursor VS Trae, 深度对比第二弹
前端
陈大鱼头1 小时前
CSS 2020-2025:六年演进与革新全景图
前端·css
最新资讯动态1 小时前
“官方网站+公开课程”双赋能,鸿蒙游戏开发者服务焕新升级
前端
京东零售技术1 小时前
在京东做技术是种什么体验?| 13位零售人告诉你答案
前端·后端·面试
藏在歌词里1 小时前
ruoyi-vue部署2
前端·javascript·vue.js
她的双马尾2 小时前
CSS3 基础布局技术与响应式设计
前端·css·css3
small_wh1te_coder2 小时前
超硬核区块链算法仿真:联盟链PBFT多线程仿真实现 :c语言完全详解版
前端·stm32·单片机·嵌入式硬件·算法·区块链·共识算法
COLDEHY2 小时前
vue 中常用操作数组的方法
前端·javascript·vue.js
Honeysea_702 小时前
php的用途和基础语法【初学者进】
开发语言·前端·php