【问题标题】:WSL2 - AOSP 11 emulator failed to start because no Qt platform plugin could be initialized (xcb)WSL2 - AOSP 11 模拟器无法启动,因为无法初始化 Qt 平台插件 (xcb)
【发布时间】:2022-01-26 03:44:23
【问题描述】:

我正在尝试在我的 x86-64 机器(Intel cpu)上的 WSL2 Ubuntu 20 上为 android 11 构建 AOSP,构建(用于 aosp_arm64-eng)成功,但模拟器无法在我的 WSL2 上运行。

我尝试应用我在网上找到的修复程序,但没有任何帮助(修改环境变量、安装库等。(我还没有尝试过 LD_PRELOAD 技巧) 我认为它试图在 repo 中使用 Qt)。

(另见:"Failed to load platform plugin "xcb" " while launching qt5 app on linux without qt installed)

流程是:

$ repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r50
$ repo sync
$ source build/envsetup.sh
$ lunch aosp_arm64-eng
$ m -j4
[build was successfull]

$ emulator
WARNING: encryption is off
INFO: QtLogger.cpp:68: Warning: could not connect to display  ((null):0, (null))


INFO: QtLogger.cpp:68: Info: Could not load the Qt platform plugin "xcb" in "/home/idan/WORKING_DIRECTORY/prebuilts/android-emulator/linux-x86_64/lib64/qt/plugins" even though it was found. ((null):0, (null))


Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.
 ((null):0, (null))
INFO: QtLogger.cpp:68: Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.
 ((null):0, (null))


Aborted


$ which emulator
/home/idan/WORKING_DIRECTORY/prebuilts/android-emulator/linux-x86_64/emulator

模拟器的ldd输出:

    linux-vdso.so.1 (0x00007ffe785b7000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e5d483000)
    libc++.so.1 => /home/idan/WORKING_DIRECTORY/prebuilts/android-emulator/linux-x86_64/lib64/libc++.so.1 (0x00007f7e5d3a4000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e5d255000)
    libtcmalloc_minimal.so.4 => /home/idan/WORKING_DIRECTORY/prebuilts/android-emulator/linux-x86_64/lib64/libtcmalloc_minimal.so.4 (0x00007f7e5ce64000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7e5ce59000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e5ce34000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e5ce19000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e5cc27000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7e5d4a2000)

在以下文件夹中,我有这些 .so 文件:

~/WORKING_DIRECTORY/prebuilts/android-emulator/linux-x86_64/lib64/qt/lib$ ls
    libQt5CoreAndroidEmu.so.5          libQt5SvgAndroidEmu.so.5      libX11-xcb.so.1.0.0  libxcb-xkb.so.1        libxkbcommon-x11.so.0.0.0
    libQt5DBusAndroidEmu.so.5          libQt5WidgetsAndroidEmu.so.5  libfontconfig.so.1   libxcb-xkb.so.1.0      libxkbcommon.so
    libQt5GuiAndroidEmu.so.5           libQt5XcbQpaAndroidEmu.so.5   libfreetype.so.6     libxcb-xkb.so.1.0.0    libxkbcommon.so.0
    libQt5NetworkAndroidEmu.so.5       libX11-xcb.so.1               libsoftokn3.so       libxkbcommon-x11.so    libxkbcommon.so.0.0.0
    libQt5PrintSupportAndroidEmu.so.5  libX11-xcb.so.1.0             libsqlite3.so        libxkbcommon-x11.so.0

和内部插件:

~/WORKING_DIRECTORY/prebuilts/android-emulator/linux-x86_64/lib64/qt/plugins/platforms$ ls
    libqxcb.so

$ ldd libqxcb.so
linux-vdso.so.1 (0x00007fff4bf5b000)
        libQt5XcbQpaAndroidEmu.so.5 => not found
        libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f3b43599000)
        libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f3b434da000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f3b434be000)
        libQt5GuiAndroidEmu.so.5 => not found
        libQt5DBusAndroidEmu.so.5 => not found
        libQt5CoreAndroidEmu.so.5 => not found
        libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007f3b43434000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3b43411000)
        libX11-xcb.so.1 => /lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f3b4340c000)
        libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f3b433e2000)
        libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007f3b433cd000)
        libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f3b4328e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3b4313f000)
        libxkbcommon-x11.so.0 => /lib/x86_64-linux-gnu/libxkbcommon-x11.so.0 (0x00007f3b43134000)
        libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007f3b430f2000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3b430ec000)
        libc++.so.1 => /lib/x86_64-linux-gnu/libc++.so.1 (0x00007f3b4302a000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3b4300d000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3b42e1b000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f3b42ded000)
        libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f3b42de4000)
        libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f3b42dac000)
        libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f3b42cf4000)
        libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f3b42cbe000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3b435fe000)
        libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f3b42cb8000)
        libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f3b42cb0000)
        libxcb-xkb.so.1 => /lib/x86_64-linux-gnu/libxcb-xkb.so.1 (0x00007f3b42c92000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f3b42c87000)
        libc++abi.so.1 => /lib/x86_64-linux-gnu/libc++abi.so.1 (0x00007f3b42c4d000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f3b42c33000)

【问题讨论】:

    标签: android qt5 android-source wsl-2 xcb


    【解决方案1】:

    假设 WSL2,只需尝试在系统范围内安装它:

    sudo apt-get install libx11-xcb1
    

    或任何其他可能提供的libqxcb.so。


    直接在 Windows 和 HAXM 上运行时,整体性能可能会更好。
    我只是想知道,WSL2 将如何处理 KVM,因为它本身可能是一个仿真。
    在 WSL2 上构建不是问题,但在没有 KVM 的情况下运行模拟器是: https://boxofcables.dev/kvm-optimized-custom-kernel-wsl2-2022/

    【讨论】:

    • 该链接建议为 Windows 11 优化 KVM。
    【解决方案2】:

    好吧,最终我在远程 ssh 连接到 linux 服务器上尝试了它,并得到了类似的错误。

    问题是模拟器需要一个图形环境。因此,要么使用获取构建输出图像并在 Android Studio 中使用它,要么使用 vncserver(和客户端)从 GUI 环境连接到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 2020-08-03
      • 2022-07-10
      • 2015-06-06
      • 2016-06-10
      • 2017-07-24
      相关资源
      最近更新 更多