安装

支持的平台

应用程序管理器在多个平台上定期进行测试。

以下平台仅用于开发和测试目的。此外,这些平台仅允许应用程序管理器以单进程模式运行。

  • Windows
  • macOS
  • Android(应用程序管理器无法直接部署,但可以作为包含系统 UI 的 Android APK 包的一部分使用)

这些平台可以用于开发和生产,并将允许您使用应用程序管理器的完整功能集。

  • Linux 桌面和嵌入式 单进程和多进程模式

    注意:由于 Wayland 驱动的稳定性水平参差不齐,多进程模式下仅支持IntelAMD(开源)和VMWare显卡驱动。尽管其他驱动可能正常工作,但它们可能需要特定的 QtWayland 版本或 GPU 驱动固件模块。

先决条件

要构建具有全部功能的应用程序管理器,需要以下组件

  • Qt 5.15.0 或更高版本。
  • openssl 仅在 Linux 上且需要安装程序功能时使用。Qt 需要构建时支持 openssl。所需的最小版本由 Qt 定义。
  • libyaml 1.6 或更高版本。
  • libarchive 3.0 或更高版本 如果需要安装程序功能

在基于 Debian 的系统上,此命令安装了所需的三个软件包

apt-get install libyaml-dev libarchive-dev libssl-dev

注意:在没有 pkg-config(例如,Windows 或 macOS)的平台上,以及在缺少依赖之一的平台上,将自动使用来自 3rdparty 文件夹的这些库的捆绑版本,而不是这些库的安装版。请确保您了解许可的影响,因为这些捆绑的第三方库将被链接为静态库。此选项不是针对生产环境,仅供开发和测试环境使用。

多进程与单进程

默认情况下,应用程序管理器始终尝试以多进程模式构建,但如果某些依赖项不可用,则会回退到单进程模式,例如

  • 您正在为 Linux 构建。
  • 可用的 QtWayland 模块。
  • 可用的 QtDBus 模块。

您可以通过以下描述的相应 -config 选项强制构建模式 force-multi-processforce-single-process

构建

注意:如果您想在 QtCreator 中进行构建,您必须确保将 qmake system() 语法解析时的行为 设置在 项目 > 构建设置 > 通用 中设置为 忽略

应用程序管理器使用 qmake 作为其构建系统。基本安装步骤如下

qmake && make && make install

可以给 qmake 提供多种选项,以满足您的需求

选项描述
-config force-libcrypto即使是在 Windows 和 macOS 上,也要强制使用 OpenSSL 构建。
-config force-system-libarchive强制使用系统 libarchive 构建。
-config no-system librarian redistribute即使检测到系统 libarchive 也不使用系统 libarchive 构建。
-config force-system-libyaml强制使用系统 libyaml 构建。
-config no-system libyaml即使检测到系统 libyaml 也不使用系统 libyaml 构建。
-config force-single-process强制进行单进程构建,即使在Qt的Wayland compositor模块可用的情况下。
-config force-multi-process强制多进程构建 - 如果Qt的Wayland compositor模块不可用,这可能会破坏。
-config enable-tests在构建中包含单元测试。
-config enable-examples在构建中包含示例。
-config disable-installer 禁用安装程序部分。
-config disable-external-dbus-interfaces完全禁用外部D-Bus接口。应用程序和应用程序管理器之间的内部通信渠道将仍然基于对等D-Bus。
-config tools-only仅构建工具: appman-controllerappman-packager
-config install-prefix=<path>使用 path 作为 make install 的基本目录。如果您在运行qmake时没有指定 install-prefix,则应用程序管理器将像标准的Qt模块一样执行
  • 在开发者构建中,二进制文件将直接编译到 ${qtbase}/bin
  • 在prefix构建中,二进制文件将编译到 ${builddir}/bin

如果指定了 install-prefix,这意味着

  • 在开发者构建中,二进制文件将直接编译到 ${install-prefix}/bin
  • 在prefix构建中,二进制文件将编译到 ${builddir}/bin

此外,在Linux上,当使用 install-prefix 进行配置时,所有二进制文件都将获得一个绝对 RPATH / RUNPATH。这允许您直接从构建目录运行二进制文件,而无需任何奇怪的影响。Linux会在 RUNPATH 中找不到所需的库时,引入系统-Qt。

最终,应用程序管理器是一个Qt模块。这意味着所有库和头文件始终安装到 ${qtbase} 中,以便通过标准的Qt机制访问。

