依赖

Flatpak为应用程序如何依赖于其他软件提供了许多不同的选项。在首次开始使用Flatpak构建应用程序时,因此有必要决定如何组织应用程序依赖关系。

此页面概括了这些选项是什么和在何时使用他们。

运行时

基本概念 中描述的,运行时提供了应用可以使用的基本依赖。他们提供了应用的运行环境。Flatpack要求每个应用需要指明一个运行时。因此,用Flatpack构建一个应用最先要确定的就是,应用要使用什么运行时。

我们可以在 可用的运行时 页面找到可用运行时的概览。有意地,只有少量运行时可供选择。通常,运行时是根据应用程序所需的依赖项来选择的。如果存在一个提供您计划使用的库的运行时,这通常是正确的运行时!

小技巧

运行时需要定期维护,应用程序开发人员通常不应该考虑创建自己的运行时。

当用户安装应用程序时,运行时将自动为他们安装,构建工具也可以为您自动安装它们(使用 flatpak-builder--install-deps-from 选项)。但是,如果你想要手动地选择你的运行时,和安装一个应用类似,使用 flatpack install 命令。举个例子,安装GNOME 3.26运行时的命令:

$ flatpak install flathub org.gnome.Platform//3.26

构建

Flatpak的关键优势之一是它允许应用程序作者捆绑任何他们想要的库或依赖。这意味着开发人员不受某些库只在特定Linux发行版可用的约束。

当首次构建应用的时候,你需要确定绑定哪些依赖。这包括:

  • 所选运行时不包含的库
  • 所选运行时库的另一版本
  • 打了补丁的库
  • 作为应用一部分的数据或者资源

可以看到,作为构建过程的一部分,捆绑的依赖关系可以自动下载。开发者也可以对他们打补丁,或者作其他的更改。

虽然捆绑非常强大和灵活,但它也给应用程序开发人员带来了更大的维护负担。因此,尽管可以尽可能多地进行打包,但通常建议尽量减少打包模块的数量。如果依赖项作为运行时的一部分并是可用的,通常最好使用该版本,而不是自己打包。

如何捆绑库的细节在 mainifests 可以找到。

框架应用

运行时和捆绑是Flatpack处理依赖的两条主要途径。他们一方面允许应用建立在稳定的依赖集合上,另一方面又不失灵活性和控制。

可是,在某些情况下,依赖是一个更大的框架或者工具集,它不适合放进运行时,但手工捆绑成一系列单独的模块也很麻烦。所以有了 base apps

base apps包含了一个捆绑好的依赖的集合,这些依赖可以作为应用的一部分被捆绑。他们不会在构建过程中被重建,可以使得构建更快(特别是在构建大型的依赖时)。由于每个base app只构建一次,可以保证无论什么时候使用都是一样的,所以它只在磁盘保存一份。

base apps是一个相对专业的概念,只有一些应用需要使用他们(最常用的base app是用于 Electron applications )。但是,如果你的应用使用一个巨大的,复杂的或者专用的框架,在开始构建的时候检查是否有可用的base apps是一个好主意。