Flatpak¶
Flatpak 是一个用于在 Linux 上构建、分发和运行应用程序的框架。它允许开发者轻松地向用户提供可下载和安装的应用程序。它还通过提供稳定的开发环境,以及简化应用程序的构建和本地运行,使应用程序开发更加容易。
Flatpak 是 GNOME 推荐和首选的分发框架,Flatpak 支持已集成到 GNOME 的开发工具、基础设施和文档中。
《Flatpak 文档》提供了关于如何使用 Flatpak 的详细信息,包括入门指南以及更高级的主题。本简短指南旨在从 GNOME 平台的角度介绍 Flatpak。
特性¶
Flatpak 具有许多与应用程序开发相关的优势。这些包括
跨发行版应用分发:使用 Flatpak 构建的应用程序可以在任何 Linux 发行版上运行。
向前兼容性:相同的应用程序可以在不同的发行版版本上运行。
依赖项控制:应用程序可以依赖于称为 runtimes 的稳定的依赖项集合;其他依赖项可以直接捆绑到应用程序中。
可预测的开发环境:Flatpak 可以开发与应用程序运行环境完全相同的环境。
轻松测试:Flatpak 使得在开发过程中轻松构建和运行应用程序,使用 Builder。
简单的受众路径:Flathub 托管服务为所有 Linux 发行版提供了一个单一的分发点。
关键概念¶
不可避免的是,Flatpak 与其他软件分发框架存在一些差异。但是,可以通过一些关键概念来理解它。
Runtimes¶
Runtime 是一个依赖项集合,充当应用程序可以运行的平台。当使用 Flatpak 构建应用程序时,它会构建到 runtime 上,并且该 runtime 必须存在于系统上才能运行该应用程序。
每个 runtime 的维护方式与操作系统相同,会发布预定义时间段的更新。GNOME 维护自己的 runtime,其中包含构成 GNOME 平台的组件。
Flatpak runtimes 可以在不同的 Linux 发行版上使用,这意味着它们为应用程序提供了一个稳定、跨发行版的基准。它们也独立于不同的发行版版本,为应用程序开发者提供了额外的灵活性。
软件开发工具包 (SDK)¶
每个 runtime 都附带一个 SDK。这是 runtime 的一个版本,已扩展为充当开发环境。开发者使用 SDK 开发他们的应用程序,并将其构建到相应的 runtime 上,然后用于运行该应用程序。
例如,在开发将构建到 GNOME 40 runtime 上的应用程序时,开发将使用 GNOME 40 SDK 进行。
捆绑库¶
如果应用程序需要其 runtime 中没有的任何依赖项,则可以将它们作为应用程序的一部分捆绑起来。这为应用程序开发者提供了有关依赖项的灵活性,允许他们使用 runtime 中没有的库、runtime 中不同版本的库以及已修补版本的库。
Manifests¶
Flatpak manifest 是一个 JSON 或 YML 文件,描述了如何构建应用程序。它指定要使用的 runtime,要捆绑的附加库,以及作为构建过程的一部分应执行的任何配置步骤。
示例¶
《Builder 介绍》包含一个关于如何使用 Builder 的模板功能创建和运行应用程序的教程。让我们继续该示例,看看 Flatpak 配置是什么样的。
首先,使用标题栏左上角的菜单打开 构建首选项。在左侧,您应该会看到一个侧边栏,其中列出了可用的 manifest。选择的 manifest - org.gnome.Demo.json - 是用于构建和运行您的应用程序的 manifest 文件。
现在让我们打开 manifest 文件看看它是什么样的。返回到编辑器视图,并在 Builder 中打开 org.gnome.Hello.json 文件。您应该会看到如下内容
{
"app-id" : "org.gnome.Hello",
"runtime" : "org.gnome.Platform",
"runtime-version" : "40",
"sdk" : "org.gnome.Sdk",
"command" : "hello",
"finish-args" : [
"--share=network",
"--share=ipc",
"--socket=fallback-x11",
"--socket=wayland"
],
"cleanup" : [
"/include",
"/lib/pkgconfig",
"/man",
"/share/doc",
"/share/gtk-doc",
"/share/man",
"/share/pkgconfig",
"*.la",
"*.a"
],
"modules" : [
{
"name" : "hello",
"builddir" : true,
"buildsystem" : "meson",
"sources" : [
{
"type" : "git",
"url" : "file:///home/user/Projects/hello"
}
]
}
]
}
这是应用程序 manifest。如您所见,它指定了应用程序的 ID、runtime 和 runtime 版本,以及用于运行它的命令。
finish-args 用于配置应用程序可以访问哪些服务,而 cleanup 字面意思就是这样 - 构建后清理。
最后的 modules 部分是列出要构建并捆绑在 Flatpak 中的软件模块。在这种情况下,只有一个模块 - 应用程序本身。但是,其他库和依赖项也可以包含在此处。
有关 manifest 和构建应用程序的更多信息,请参阅 Flatpak 文档 此处。
Flathub 托管¶
Flatpak 使用去中心化模型,这意味着任何人都可以托管自己的存储库,用户可以从中下载、安装和更新应用程序。但是,通常使用 Flathub,Flatpak 的主要托管服务更为方便。
Flathub 默认情况下由一些 Linux 发行版启用。在其他情况下,可以轻松手动启用它。
在 Flathub 上托管应用程序很简单:您在 Flathub GitHub 项目下创建一个 Git 存储库,其中包含您的应用程序的 manifest。Flathub 然后基于该 manifest 构建和托管该应用程序。有关更多信息,请参阅 Flathub 应用程序提交指南。
署名¶
此页面的部分内容是从 Flatpak 文档复制而来。