撰写应用程序

将应用程序编写为在应用程序管理器内运行客户端应用程序,类似于编写独立的 QML 应用程序,但需要完成以下三个附加任务:

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

根元素

建议使用一个 ApplicationManagerWindow 或一个 QtObject 作为你的 QML 应用的根。如果需要在单进程和多进程模式下获得类似的行为,这尤其重要。如果你使用一个 QtObject,任何可见的基元素应该仍然是 ApplicationManagerWindows。尽管如此,为了方便起见,其他根元素也得到了支持。

以下是一些需要考虑的事项:

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

清单和更新数据库

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

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

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

qmake 集成

要将应用程序安装到系统 UI 中,使用 Installer 子系统,应用程序首先需要打包。这可以通过使用 Packager 工具来实现。为了更好地将打包集成到你的常规开发者工作流程中,你也可以使用提供的 qmake 集成。

该集成向 Makefile 添加了一个额外的 package 目标。你可以用以下两种方式创建新应用程序:

  • 在命令行调用 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)

复杂应用程序

对于复杂应用程序,您需要在除了QML内容外还需要部署基于C++的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

©2019 Luxoft Sweden AB。此处包含的文档贡献是各自所有者的版权。提供的文档受GNU自由文档许可证版本1.3的条款约束,由自由软件基金会发布。Qt及其相应标志是The Qt Company Ltd.在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。