Зависимости¶
Flatpak предоставляет несколько различных вариантов того, как приложения могут зависеть от другого программного обеспечения. Поэтому, собираясь создать приложение с помощью Flatpak в первый раз, необходимо решить, как будут организованы зависимости приложения.
На этой странице описаны возможные варианты и даны инструкции о том, когда их использовать.
Среда выполнения¶
Как было описано в Основные понятия, среды выполнения предоставляют базовые зависимости, которые могут использоваться приложениями. Они также обеспечивают среду, в которой работают приложения. Flatpak требует, чтобы каждое приложение указывало среду выполнения. Следовательно, одно из первых решений, которое вам необходимо принять при создании приложения с помощью Flatpak, - это то, какую среду выполнения оно будет использовать.
Обзор доступных сред выполнения можно найти на странице Доступные среды выполнения. Намеренно сделано так, что есть только небольшое количество сред выполнения на выбор. Обычно среды выполнения выбираются на основе того, какие зависимости требуются приложению. Если существует среда выполнения, которая предоставляет библиотеки, которые вы планируете использовать, обычно это правильная среда выполнения!
Совет
Среды выполнения требуют регулярного обслуживания, и разработчикам приложений, как правило, не следует создавать собственные.
Среды выполнения автоматически устанавливаются для пользователей, когда они устанавливают приложение, и инструменты сборки также могут автоматически устанавливать их для вас (для этого полезна опция --install-deps-from
в flatpak-builder
). Однако, если вам действительно нужно вручную установить выбранную среду выполнения, это можно сделать так же, как и установку приложения, с помощью команды flatpak install. Например, команда для установки среды выполнения GNOME 43:
$ flatpak install flathub org.gnome.Platform//43
Объединение¶
Одним из ключевых преимуществ Flatpak является то, что он позволяет авторам приложений объединять любые библиотеки или зависимости, которые они хотят. Это означает, что разработчики не ограничены тем, какие библиотеки доступны в дистрибутивах Linux.
Когда дело доходит до создания приложения в первый раз, вам нужно будет решить, какие зависимости нужно связать. Это может включать:
библиотеки, которых нет в выбранной вами среде выполнения
разные версии библиотек, которые находятся в выбранной вами среде выполнения
пропатченные версии библиотек
данные или другие ресурсы, являющиеся частью приложения
Как будет показано ниже, связанные зависимости могут быть автоматически загружены как часть процесса сборки. Также возможно применять патчи и выполнять другие преобразования.
Несмотря на то, что объединение является очень мощным и гибким, оно также возлагает большую нагрузку на разработчика приложения. Поэтому, хотя можно объединить столько модулей, сколько захотите, обычно рекомендуется стараться поддерживать как можно меньшее количество связанных модулей. Если зависимость доступна как часть среды выполнения, обычно лучше использовать эту версию, чем связывать ее самостоятельно.
Специфика объединения библиотек описана в разделе manifest.
BaseApps¶
Среда выполнения и связывание - два основных способа обработки зависимостей с помощью Flatpak. Они позволяют приложениям полагаться на стабильные наборы зависимостей, с одной стороны, и иметь гибкость и контроль, с другой.
However, in some cases, dependencies come as part of a bigger framework or toolkit, which doesn’t fit into a runtime but which is also cumbersome to manually bundle as a series of individual modules. This is where BaseApps come in.
BaseApps contain collections of bundled dependencies which can then be bundled as part of an application. They don’t get rebuilt as part of the build process, which makes building faster (particularly when bundling large dependencies). And because each BaseApp is only built once, it is guaranteed to be identical wherever it is used, so it will only be saved once on disk.
BaseApps are a relatively specialized concept and only some applications need to use them (the most common BaseApp is used for Electron applications). However, if your application uses a large, complex or specialized framework, it is a good idea to check for available BaseApps before you start building.
Extensions¶
Runtimes and applications can define extension points which allow optional additional runtimes to be mounted at a specified location inside the sandbox when they are present on the system. Typical uses for extensions include translations for applications, debuginfo for sdks, or adding more functionality to the application. Some software refers to these extensions as «Add-ons».
For an extension to be loaded in the application or runtime, an extension point first needs to be defined in the application or runtime in question.
By convention, extension points follow the ID of the application or
runtime in question, followed by a generic term for the extension.
For example, the OBS Studio flatpak may define an extension point
com.obsproject.Studio.Plugin
, where «Plugin» is the generic term
prefixed by the application ID.
To see available extension points, it’s best to look at the application or runtime manifest.
Any extension now choosing to be loaded inside the OBS Studio flatpak
must prefix their ID by com.obsproject.Studio.Plugin
for example
com.obsproject.Studio.Plugin.Gstreamer
.
Some extension names having special significance are discussed below.
.Debug
is used for Debug extensions by applications, runtimes and SDKs. They are used for debugging purposes. Every application or runtime built withflatpak-builder
produces a.Debug
extension unless specifically disabled in the manifest.A
.Debug
extension will be needed when generating useful backtraces. This is explained more in Отладка..Locale
is used for Locale extensions by applications or runtimes. They add support for more languages to the parent application or runtime. These are usually partially downloaded byflatpak
based on the configured system locale. Every application or runtime built withflatpak-builder
produces a.Locale
extension unless specifically disabled in the manifest..Sources
is used for Sources extension by application or runtime. They are used to bundle sources of the modules used in the application or runtime in question.flatpak-builder
will produce a.Sources
extension prefixed by ID when--bundle-sources
is used.
Please visit Extensions for a guide on how to create extension points and extensions.