WSL2 - AOSP 11 模拟器无法启动,因为无法初始化 Qt 平台插件 (xcb)

问题描述 投票:0回答:3

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

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

(另请参阅:在未安装 qt 的情况下在 linux 上启动 qt5 应用程序时“无法加载平台插件“xcb”

流程是:

$ 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
3个回答
0
投票

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

sudo apt-get install libx11-xcb1

或其他任何可能提供

libqxcb.so
.


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


0
投票

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

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


-1
投票

我遇到了同样的问题 你解决了吗?

© www.soinside.com 2019 - 2024. All rights reserved.