全部文章目录:
Flatpak打包(1)——Flatpak 介绍
Flatpak打包(2)——Flatpak应用元素
Flatpak打包(3)——应用Flatpak
Flatpak打包(4)——构建第一个Flatpak
Flatpak打包(5)——开始配置
Flatpak打包(6)——构建一个简单的应用
Flatpak打包(7)——Flatpak Builder
Flatpak打包(8)——应用Sandbox(沙盒)
Flatpak打包(9)——应用分发
Flatpak打包(10)——可用运行时(Runtime)
Flatpak打包(11)——命令参考
Flatpak打包(12)——Flatpak-builder命令参考
大多数应用程序需要其运行时不提供的附加依赖项。flatpak允许将这些依赖关系捆绑为应用程序本身的一部分。为此,必须在应用程序构建目录内部构建每个依赖项。flatpak-builder
工具可以自动执行多步构建过程,从而可以使用单个命令构建所有应用程序模块。
flatpak-builder支持各种构建系统,包括 autotools,cmake,cmake-ninja,meson,一种简单的称为“simple”的构建系统,它允许提供一系列运行命令,以及所谓的Build API。
所有json实体都在flatpak-builder
的man页面中解释。
flatpak-builder的输入是一个json文件,它描述了构建应用程序的参数以及要捆绑的每个模块。这个文件被称为manifest。模块源可以有多种类型,包括运行的.tar
或.zip
存档,Git或Bzr存储库,补丁文件或shell命令。
GNOME Dictionary的Manifests很短,因为唯一的模块是应用程序本身:
{
"app-id": "org.gnome.Dictionary",
"runtime": "org.gnome.Platform",
"runtime-version": "3.22",
"sdk": "org.gnome.Sdk",
"command": "gnome-dictionary",
"finish-args": [
"--socket=x11",
"--share=network"
],
"modules": [
{
"name": "gnome-dictionary",
"sources": [
{
"type": "archive",
"url": "https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz",
"sha256": "efb36377d46eff9291d3b8fec37baab2355f9dc8bc7edb791b6a625574716121"
}
]
}
]
}
可以看出,这个manifest包含了有关应用程序的基本信息,然后指定了一个要下载和构建的.tar文件。更复杂的manifest包括一系列模块。
构建完成后,flatpak-builder会执行清理阶段。这可以用来除去头文件和开发文档等等。 manifest文件中的两个属性用于此目的。
首先,可以包含文件名模式列表:
"cleanup": [ "/include", "/bin/foo-*", "*.a" ]
第二个清理属性是在清理阶段运行的命令列表:
"cleanup-commands": [ "sed s/foo/bar/ /bin/app.sh" ]
可以基于每个模块设置清理属性,在这种情况下,只有由该特定模块创建的文件名才会匹配。
由flatpak导出的文件必须使用应用程序ID作为前缀。如果应用程序的源文件没有使用该约定命名,则flatpak-builder允许将它们重命名为构建过程的一部分。要重命名应用程序图标,桌面文件和 AppData文件,请使用rename-icon
, rename-desktop-file
和 rename-appdata-file
属性。
默认情况下,flatpak构建器会将翻译和调试信息拆分为单独的.locale和.debug扩展名。这些’标准’扩展点将被添加到应用程序的元数据文件中。可以使用separate-locale
和no-debuginfo
关闭它,但不应该有任何理由。
当flatpak构建器将构建版本导出到存储库时,它会自动包含.locale和.debug扩展。如果手动进行导出,请不要忘记包含它们。
要自己尝试使用flatpak-builder,创建一个名为org.gnome.Dictionary.json
的文件,并将上面的Dictionary manifest json内容粘贴到该文件中。
然后运行以下命令:
$ flatpak-builder --repo=repo dictionary2 org.gnome.Dictionary.json
这会:
注:
1 如果这个出现一下错误:
$ flatpak-builder --repo=repo dictionary2 org.gnome.Dictionary.json
Downloading sources
Downloading https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz
Failed to download sources: module gnome-dictionary: 已到超时限制
可以通过将文件下载到本地,然后更改org.gnome.Dictionary.json
中的"url": "https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz",
为"path": "The path of the archive"
即可。
2 如果出现Flatpak打包(6)——构建一个简单的应用中出现的bug。可以将文件解压之后重新进行压缩。
flatpak-builder还会做一些其他有用的事情,比如创建一个可单独安装的debug运行时(本例中称为org.gnome.Dictionary.Debug
)和一个可单独安装的translation运行时(称为org.gnome.Dictionary.Locale
)。
如果已完成构建简单应用程序的教程,则可以使用由flatpak-builder构建并导出的新版本来更新安装的字典应用程序:
$ flatpak --user update org.gnome.Dictionary
否则,您需要将repo添加到flatpak并安装该应用程序。使用如下命令:
$ flatpak --user remote-add --no-gpg-verify --if-not-exists tutorial-repo repo
$ flatpak --user install tutorial-repo org.gnome.Dictionary
要检查应用程序是否已成功更新,可以将安装的应用程序的sha256提交与flatpak-builder命令打印的提交ID进行比较:
$ flatpak info org.gnome.Dictionary
$ flatpak info org.gnome.Dictionary.Locale
最后,您可以运行新版本的Dictionary应用程序:
$ flatpak run org.gnome.Dictionary
除了为一系列其他gnome应用程序提供manifests之外,还可以使用从git构建的gnome字典的完整manifests。