Qt Quick Android 应用程序如果启动超过 1 次则显示黑屏

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

我在使用基于 Qt Quick 的应用程序时遇到了问题 - 它们无法在 API > 24(比 Android 7.0 更新)的 Android 模拟器上正常工作。

构建和部署已完成 OK。但该应用程序仅在第一次运行 - 如果我退出应用程序(点击“返回”或“主页”或关闭应用程序)并再次打开它,则只会出现空白屏幕。这个问题一直存在,直到我重新安装应用程序或清除应用程序缓存。

gif 代表问题

真机上不存在这个问题。在Android Studio中构建的项目也没有这样的问题。

基于 Qt Widgets 的应用程序可以正常工作,不会出现空白屏幕。

我从

logcat
得到的唯一可疑的事情是(它在第二次启动应用程序后记录):

06-04 10:06:24.976  1899  1989 W InputDispatcher: channel 'c7fea10 org.qtproject.example.testandroidqml/org.qtproject.qt5.android.bindings.QtActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
06-04 10:06:24.977  1899  1989 E InputDispatcher: channel 'c7fea10 org.qtproject.example.testandroidqml/org.qtproject.qt5.android.bindings.QtActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
06-04 10:06:24.977  1756  1756 I Zygote  : Process 4511 exited cleanly (0)
06-04 10:06:24.977  1899  2568 I WindowManager: WIN DEATH: Window{c7fea10 u0 org.qtproject.example.testandroidqml/org.qtproject.qt5.android.bindings.QtActivity}
06-04 10:06:24.977  1899  2568 W InputDispatcher: Attempted to unregister already unregistered input channel 'c7fea10 org.qtproject.example.testandroidqml/org.qtproject.qt5.android.bindings.QtActivity (server)'
06-04 10:06:24.977  1899  3872 I ActivityManager: Process org.qtproject.example.testandroidqml (pid 4511) has died: cch  CRE 
06-04 10:06:24.977  1899  1917 W libprocessgroup: kill(-4511, 9) failed: No such process
06-04 10:06:24.977  1899  1917 I libprocessgroup: Successfully killed process cgroup uid 10086 pid 4511 in 0ms
06-04 10:06:24.978  1755  2486 W SurfaceFlinger: Attempting to destroy on removed layer: AppWindowToken{86cbd61 token=Token{a4f68c8 ActivityRecord{b83956b u0 org.qtproject.example.testandroidqml/org.qtproject.qt5.android.bindings.QtActivity t12}}}#0
06-04 10:06:24.979  1899  1922 W ActivityManager: setHasOverlayUi called on unknown pid: 4511
06-04 10:06:24.979  1755  1755 W SurfaceFlinger: couldn't log to binary event log: overflow.

为什么会发生这种情况以及如何解决这个问题?

我的条件:

  • Ubuntu 22.04
  • 项目很简单 - 默认使用 Qt Creator + 添加了
    main.qml
    中的红色矩形创建。它是在 Qt 5.15 下使用 CMake
  • 构建的
  • Android Studio 中 API 28 (Android 9.0) 下的模拟器“Pixel XL”

我尝试过:

  • 不同的模拟器和不同的API(除了Android 7.0之外,它在任何地方都不起作用)
  • 使用 Qt Creator 进行部署并手动安装 apk - 不会影响任何事情
android c++ qt android-emulator qml
1个回答
0
投票

问题与应用程序和 Android 框架之间的输入和输出有关。您提供的日志指出您使用的输入通道在第一次运行应用程序后被关闭。

您可以尝试的几个解决方案:

1。检查 Qt 更新:

确保您拥有最新版本的 Qt 开发框架,如果没有可用,请考虑升级到较新的长期支持 (LTS) 版本。不同版本的 Qt 都有错误修复和兼容性增强 上一类 Qt 版本涉及不同版本的 Qt 的错误修复以及其他兼容性增强。人们可以在论坛或 Qt 文档中轻松找到的一些内容是解决 Android 模拟器出现的问题的想法。

2。调查输入通道问题:

真正的问题在于日志消息中所示的输入通道。您可以查看 https://forum.qt.io/ 等在线论坛,并查找专门提到 Android 中 QT 应用程序可能存在

InputDispatcher channel
问题的帖子。您还可以尝试将应用程序移至调试和发布版本,以检查哪种模式具有有关输入通道问题的更多信息。

3.替代部署方法:

关于您之前的尝试,您已经尝试过使用 Qt Creator 并直接安装

APK
,但建议您尝试其他可能性,其中之一是直接在 Android Studio 中部署。这也许有助于消除与部署相关的适用问题。

4。在物理设备上测试:

正如您在此同意的那样,该问题不会发生在运行开发的应用程序的真实设备上。使用不同类型和版本的物理设备还可以帮助确认问题是否出在模拟器上,或者是否可以链接到您正在使用的模拟器的配置。

其他提示:

  • Android开发请查阅Qt官方文档:https://doc.qt.io/qt-6/android.html
  • 考虑向 Qt 项目提交错误报告,提供有关您的配置、重现步骤以及您看到的 logcat 消息的详细信息。
© www.soinside.com 2019 - 2024. All rights reserved.