Search code examples
androidandroid-emulatorqemuapple-m1apple-silicon

Android emulator on apple silicon (arm64) could be run only using sudo mode


I'm trying to start android emulator on apple silicon mac and I'm always getting the same results:

  1. Running emulator directly through Android Studio (the latest stable version, Arctic Fox 2020.3.1 Patch 4) causes a problem, when the process qemu-system-arch64 stucks and uses 99% CPU (there is no emulator's screen or something like than). Such behavior produces some logs:

internal-error-msg.txt says:

emuglConfig_init: blacklisted=0 has_guest_renderer=0, mode: auto, option: (null)

emuglConfig_init: auto-selected swiftshader_indirect based on conditions and UI preference 3

emuglConfig_init: GPU emulation enabled using 'swiftshader_indirect' mode

Deciding if GLDirectMem/Vulkan should be enabled. Selected renderer: 8 API level: 32 host GPU blacklisted? 0

Swiftshader selected, enabling Vulkan.

Enabling GLDirectMem
Enabling Vulkan
Adding to the library search path: /Users/xset/Library/Android/sdk/emulator/lib64/gles_swiftshader

opengl_log.txt says:

Initializing hardware OpenGLES emulation support
android_startOpenglesRenderer: gpu info

RenderWindow: CMD_INITIALIZE w=1080 h=2280
FrameBuffer::initialize
SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib]

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib]: not found in map, open for the first time

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib] (posix): begin

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib] (posix,darwin): call dlopen

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib] (posix,darwin): failed, try again with [/Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib]

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib] failed (posix). dlerror: []

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib]

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib]: not found in map, open for the first time

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib] (posix): begin

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib] (posix,darwin): call dlopen

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib] (posix,darwin): failed, try again with [/Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib]

SharedLibrary::open for [/Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib] failed (posix). dlerror: []

SharedLibrary::open for [libGLESv2.dylib]: not found in map, open for the first time

SharedLibrary::open for [libGLESv2.dylib] (posix): begin

SharedLibrary::open for [libGLESv2.dylib] (posix,darwin): call dlopen

SharedLibrary::open for [libGLESv2.dylib] (posix,darwin): failed, try again with [libGLESv2.dylib]

