修复MacOS Big Sur 下 Android模拟无法运行

修复MacOS Big Sur 下 Android模拟无法运行

系统版本:MacOS Big Sur 11.3
Android emulator版本:30.5.5

表现

系统升级后Android模拟器无法运行,通过命令行启动模拟器运行报错如下:

% emulator -feature HVF -avd Pixel_2_API_29       
handleCpuAcceleration: feature check for hvf
emulator: INFO: QtLogger.cpp:68: Warning: QMetaObject::connectSlotsByName: No matching signal for on_new_posture_requested(int) ((null):0, (null))


emulator: INFO: QtLogger.cpp:68: Warning: QMetaObject::connectSlotsByName: No matching signal for on_dismiss_posture_selection_dialog() ((null):0, (null))


cannot add library /Users/zhangzhenli/Library/Android/sdk/emulator/qemu/darwin-x86_64/lib64/vulkan/libvulkan.dylib: failed
added library ./lib64/vulkan/libvulkan.dylib
cannot add library /Users/zhangzhenli/Library/Android/sdk/emulator/qemu/darwin-x86_64/lib64/vulkan/libMoltenVK.dylib: failed
HVF error: HV_ERROR
qemu-system-x86_64: failed to initialize HVF: Invalid argument
HAX is working and emulator runs in fast virt mode.
qemu-system-x86_64: Back to HAX accelerator
added library ./lib64/vulkan/libMoltenVK.dylib
emulator: INFO: GrpcServices.cpp:301: Started GRPC server at 127.0.0.1:8554, security: Local

问题原因

谷歌爬了一些发现了大概,简单说就是Big Sur 11.3针对安全性做了升级,现有的qemu没有及时适配。

解决方法

要解决此问题,我们要做的就是为qemu-system-x86_64二进制添加新的权限声明。

  1. 创建一个entitlements.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.security.hypervisor</key>
        <true/>
    </dict>
</plist>
  1. 签名qemu二进制文件:
 ~ % cd ~/Library/Android/sdk/emulator/
 emulator % codesign -s - --entitlements entitlements.xml --force ~/Library/Android/sdk/emulator/qemu/darwin-x86_64/qemu-system-x86_64

  1. 再次启动
 emulator % ./emulator -list-avds                                
Pixel_2_API_29
emulator %./emulator -feature HVF -avd Pixel_2_API_29
handleCpuAcceleration: feature check for hvf
emulator: INFO: QtLogger.cpp:68: Warning: QMetaObject::connectSlotsByName: No matching signal for on_new_posture_requested(int) ((null):0, (null))


emulator: INFO: QtLogger.cpp:68: Warning: QMetaObject::connectSlotsByName: No matching signal for on_dismiss_posture_selection_dialog() ((null):0, (null))


cannot add library /Users/zhangzhenli/Library/Android/sdk/emulator/qemu/darwin-x86_64/lib64/vulkan/libvulkan.dylib: failed
added library ./lib64/vulkan/libvulkan.dylib
cannot add library /Users/zhangzhenli/Library/Android/sdk/emulator/qemu/darwin-x86_64/lib64/vulkan/libMoltenVK.dylib: failed
added library ./lib64/vulkan/libMoltenVK.dylib
emulator: INFO: GrpcServices.cpp:301: Started GRPC server at 127.0.0.1:8554, security: Local

以上HVF error: HV_ERROR错误消除,成功启动了。

参考原文
链接: https://www.arthurkoziel.com/qemu-on-macos-big-sur/.

上一篇:Unidbg文档慢更(二)


下一篇:解决 Android Emulator 无法联网