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 文档复制而来。