SharedLibrary::open for [libGLESv2.dylib] failed (posix). dlerror: [dlopen(libGLESv2.dylib, 0x0002): tried: '/Users/xset/Library/Android/sdk/emulator/lib64/qt/lib/libGLESv2.dylib' (no such file), '/Users/xset/Library/Android/sdk/emulator/lib64/gles_swiftshader/libGLESv2.dylib' (code signature in <B48F2D27-E9C4-30EF-A948-C]

SharedLibrary::open for [libEGL.dylib]: not found in map, open for the first time

SharedLibrary::open for [libEGL.dylib] (posix): begin

SharedLibrary::open for [libEGL.dylib] (posix,darwin): call dlopen

SharedLibrary::open for [libEGL.dylib] (posix,darwin): failed, try again with [libEGL.dylib]

SharedLibrary::open for [libEGL.dylib] failed (posix). dlerror: [dlopen(libEGL.dylib, 0x0002): tried: '/Users/xset/Library/Android/sdk/emulator/lib64/qt/lib/libEGL.dylib' (no such file), '/Users/xset/Library/Android/sdk/emulator/lib64/gles_swiftshader/libEGL.dylib' (code signature in <5C3ABCC5-722A-3AEA-AF5B-6CEEFF8D10]

opengl_cxt_log.txt says nothing

  1. Running emulator through terminal (/Users/xset/Library/Android/sdk/emulator/emulator @Pixel_4_API_32) causes such output:
INFO    | Android emulator version 30.9.4.0 (build_id 7759208) (CL:N/A)
WARNING | unexpected system image feature string, emulator might not function correctly, please try updating the emulator.
WARNING | cannot add library /Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib: failed
WARNING | cannot add library /Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib: failed
ERROR   | EglOsGlLibrary: Could not open GL library libGLESv2.dylib [dlopen(libGLESv2.dylib, 0x0002): tried: '/Users/xset/Library/Android/sdk/emulator/lib64/qt/lib/libGLESv2.dylib' (no such file), '/Users/xset/Library/Android/sdk/emulator/lib64/gles_swiftshader/libGLESv2.dylib' (code signature in <B48F2D27-E9C4-30EF-A948-C]

ERROR   | EglOsEglDispatcher: Could not open EGL library libEGL.dylib [dlopen(libEGL.dylib, 0x0002): tried: '/Users/xset/Library/Android/sdk/emulator/lib64/qt/lib/libEGL.dylib' (no such file), '/Users/xset/Library/Android/sdk/emulator/lib64/gles_swiftshader/libEGL.dylib' (code signature in <5C3ABCC5-722A-3AEA-AF5B-6CEEFF8D10]
  1. Running the same command in terminal, but with SUDO works well sudo /Users/xset/Library/Android/sdk/emulator/emulator @Pixel_4_API_32. It runs emulator in "apple-native" mode and everything works fine. It also produces some INFO logs:
INFO    | Android emulator version 30.9.4.0 (build_id 7759208) (CL:N/A)
WARNING | unexpected system image feature string, emulator might not function correctly, please try updating the emulator.
WARNING | cannot add library /Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libvulkan.dylib: failed
WARNING | cannot add library /Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib: failed
WARNING | cannot add library /Users/xset/Library/Android/sdk/emulator/qemu/darwin-aarch64/lib64/vulkan/libMoltenVK.dylib: failed
INFO    | added library /Users/xset/Library/Android/sdk/emulator/lib64/vulkan/libMoltenVK.dylib
createOrGetGlobalVkEmulation: warning: instance doesn't support external memory capabilities, picking first physical device
INFO    | configAndStartRenderer: setting vsync to 60 hz
INFO    | Sending adb public key [QAAAAIcNyIfJ1ydnXV4qz3eCWfMwRr0FlqitJHt/0ZHGRTLW4zOVPWMsHNRgO7u0DwRAyNnNa0iQI1Dptp6FvE1PLAr6/eAmYBPwM3/ZqDQKjuglikfnLLugTDa3K8CjUwBe4OkprODSUqv5dcdgPBgpG0vqFJnRQSWA2I/n5dh6QEbsJE8oDOz0ol/PMs9X3j9J1bl6wEhB0pClsH19byXNG4mB9peZ+MoygLE6WeFH1KXN1tQSPUIGd7ePnhtBU5JI86QudZ2SDvd354LM3VGsqfzOGf0SmzPZUOm1T5vBcijtBAm0f+s85K3j5LoQoZu+xgGGDPNTuN+21bQ8NMEC7+z1lqCWhgD8IPbtqypivOFHGbp2CFTjCeH5il84ATs0+O3ejwU4foc7GCWpw71WbqD09+++LIdJvCB7O+GkNebgaJvGjaHqQ7eaj0q3Lf6u6wf/3kSH8fi3QFEyzO0GsAZxAK5J5F7xeXKDznWSgS6fTwDsroU26tcT8B/WHWh7qcNhZeNJziLCyHh8dRbsn1MXUKqleJJwvpGrewUQhmfk1Kb/QlVEBjn1RODon1aWsLZ7ta8vSr2EVk4K4mj4hsXaV5XT3nEP1/ur3kZgydoantUohAuqPlQyoDeBjviGVxg9Guk2p4FZqzuuOVtgV+JZs2PWEt7NdF//mgsSmP/fl6CtawEAAQA= root@unknown]
INFO    | Rootcanal has **NOT** been activated.
INFO    | Started GRPC server at 127.0.0.1:8554, security: Local
INFO    | Advertising in: /Users/xset/Library/Caches/TemporaryItems/avd/running/pid_12298.ini

So what should I do to made it run natively through Android Studio without sudo-mode?


Solution

  • Issue was successfully fixed in Android Emulator revision 31.2.7. Just go to Android SDK Manager and update it!

    According to android emulator release notes:

    31.2.7 (February 1, 2022)
    
    [Bug fix] Emulator hanging error on M1 machines.