部署 Qt WebEngine 应用程序

应用程序打包和部署的方式在不同的操作系统之间有所不同。对于 Windows 和 macOS,windeployqtmacdeployqt 自动执行生成独立应用程序包的步骤。

当手动部署依赖于 Qt WebEngine 的应用程序时,必须包括运行应用程序所需的所有文件:库、QML 导入、插件和翻译。

有关更多信息,请参阅 Qt 应用程序的部署

目标平台

Qt WebEngine 尝试支持 Qt 的所有 支持的平台。然而,由于 Chromium 的不同要求,这并不总是可能。已知的限制包括

  • Qt WebEngine 当前仅支持 Windows、Linux 和 macOS。
  • 在 Windows 上,Qt WebEngine 仅支持 Windows Vista 或更高版本作为目标平台。由于使用了 Chromium 中的较新 API,Windows XP 不可支持。WinRT 也不支持。

手动部署应用程序

当手动部署依赖于 Qt WebEngine 的应用程序时,可能需要部署以下文件

  • QML 导入
  • Qt WebEngine 进程
  • 资源
  • 翻译
  • 音频和视频编解码器

部署库

以下库必须与依赖于 Qt WebEngine 的应用程序一起部署

部署 QML 导入

如果应用程序使用了 Qt Quick 集成,则需要部署 QtWebEngine 导入目录。

部署 Qt WebEngine 进程

Qt WebEngine 利用 Chromium 项目提供的多进程模型。多进程模型需要将 Qt WebEngine 进程的可执行文件与您的应用程序一起部署。

为每个 QWebEngineViewWebEngineView 实例执行 WebEngine 进程。例如,一个具有两个打开标签的浏览器应用应该有两个该进程的独立实例运行。这是大多数现代网络引擎用来提供稳定浏览体验的通用方法。

在运行时,Qt WebEngine 在由 QLibraryInfo::location(QLibraryInfo::LibraryExecutablesPath) 返回的目录中查找 QtWebEngineProcess 可执行文件。对于 Qt 安装程序,这是 Linux 上的 QTDIR/libexec 或 Windows 上的 QTDIR\bin。可以通过定义一个 qt.conf 文件来更改此路径,例如。或者,可以通过设置 QTWEBENGINEPROCESS_PATH 环境变量的值来设置可执行文件路径。在 macOS 上,Qt WebEngine 在 .app/Helpers/QtWebEngineProcess 中查找可执行文件。

资源部署

Qt WebEngine 需要以下资源文件

  • qtwebengine_resources.pak 包含 Chromium 所需的资源。
  • qtwebengine_devtools_resources.pak 包含远程调试工具。
  • qtwebengine_resources_100p.pak 包含适用于低分辨率显示的图像。
  • qtwebengine_resources_200p.pak 包含适用于高 DPI 显示的图像。
  • icudtl.dat 提供了对国际组件 (ICU) 的支持。这是 ICU 的 Chromium 版本,如果 Qt WebEngine 已配置为使用系统 ICU 则不需要。
  • v8_context_snapshot.bin 包含一个先前准备的 v8 上下文的快照,用于加快初始化。调试构建使用文件扩展名为 .debug.bin 的单独快照而不是 .bin。在 macOS 上,每个架构都有一个相应的快照,例如 v8_context_snapshot.arm64.binv8_context_snapshot.arm64.debug.bin

资源将从以下位置进行搜索

  • 在 Linux 和 Windows 上:由 QLibraryInfo::location(QLibraryInfo::DataPath) 指定的目录中的 resources 目录。
  • 在 macOS 上:位于 .app/Content/Resources
  • 由 QCoreApplication::applicationDirPath() 指定应用程序目录。

或者,可以将资源目录路径作为 QTWEBENGINE_RESOURCES_PATH 环境变量的值进行设置。

翻译

区域数据(如 en-US.pak)将从以下位置进行搜索

  • 在 macOS 上:位于 .app/Content/Resources
  • 在 Linux 和 Windows 上:qtwebengine_locales 目录位于由 QLibraryInfo::location(QLibraryInfo::TranslationsPath) 指定的目录中。

或者,可以将区域数据目录路径作为 QTWEBENGINE_LOCALES_PATH 环境变量的值进行设置。

Qt 资源文件中的 JavaScript 文件

如果您使用 Qt Quick 编译器构建的 WebEngine 应用程序,并且将 JavaScript 文件包含在 .qrc 资源中,并且这些文件应在 HTML 页面内加载,请确保在您的项目中指定资源文件的 QTQUICK_COMPILER_SKIPPED_RESOURCES qmake 变量。这可以防止 Qt Quick 编译器尝试为相应的 JavaScript 代码生成 C++ 代码,以及从 Qt 资源文件中删除原始 JavaScript 代码,否则会导致 HTML 页面损坏。例如

QTQUICK_COMPILER_SKIPPED_RESOURCES += resources/my_resource.qrc

macOS 专用部署步骤

要在 macOS 上部署 Qt WebEngine 应用程序,您需要确保 Qt WebEngine 进程已使用至少包含在 QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/Resources/QtWebEngineProcess.entitlements 中的权限文件进行签名。

要在 macOS 上部署一个访问麦克风或摄像头的 Qt WebEngine 应用程序,您需要提供给用户的文本,解释为什么应用程序请求访问摄像头或麦克风权限。为此,请使用以下键将文本添加到应用程序的 Info.plist 文件中。

对于摄像头使用消息,请使用以下键提供文本

<key>NSCameraUsageDescription</key>
<string>Your message text for camera usage.</string>

有关 Apple 的属性列表文件文档,请参阅 Apple 的属性列表文件文档

对于麦克风使用消息,请使用以下键提供文本

<key>NSMicrophoneUsageDescription</key>
<string>Your message text for microphone usage.</string>

有关 Apple 的属性列表文件文档,请参阅 Apple 的属性列表文件文档

要对访问摄像头或麦克风的程序进行签名,您需要将对应键添加到应用程序的部署和签名使用权限文件中。

要启用对摄像头的访问,请添加

<key>com.apple.security.device.camera</key>
<true/>

有关 Apple 的摄像头权限文档,请参阅 Apple 的摄像头权限文档

要启用对麦克风的访问,请添加

<key>com.apple.security.device.microphone</key>
<true/>

有关 Apple 的麦克风权限文档,请参阅 Apple 的麦克风权限文档

© 2024 Qt 公司有限公司。此处包含的文档贡献为各自所有者的版权。此处提供的文档依据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可。Qt 和相关标志是芬兰的 Qt 公司及其在全球的子公司和联盟的商标。所有其他商标均为各自所有者的财产。