编写应用程序

编写在应用程序管理器中作为客户端运行的应用程序类似于编写一个独立的QML应用程序,除了以下这三个额外任务或限制

  1. 如果您编写一个QML应用程序,请将您的QML场景的根元素设置为ApplicationManagerWindow;或者从它派生您的自定义根项。
  2. 提供一个有效的info.yaml文件。
  3. 重新启动应用程序管理器以使其了解您的应用程序。

根元素

建议使用ApplicationManagerWindowQtObject作为您QML应用程序的根。这在您需要在单进程和多进程模式下具有类似行为时尤为重要。如果您使用QtObject,任何可见的基础元素也应仍然是ApplicationManagerWindows。不过,也支持其他根元素以方便使用。

以下是您需要注意的几点

  • 只有ApplicationManagerWindows支持系统UI和客户端应用程序之间共享的窗口属性。
  • 在多进程模式下,窗口根元素始终会得到装饰(除非您设置QT_WAYLAND_DISABLE_WINDOWDECORATION),并且默认情况下是不可见的。QQuick 被包裹在一个代表Wayland客户端窗口的窗口中。
  • 在单进程模式下窗口根元素与系统UI平行出现,而不是在其中。

清单和更新数据库

清单定义包含您需要生成最小info.yaml文件的所有信息。

递归查找和解析数百个应用程序的info.yaml文件可能会非常耗时,并且会严重减慢应用程序管理器的启动速度。因此,所有清单文件都缓存在一个二进制数据库中。要通知应用程序管理器有关info.yaml文件的变化,您必须通过调用appman --recreate-database强制重建此数据库。

注意:通过PackageManager接口支持动态添加、更新或删除单个应用程序。

qmake集成

为了使用Installer Sub-System将应用程序安装到系统UI,需要先对应用程序进行打包。这可以通过使用Packager实用程序完成。为了更好地将打包集成到您的常规开发工作流程中,您还可以使用提供的qmake集成。

该集成将一个额外的 package 目标添加到 Makefile 中。您可以通过以下两种方式创建一个新应用

  • 在命令行中调用 make package
  • make package 作为 QtCreator 中的附加构建步骤。

简单的 QML 应用程序

对于仅使用 QML 的简单应用程序,创建一个 qmake 项目文件,该文件定义了为所有所需文件进行安装的步骤。在这种情况下,实际的安装位置无关紧要,因为它是用作创建包时的临时路径。

TEMPLATE = aux

FILES += info.yaml \
         icon.png \
         Main.qml

app.files = $$FILES
app.path = /apps/com.example.application
INSTALLS += app

此外,添加以下两行以提供安装位置给打包步骤并加载 qmake 集成。

AM_PACKAGE_DIR = $$app.path

load(am-app)

复杂应用程序

对于复杂的应用程序(您需要部署基于 C++ 的 QML 插件,以及您的 QML 内容),您必须将您的应用程序拆分为多个文件夹和项目文件。一个文件夹用于 QML 部分,另一个文件夹用于 C++ 插件,以及一个 SUBDIRS 项目将它们粘合在一起。

打包集成在 SUBDIRS 项目中进行,并且此过程期望其他项目文件提供到共享安装位置的安装目标。在这种情况下,QML 部分将文件安装到 /apps/com.example.application,而 C++ 插件安装到 /apps/com.example.application/imports/com/example/application

SUBDIRS 项目中,您需要定义 AM_MANIFEST 变量并将其设置为您 info.yaml 文件的位置。然后,定义共享安装位置为 AM_PACKAGE_DIR

AM_MANIFEST = $$PWD/app/info.yaml
AM_PACKAGE_DIR = /apps/com.example.application

load(am-app)

打包多个应用程序

如果您的存储库提供多个应用程序,例如 Qt Auto Extra Apps 存储库,您可以使用 qmake 的 am-package 功能提供存储库范围的 package 步骤。

向您的存储库添加一个包含以下内容的 .qmake.conf 文件,它会自动由 qmake 加载

CONFIG += am-package

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