У меня проблемы с приложениями на базе Qt Quick - они некорректно работают на эмуляторах Android с API > 24 (новее Android 7.0).
Сборка и развертывание завершены успешно. Но приложение работает только в первый раз - если я выхожу из приложения (нажимаю «назад» или «домой» или закрываю приложение) и открываю его снова, появляется только пустой экран. Эта проблема сохраняется до тех пор, пока я не переустановлю приложение или не очистлю кеш приложения.
Гифка с изображением проблемы:
На реальных телефонах такой проблемы нет. Проекты, созданные в 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 Studio).
Или вы можете установить его вручную в файле конфигурации эмулятора, изменив значение свойства hw.gpu.mode
на software
.
Сейчас он работает медленнее, но, по крайней мере, работает!