-config systemd-workaround如果您正在运行systemd并计划支持SD卡安装,则非常重要。绕过systemd干扰回环挂载。
-config enable-widgets启用对Qt小部件的支持。此选项可用于启用使用Qt小部件的某些开发图形工具。
-config hardware-id=<id>以硬编码的硬件ID id 进行编译;有关更多信息,请参阅硬件ID
-config hardware-id-from-file=<file>在运行时从指定的 file 读取硬件ID;有关更多信息,请参阅硬件ID
-config enable-libbacktrace启用在3rdparty文件夹中构建和链接对 libbacktrace 的支持。这将在Linux上为您提供可读的回溯,但也会略微增加二进制文件的大小。对于调试构建,此选项默认启用。
-config enable-stackwalker启用在3rdparty文件夹中构建和链接对 stackwalker 的支持。这将在Windows上为您提供可读的回溯,但也会略微增加二进制文件的大小。对于调试构建,此选项默认启用。
-config disable-libbacktrace禁用在3rdparty文件夹中构建和链接对 libbacktrace 的支持。
-config disable-stackwalker禁用在3rdparty文件夹中构建和链接对 stackwalker 的支持。

硬件ID

应用程序管理器的安装程序部分需要唯一的设备ID有两个原因

  1. 如果您希望将绑定到特定设备单元的应用程序包发布到您的应用商店。这里的用例是防止客户买一次应用然后免费与他人分享。
  2. 当您将应用程序包安装到可以由用户移除的SD卡上时。这里的用例是我们需要能够检测哪个SD卡"属于"哪个设备,以防用户在不同设备之间交换相同的卡。

由于应用程序管理器在构建时间不知道潜在的商店将如何配置,以及是否启用了可移动SD卡的安装,因此应用程序管理器尝试根据第一个配置的网络设备的MAC地址创建一个唯一的ID。如果根本未配置网络设备,或者在网络应用程序管理器启动后进行配置,则此方案将不起作用。

有三种不同的方式指定硬件ID

  1. 无配置选项:使用第一个网络设备的MAC地址。通常,此选项开箱即用。
  2. qmake --config hardware-id=yourID将ID硬编码为yourID。如果您不使用任何需要此ID唯一的应用程序管理器功能,并且无法(或不想)保证应用程序管理器启动时网络设备正在运行,则此选项理想。
  3. qmake --config hardware-id-from-file=yourFile让应用程序管理器在启动时读取yourFile的内容,并使用其内容作为ID;而不是以太网MAC地址。如果您要使用需要此类ID的功能,并且设备通过/proc/sys提供唯一的设备ID,则此选项非常有用。

所有可执行文件,包括单元测试,都可以在编译后的构建文件夹的bin目录中找到。

生成代码覆盖率数据

您还可以运行make coverage创建一个覆盖率构建,而不是执行正常构建。由于每个编译步骤都需要使用特殊的编译器标志进行预置,请确保在运行make coverage之前运行make clean

使用这样的构建,您可以在构建目录中使用以下命令生成HTML覆盖率报告

make check-coverage

命令行输出会提供生成报告的URL。

系统设置

应用程序管理器的运行时配置是通过命令行开关和一个或多个配置文件来完成的。

通常,基本配置是通过两个单独的配置文件完成的:一个用于目标系统特定的设置,一个用于系统UI特定的设置。系统特定部分默认位置是/opt/am。标准设置为应用程序管理器在template-opt目录中发货。

您可以通过以下命令使用默认值

sudo cp -r template-opt/am /opt
sudo chown $(whoami) /opt/am -R

或者,您可以将template-opt的内容复制到另一个位置;务必编辑config.yaml文件以反映更改的路径。

完成这些后,将一个名为am-config.yaml的文件添加到您的系统UI中,包含UI特定设置。例如,QML导入路径,内置应用程序的路径等。

一旦一切准备就绪,您就可以启动应用程序管理器

cd /path/to/system-ui
appman -c /opt/am/config.yaml -c am-config.yaml --verbose main.qml

--verbose提供详细输出,这在首次设置环境和调试目的时非常有用。

©2019年Luxoft瑞典AB。本文件内的文档贡献是各自拥有者的版权。此处提供的文档根据自由软件基金会的GNU自由文档许可证版本1.3的条款进行许可。Qt及其相关标志是芬兰Qt公司及其/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。