返回

如何在搭载 ARM CPU M1 的 macOS 上优化 Android Studio/Emulator?

Android

在搭载 ARM CPU M1 的 macOS 上优化 Android Studio/Emulator

作为一名经验丰富的程序员和技术作家,我遇到了一些程序员在搭载 ARM CPU M1 的 macOS 上使用 Android Studio/Emulator 时遇到的问题。因此,我写下了这篇文章来帮助大家解决这些问题。

问题

在搭载 ARM CPU M1 的 macOS Big Sure 11.0.1 上安装 Android Studio 4.1 后,运行仿真器会出现“CPU 不支持 VT-x”的错误。即使是 ARM 镜像也会出现此问题,导致仿真器运行缓慢。

解决方案

要解决这些问题,请按照以下步骤操作:

1. 解决 VT-x 错误

  • 确保已安装 Rosetta 2,它允许在 ARM 架构的 Mac 上运行 Intel x86_64 应用程序。
  • 在终端中运行以下命令:
sudo spctl --master-disable
  • 重启 Mac。

2. 优化仿真器性能

  • 启用硬件加速:

    • 打开 Android Studio。
    • 前往“设置”>“外观与行为”>“系统设置”>“Android 仿真器”。
    • 勾选“使用硬件 GPU 仿真”和“Enable Host CPU”。
  • 减少 RAM 分配:

    • 在“Android 仿真器”设置中,将“内存”值降低到 1.5GB 或更低。
  • 使用较旧的 API 级别:

    • 较旧的 API 级别(例如 API 25)对硬件要求较低。在“创建/选择虚拟设备”窗口中,选择较旧的 API 级别。

故障排除提示

  • 确保已更新到 Android Studio 的最新版本。
  • 尝试在不同端口上运行仿真器。
  • 重新创建虚拟设备。
  • 禁用 Hyper-V(如果已启用)。
  • 确保你的 Mac 拥有足够的 RAM 和 CPU 资源。

示例代码

// 创建虚拟设备
avdManager.createAvd(
    avdInfo,
    avdName,
    deviceBuilder.build(),
    skinName,
    systemImageSource,
    null,
    true
);

// 启动虚拟设备
emulator.launch(
    vmHandle,
    avdName,
    avdInfo,
    new LaunchOptions().setUseHostGpu(true).setEnableHostCpu(true)
);

注意事项

  • 即使经过优化,在 ARM M1 上运行仿真器也可能比在 x86_64 Mac 上运行慢。
  • 使用硬件加速需要 macOS 11.2 或更高版本。
  • 减少 RAM 分配可能会影响应用程序的性能,因此请根据需要进行调整。

结论

按照本文中的步骤,你应该能够在搭载 ARM CPU M1 的 macOS 上成功使用 Android Studio/Emulator。虽然仿真器在 ARM M1 上的性能可能不如 x86_64 Mac,但通过这些优化,你可以显著提高其速度和效率。

常见问题解答

1. 如何检查我的 Mac 是否支持 VT-x?

  • 在终端中运行以下命令:
sysctl -a | grep vmx
  • 如果输出显示“vmx = 1”,则表示你的 Mac 支持 VT-x。

2. 如何安装 Rosetta 2?

  • Rosetta 2 随 macOS Big Sure 11.0.1 一起提供。如果没有安装,你可以从 Apple 支持网站下载并安装它。

3. 如何禁用 Hyper-V?

  • Hyper-V 是 Windows 上的虚拟化平台。如果已启用,请按照以下步骤在 macOS 中禁用它:
    • 打开“系统偏好设置”。
    • 点击“共享”。
    • 在“共享”选项卡中,取消选中“Windows 共享”复选框。

4. 为什么在使用较新的 API 级别时仿真器运行较慢?

  • 较新的 API 级别需要更多的硬件资源。如果你在使用较新的 API 级别时遇到性能问题,请尝试使用较旧的 API 级别。

5. 我可以做些什么来进一步提高仿真器性能?

  • 确保你的 Mac 拥有足够的 RAM 和 CPU 资源。
  • 关闭不必要的应用程序和后台进程。
  • 使用 Android Studio 的 Instant Run 功能,它允许你对应用程序的代码进行更改而无需重新编译整个应用程序。