清单

flatpack-builder 是一个JSON文件,用于描述构建一个应用的参数,以及构建每个模块所用的指令。这个文件被称为清单文件。

这个页面提供了如何使用清单文件的信息和指南,包括需要指定的最常用参数的详解。读这一章节之前要求已经学习过 构建你的第一个flatpak应用 并且熟悉 Flatpak Builder

清单文件应该使用应用ID命名。举个例子:GNOME Dictionary的清单文件应该命名为 org.gnome.Dictionary.json .本页面使用这个清单文件,在 构建你的第一个flatpak应用 有对整个例子的介绍。

一个完整的属性列表可以在清单文件中指明,可以在 Flatpak Builder命令行参考文档flatpak-manifest 找到。

基本属性

每个清单文件应该指明要构建应用的基本信息,包括 app-idruntimeruntime-versionsdkcommand 。这些属性通常在文件的开头进行声明。

举个例子,GNOME Dictionary的清单文件包含:

"app-id": "org.gnome.Dictionary",
"runtime": "org.gnome.Platform",
"runtime-version": "3.26",
"sdk": "org.gnome.Sdk",
"command": "gnome-dictionary",

指明runtime和runtime版本可以在用户的系统上自动安装你的应用需要的运行时。

文件重命名

正如 Flatpak简介 中描述的,导出是对主机可用的应用文件,包含像 .desktop 文件和图标文件之类的。

flatpak导出的文件名字必须以应用ID为前缀,例如 org.gnome.Dictionary.desktop 。直接在应用源代码和资源中重命名这些文件是最佳方法。

如果无法使用应用ID重命名导出文件, flatpak-builder 允许在构建过程中重命名。可以通过在清单文件中指明下面的属性来实现:

  • rename-icon - 重命名应用图标
  • rename-desktop-file - 重命名 .desktop 文件
  • rename-appdata-file - 重命名AppData文件

每个属性都可以接受源文件重命名。 flatpak-builder 会自动重命名他们以匹配应用ID。注意这种重命名方法可能产生内部命名冲突,所以在文件树中进行重命名是最可靠的方法。

Finishing

flatpak应用默认运行在很有限的主机环境里面,但是应用需要访问沙箱之外的资源。finishing是用于指明应用沙箱权限的一步,用于访问外界资源。

finishing清单节点使用 finish-args 属性,可以在Dictionary的清单文件见到:

"finish-args": [
   "--socket=x11",
   "--share=network"
],

正如 构建你的第一个flatpak应用 中解释的,这两个属性为应用授予X11显示服务和网络的权限。权限的使用指南可以参考 沙箱权限 , 所有的 finish-args 选项可以查看 沙盒权限

cleanup

cleanup属性用于移除构建过程中产生的,却不想保留的文件,例如头文件或者开发文档。清单文件中两个参数用于这个操作。第一个,一个文件名模板列表:

"cleanup": [ "/include", "/bin/foo-*", "*.a" ]

第二个cleanup属性是一系列命令,在cleanup阶段执行:

"cleanup-commands": [ "sed s/foo/bar/ /bin/app.sh" ]

cleanup属性可以根据每个模块进行设置,在这种情况下,只会匹配该特定的模块产生的文件名。

模块

这个模块列表作为构建过程的一部分,指明了每个模块。其中一个模块是应用本身,其他的是依赖和库,作为flatpak的一部分进行绑定。当应用比较简单的时候,只有一到两个模块,因此有较短的模块节点,一些应用会有大量的模块需要绑定,因此会有较长的模块节点。

GNOME Dictionary的模块节点是较短的,因为它仅仅包含应用本身,大概如下所示:

"modules": [
  {
    "name": "gnome-dictionary",
    "sources": [
      {
        "type": "archive",
        "url": "https://download.gnome.org/sources/gnome-dictionary/3.26/gnome-dictionary-3.26.0.tar.xz",
        "sha256": "387ff8fbb8091448453fd26dcf0b10053601c662e59581097bc0b54ced52e9ef"
      }
    ]
  }
]

可以看出,每个列出的模块有一个 name (可以自由分配)和一个 sources 列表。每个source都有一个 type ,可用的type有:

  • archive - .tar or .zip 归档文件
  • git - Git 仓库
  • bzr - Bazaar 仓库
  • file - 本地文件(这些复制到源码目录)
  • dir - 本地目录 (这些将复制到源码目录)
  • script - 一个shell命令数组(这些都被放在shell脚本文件里)
  • shell - 再源码抽取期间运行的一组shell命令
  • patch - 补丁(用于源代码目录)
  • extra-data - 在安装时下载的数据;可以包含归档文件或者package文件

每种source类型有不同的属性,在 Flatpak Builder命令行参考文档 列出了。

受支持的构建系统

模块可以用多种构建系统构建,包含:

一个“简单的”构建方法,需要指定一系列命令。

实例清单文件

一个 完整的GNOME Dictionary清单文件 . 你也可以浏览 Flathub托管的所有清单文件