Android emulator64 kann nicht gestartet werden, da Qt xcb nicht laden kann

Ich kann den (Android-)Emulator64-x86 nicht starten. Es scheitert immer mit:

--> ./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

Jeder Forenthread, den ich zu diesem Problem gefunden habe, bestand darin, ldd auf dem Emulator64 und der XCB-Bibliothek auszuführen, um nach fehlenden Abhängigkeiten zu suchen:

--> 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)

Und für 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)

Weitere Details:

  • Android-Emulator-Version 27.1.7.0 (Build-ID 4581633) (CL:b5ec07662db0f9d8644e5fbda7040053a8741bfd)
  • Debian-SID x64

Es scheint also, dass alle Abhängigkeiten in Ordnung sind. Wie kann ich dieses Problem weiter debuggen? Irgendeine Idee, wie ich den Emulator zum Laufen bringen kann?

Es stellte sich heraus, dass ich QT mit Debug-Protokollierung ausführen kann:

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

Also ich es scheitert an:

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)
Heute hat es angefangen zu arbeiten, ohne irgendwelche Änderungen vorzunehmen.

Antworten (2)

Ich habe jede mögliche Lösung ausprobiert, die ich im Internet finden konnte, aber ich habe immer noch:

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 "".

Die Fehlermeldung ist eigentlich irreführend. In meinem Ordner „/lib64“ habe ich eine Datei „libQt5XcbQpa.so.5“, die mit der gemeinsam genutzten Bibliothek „libQt5XcbQpa.so.5.10.1“ verknüpft ist.

Dies ist nicht die richtige Version. Alle korrekten Bibliotheken sind tatsächlich gespeichert unter:

~/android/emulator/lib64/qt/lib

Wenn Sie den obigen Pfad als Teil von „$LD_LIBRARY_PATH“ einschließen, wird der Emulator ausgeführt.

Für die Android SDK-Version 30.3.5.0 build_id 7033400 stellte sich heraus, dass es sich um einen Fehler handelte. Diese Version erfordert für einen erfolgreichen Start eine ordnungsgemäß unter $HOME/.android erstellte Verzeichnisstruktur.

Um die Verzeichnisstruktur zu erstellen, müssen Sie den Emulator -writable-systemeinmal ausführen. Angenommen, Sie haben ein AVD mit dem Namen „test“ erstellt, dann können Sie den Emulator wie folgt starten:

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

Sobald es erstellt ist, benötigen Sie die Option nicht mehr.

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