要求与规范

Flatpak尽可能不对应用程序作出限制。不过,开发者应当尽可能遵循标准Linux桌面的规范,这主要是为了应用程序能更好地集成到Linux桌面和应用中心(App Center)。开发者也应尽可能遵循Linux技术规范。

更多有关桌面集成的选项可以参考 桌面集成

应当遵循的标准

使用Flatpak构建的应用应当遵循下列标准。一般而言,为Linux桌面设计的应用程序只需做少数改动即可符合这些标准。

应用ID

使用Flatpak 所述,Flatpak要求每个应用都有一个独立的标识符,由三部分构成,例如 org.gnome.Dictionary 。我们在下面和后面的章节也会看到,ID在许多地方会用到。开发者在创建他们自己的ID的时候应该遵守 D-Bus naming conventions (D-Bus命名约定,译者注)标准。这种格式也被 Desktop File specification (Desktop文件规范,译者注)和 Appstream specification (AppStream规范,译者注)所推荐。

AppData文件

APPData文件提供了应用的元数据,可以被应用商店使用(例如Flathub、GNOME Software和KDE Discover)。 Freedesktop AppStream specification (APPStream规范)提供了一个AppData的完整参考。

AppData文件应该以应用的ID命名,并以 .appdata.xml 为文件扩展名,应该放在 /app/share/metainfo/ 。举个例子:

/app/share/metainfo/org.gnome.Dictionary.appdata.xml

appstream-util vlidate-relax 命令可以用于检查AppData文件的错误

应用图标

应用需要提供一个图标,用于应用启动器。这些图标应当与 Freedesktop icon specification (Freedesktop图标规范)一致。

图标应该以应用ID命名,以PNG或者SVG格式,而且必须放在标准的位置:

/app/share/icons/hicolor/$size/apps/

举个例子,128x128px版本的GNOME Dictionary的图标的路径应该是:

/app/share/icons/hicolor/128x128/apps/org.gnome.Dictionary.png

desktop文件

desktop文件用于向桌面环境报告每个应用程序的相关信息。Freedesktop specification 提供了编写desktop文件的完整指南,您也可以在 ArchLinux Wiki 上找到更多信息。

desktop文件应该以应用的ID命名,以 .desktop 为文件扩展名,而且应该放在 /app/share/applications/ 。举个例子:

/app/share/applications/org.gnome.Dictionary.desktop

一个desktop文件应当至少包含以下字段: name*(应用程序名)、*exec*(启动命令)、*type*(类型)、*icon*(图标名)和 *categories (所属分类):

[Desktop Entry]
Name=Gnome Dictionary
Exec=org.gnome.Dictionary
Type=Application
Icon=org.gnome.Dictionary
Categories=GNOME;GTK;Office;Dictionary;

desktop-file-validate 命令可以用来检测desktop文件的错误。

技术规范

Flatpak和多数Linux桌面都遵循下列标准技术规范。有Linux使用经验的用户对此可能已有了解。首次使用Linux的开发者同样可以在这里找到有用的信息。

D-Bus

D-Bus是Linux桌面使用的标准IPC(进程间通讯,译者注)框架。大多数应用程序并不会用到D-Bus;但如果需要,Flatpak也同样提供D-Bus支持。

D-Bus可用于启动应用程序,以及系统服务之间的交互。应用程序也可以实现它们自己的D-Bus服务(此时,D-Bus服务的名称必须与应用程序的ID一致)。

Filesystem layout(文件系统布局,译者注)

每个Flatpak沙箱,一个应用运行的环境,包含这个应用的运行时的文件系统。这个准守 standard Linux filesystem conventions (标准Linux文件系统约定,译者注)。

举个例子,沙箱根目录包含 /etc 用于配置文件和 /usr 用于多用户utilities和应用。除此之外,每个沙箱包含一个顶级 /app/ 目录,用于应用自己文件的存放。

XDG基本目录

XDG基本目录 指定用户应用数据的位置标准。很多工具包都提供了访问XDG基本目录的快捷方法。如:

  • Electron: 使用 app.getPath 访问XDG基本目录
  • Glib: 通过 g_get_user_cache_dir (), g_get_user_data_dir (), g_get_user_config_dir () 函数访问XDG基本目录
  • Qt: 通过 QStandardPaths Class 访问XDG基本目录

如果应用没有使用上述工具包,也可以通过下面的方式找到XDG基本目录:

基本目录 用途 默认位置
XDG_CONFIG_HOME 具体用户配置文件 ~/.var/app/<app-id>/config
XDG_DATA_HOME 具体用户数据 ~/.var/app/<app-id>/data
XDG_CACHE_HOME Non-essential user-specific data(非基本具体用户数据,译者注) ~/.var/app/<app-id>/cache

举个例子,GNOME Dictionary会把具体用户数据存放在:

~/.var/org.gnome.Dictionary/data/gnome-dictionary

注意应用可以被配置成使用非默认基本目录(见 沙箱权限)。