No se puede iniciar Android emulator64 debido a que Qt no puede cargar xcb

No puedo iniciar el (android) emulator64-x86. Siempre falla con:

--> ./emulator64-x86 -avd loli -gpu off       
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: linuxfb, minimal, offscreen, xcb.

Reinstalling the application may fix this problem.
zsh: abort      ./emulator64-x86 -avd loli -gpu off

Cada hilo del foro que encontré sobre el problema era ejecutar ldd en el emulador64 y la biblioteca XCB para verificar si faltan dependencias:

--> ldd emulator64-x86                 
    linux-vdso.so.1 (0x00007ffefb048000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f3bfefb5000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f3bfec75000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f3bfe9e9000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3bfe7e5000)
    libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f3bfdf9f000)
    libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f3bfd838000)
    libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f3bfd14d000)
    libQt5Svg.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Svg.so.5 (0x00007f3bfcef8000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f3bfcb73000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3bfc828000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f3bfc625000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3bfc407000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3bfc1ef000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3bfbe39000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3bff1bd000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f3bfbc11000)
    libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f3bfb9e0000)
    libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f3bfb72a000)
    libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f3bfb4f7000)
    libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f3bfb258000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f3bfb03e000)
    libicui18n.so.57 => /usr/lib/x86_64-linux-gnu/libicui18n.so.57 (0x00007f3bfabca000)
    libicuuc.so.57 => /usr/lib/x86_64-linux-gnu/libicuuc.so.57 (0x00007f3bfa825000)
    libpcre2-16.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007f3bfa5b8000)
    libdouble-conversion.so.1 => /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1 (0x00007f3bfa3a7000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f3bfa093000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f3bf9e8f000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f3bf9c89000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f3bf9a77000)
    libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f3bf97c2000)
    libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f3bf9595000)
    libicudata.so.57 => /usr/lib/x86_64-linux-gnu/libicudata.so.57 (0x00007f3bf7b18000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3bf78a6000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f3bf7691000)

Y para LibXCB:

--> ldd /usr/lib/x86_64-linux-gnu/libxcb.so.1 
    linux-vdso.so.1 (0x00007ffc465d8000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f68c727c000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f68c7076000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f68c6cc0000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f68c6aab000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f68c76a8000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f68c68a3000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f68c6685000)

Detalles adicionales:

  • Emulador de Android versión 27.1.7.0 (build_id 4581633) (CL:b5ec07662db0f9d8644e5fbda7040053a8741bfd)
  • SID de Debian x64

Entonces parece que todas las dependencias están bien. ¿Cómo puedo depurar más ese problema? ¿Alguna idea de cómo puedo hacer que funcione el emulador?

Resultó que puedo ejecutar QT con registro de depuración:

QT_DEBUG_PLUGINS=1 ./emulator64-x86 -avd loli -gpu off

Así que falla debido a:

Cannot load library /home/svetlin/software/android/emulator/lib64/qt/plugins/platforms/libqxcb.so: (/home/svetlin/software/android/emulator/lib64/qt/plugins/platforms/libqxcb.so: symbol _ZN26QPlatformIntegrationPlugin6createERK7QStringRK11QStringList, version Qt_5 not defined in file libQt5Gui.so.5 with link time reference)
Hoy empezó a funcionar sin hacer ningún cambio.

Respuestas (2)

Probé todas las soluciones posibles que pude encontrar en la red, pero todavía obtuve:

Cannot load library 
/home/darkstar/android/emulator/lib64/qt/plugins/platforms/libqxcb.so: 
(/lib64/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API' not found 
(required by /home/darkstar/android/emulator/lib64/qt/plugins/platforms/libqxcb.so))

This application failed to start because it could not find or load the 
Qt platform plugin "xcb" in "".

El mensaje de error es realmente engañoso. En mi carpeta '/lib64', tengo un archivo 'libQt5XcbQpa.so.5' y se vincula a la biblioteca compartida 'libQt5XcbQpa.so.5.10.1'.

Esta no es la versión correcta. Todas las bibliotecas correctas están realmente almacenadas en:

~/android/emulator/lib64/qt/lib

Si incluye la ruta anterior como parte de '$LD_LIBRARY_PATH', se ejecutará el emulador.

Para Android SDK versión 30.3.5.0 build_id 7033400 resultó ser un error. Esta versión requiere una estructura de directorio creada correctamente en $HOME/.android para un inicio exitoso.

Para crear la estructura de directorios, debe ejecutar el emulador -writable-systemuna vez. Por ejemplo, supongamos que ha creado un avd llamado 'prueba', luego puede iniciar el emulador de la siguiente manera:

/opt/android-sdk/emulator/emulator -no-window -writable-system -avd test

Una vez que se crea, ya no necesita la opción.

/opt/android-sdk/emulator/emulator -no-window -avd test