撰写应用程序
将应用程序编写为在应用程序管理器内运行客户端应用程序,类似于编写独立的 QML 应用程序,但需要完成以下三个附加任务:
- 如果你编写一个 QML 应用程序,请将你的 QML 场景的根元素设置为一个 ApplicationManagerWindow;或者从它派生出你自己的自定义根项。
- 提供有效的 info.yaml 文件。
- 重新启动应用程序管理器,以便它知道你的应用程序。
根元素
建议使用一个 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.在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。