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等其餘平臺估計也有同樣的問題,能夠參考一下開發

相關文章
相關標籤/搜索