将代码从5.13迁移到5.14
Qt应用程序管理器5.14添加了一种新的意图 IPC机制,并增加了对打包多个可执行文件的应用程序包的支持。在本文档中,我们将介绍主要API更改以及如何将受影响代码和元数据从5.13迁移到新的5.14 API。
应用程序别名和documentUrl
如果您想有一个单一的应用程序,但希望在启动器中有多个不同的条目,您将使用别名清单。为了区分实际激活的是哪个应用程序,您将在每个别名清单中提供不同的documentUrl
参数,并在ApplicationInterface::openDocument的信号处理程序中查看这些参数。然而,这种机制仅适用于内置应用程序,并且无法以干净的方式进行扩展,以支持5.14的新多可执行文件替代品。
因此,5.14中完全移除了对别名清单的支持。
在新版本的清单中不再支持documentUrl
字段,但在遗留清单中指定时,仍然按预期运行。
ApplicationObject::start()和ApplicationManager::startApplication()调用中的documentUrl
参数仍然完全受支持。这还与通过ApplicationManager::openUrl()和Qt::openUrlExternally()进行的打开URL处理相关联,它们使用documentUrl
参数来与应用程序通信要打开的URL。尽管没有计划退役此API,但您仍然可能希望根据您的用例切换到更灵活的意图框架。
有一个示例解释了如何使用这种新机制作为旧别名清单的直接替换:[使用意图系统UI示例启动应用程序](applicationmanager-applicationmanager-launch-intents-example.html)
PackageManager和PackageObject
可安装的应用程序已经被称为“包”,但只是通过应用程序管理器中的ApplicationObject句柄来表示。现在,由于5.14增加了单个包中支持多个应用程序的功能,所有包(即使是内置包)都由一个PackageObject句柄表示,它反过来持有指向所有包含应用程序的引用。对于遗留应用程序,这导致PackageObject仅指向单个应用程序。
新增了一个PackageManager单例,它作为所有相同包对象的模型,就像ApplicationManager对应用对象作用一样。由于现在所有东西都是包,因此ApplicationInstaller单例功能被移动到PackageManager单例,API也略有调整,以反映包和应用之间的区别。旧的ApplicationInstaller单例已弃用,但仍可以作为新PackageManager的轻量级包装器保留。同样,如果从ApplicationManager单例获取的信息足以满足您的使用案例,则使用PackageNameger单例是完全可选的。
多个安装位置
在5.14中,删除了指定多个安装位置以安装第三方应用的功能。此功能使得ApplicationInstaller API使用复杂化,增加了安装器代码库中大量难以测试的复杂性,而最初打算实现的使用案例(移除式SD卡)根本没有完全实现。
应在系统级别实现此功能的功能替代方案,并取决于预期使用案例:例如,可以是overlayfs
、lvm2
,或btrfs
。
尽管在5.14中您应该使用新的--installation-dir
选项或在配置文件中使用applications/installationDir
键设置安装目录,但配置文件中使用installationLocations
列表的旧语法仍然受支持——只要列表中恰好定义了一个位置。
应用程序数据库内部
在5.14中完全重写了内部应用程序数据库——已知的应用程序清单文件的缓存。现在在启动时扫描所有清单文件,因此不再需要-r
或--recreate-database
命令行选项。同样,由于新的应用程序数据库被当作标准缓存文件处理,存储在适当的系统目录中,因此不再需要--database
选项或applications/database
配置键(请参阅QStandardPaths::CacheLocation)。
尽管配置和应用程序缓存都已版本化和基于对应源文件的校验和进行键控,但您仍可以通过-clear-cache
选项强制清除应用程序管理器中的它们,或通过--no-cache
选项不使用任何缓存。
©2019 Luxoft Sweden AB。此处包含的文档贡献是各自所有者的版权。提供的文档受GNU自由文档许可证版本1.3的条款许可,由自由软件基金会发布。Qt及其相应徽标是芬兰以及/或世界其他国家的Qt公司有限合伙企业的商标。所有其他商标均属于其各自所有者。