Qt.WebSocket致使的部署失败及解决方案

##场景描述android

  1. Qt Widgets Application中使用QWebSocket模块时,开发中引用正常(Desktop构建模式),可是使用windeployqt工具部署时,对应的依赖库是没有添加进去的,致使部署失败
  2. QtQuick/V-Play Application中使用Qt.WebSocket模块时,开发中引用正常(Desktop构建模式),使用windeployqt工具部署后,对应的依赖库也没有添加进去,致使部署失败
  3. QtQuick/V-Play Application中​使用Qt.WebSocket模块时,开发中引用异常(Android构建模式),使用部署生成.apk后,找不到对应的模块,致使部署失败

##解决方案(场景1 & 场景2) 场景1和2的部署失败,能够经过windeployqt工具部署后(Desktop构建模式),把QWebSocket对应的依赖库能够手动拷贝一份来解决(有工具还须要手搓老是不爽的)web

##解决方案(场景3) 场景3中其实有2个问题:websocket

  1. 开发中找不到import Qt.WebSocket 1.0找不到对应的模块(Android构建模式)
  2. 部署中Qt.WebSocket模块的依赖库没有添加进来

而每次部署生成.apk(Android构建模式),都会从新构建和自动添加依赖库,无法经过手搓来有效控制Qt.WebSocket依赖库的添加:(socket

  • 针对问题1:

Qt.WebSocket的文档是这么说的:
Note: Prior to Qt 5.5, the import statement was import Qt.WebSockets 1.0 (notice the dot between Qt and WebSockets). The old statement is still supported for backwards compatibility, but it cannot be mixed with the new statement within the same project工具

为了兼容旧版本语法是什么鬼?而后我去找了下对应的依赖库路径,发现有2个WebSocket相关的路径ui

  1. %QtDir%/android_armv7/qml/Qt/Websocket/,这个目录下只有一个qmldir文件,内容以下:
module Qt.WebSockets
plugin declarative_qmlwebsockets ../../QtWebSockets/
classname QtWebSocketsDeclarativeModule
typeinfo plugins.qmltypes
  1. %QtDir%/android_armv7/qml/QtWebSockets/,这个目录下有qmldir & plugins.qmltypes & libdeclarative_qmlwebsockets.so这3个文件,这里的qmldir文件,内容以下:
module QtWebSockets
plugin declarative_qmlwebsockets
classname QtWebSocketsDeclarativeModule
typeinfo plugins.qmltypes

稍微总结下咱们能够这样理解:Qt.WebSocket(为了兼容Qt5.5.1以前的语法)最终指向QtWebSocket,那么咱们直接使用新语法试试?code

//import Qt.WebSocket 1.0 //这是旧语法,注释掉
import QtWebSocket 1.0 //新语法
//...code...

而后构建-部署-运行,一切正常.ip

##Tips:Mac/Linux等其余平台估计也有同样的问题,能够参考一下开发

相关文章
相关标签/搜索