我在使用基于 Qt Quick 的应用程序时遇到了问题 - 它们无法在 API > 24(比 Android 7.0 更新)的 Android 模拟器上正常工作。
构建和部署已完成 OK。但该应用程序仅在第一次运行 - 如果我退出应用程序(点击“返回”或“主页”或关闭应用程序)并再次打开它,则只会出现空白屏幕。这个问题一直存在,直到我重新安装应用程序或清除应用程序缓存。
真机上不存在这个问题。在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.
为什么会发生这种情况以及如何解决这个问题?
我的条件:
main.qml
中的红色矩形创建。它是在 Qt 5.15 下使用 CMake我尝试过:
问题与应用程序和 Android 框架之间的输入和输出有关。您提供的日志指出您使用的输入通道在第一次运行应用程序后被关闭。
确保您拥有最新版本的 Qt 开发框架,如果没有可用,请考虑升级到较新的长期支持 (LTS) 版本。不同版本的 Qt 都有错误修复和兼容性增强 上一类 Qt 版本涉及不同版本的 Qt 的错误修复以及其他兼容性增强。人们可以在论坛或 Qt 文档中轻松找到的一些内容是解决 Android 模拟器出现的问题的想法。
真正的问题在于日志消息中所示的输入通道。您可以查看 https://forum.qt.io/ 等在线论坛,并查找专门提到 Android 中 QT 应用程序可能存在
InputDispatcher channel
问题的帖子。您还可以尝试将应用程序移至调试和发布版本,以检查哪种模式具有有关输入通道问题的更多信息。
关于您之前的尝试,您已经尝试过使用 Qt Creator 并直接安装
APK
,但建议您尝试其他可能性,其中之一是直接在 Android Studio 中部署。这也许有助于消除与部署相关的适用问题。
正如您在此同意的那样,该问题不会发生在运行开发的应用程序的真实设备上。使用不同类型和版本的物理设备还可以帮助确认问题是否出在模拟器上,或者是否可以链接到您正在使用的模拟器的配置。
其他提示: