Пакет применяется для компиляции нативной библиотеки под разные платформы, предоставляет генерируемые биндинги для работы с библиотекой, также хук, который автоматически подключает библиотеку к проекту.

Версионирование пакета

Каждая версия пакета использует фиксированную версию библиотеки. Но пакет версионируется без учета версий библиотеки.

Поддерживаемые платформы

  • linux: x64, arm64
  • macos: x64, arm64
  • windows: x64
  • android: arm32, arm64, x64
  • ios: device arm64, simulator arm64

Платформы web в текущий момент времени не поддерживается.

Исходные коды библиотеки

В каталоге external хранится копия репозитория библиотеки. После клонирования репозитория выполнено переключение на определенную версию библиотеки. Затем каталог .git из external был удален. Дальше каталог external был сохранен с фиксированной выбранной версией в репозиторий текущего проекта.

git clone https://github.com/sqlite/sqlite.git external
cd external
git fetch --tags
git tag --list 'version-*' --sort=-v:refname | head -n 5
git checkout version-3.53.4
rm -rf .git
cd ..
git add external
git commit -mu

Сборка

Для компиляции библиотеки предусмотрены в каталоге tool разные скрипты.

Под desktop платформы выполняется сборка на соответствующих платформах. Сборка выполняется под текущую архитектуру процессора.

Для android компиляция выполняется в linux, для ios используется macos. Для мобильных платформ требуется явно при запуске скриптов сборки указывать целевую платформу или архитектуру.

Пример запуска сборки под linux:

bash tool/linux.sh

Результат сборки сохраняется в каталоге prebuilt/linux/<arch>.

Все скомпилированные библиотеки хранятся в prebuilt каталоге с одним именем. Но могут применяться разные расширения или префиксы, которые зависят от целевой платформы.

Биндинги

Генерация биндингов выполняется командой:

bash tool/bindings.sh

Применение библиотек

Для применения в программе текущий пакет добавляется как зависимость. После этого при запуске программы через hook/build.dart автоматически привязывается к сборке требуемая версия библиотеки.

Для возможности работы хука необходимо выполнение следующих условий:

  • все скрипты сборки должны сохранять библиотеку с одним именем без учета префикса и расширения, которые определяются целевой платформой
  • хук должен подключать библиотеку по имени, которое применятся для библиотек
  • ffigen должен использовать как asset-id выражение, генерируемое на основе названия текущего пакета и на основе названия библиотеки

Тестирование

В пакете есть тесты, которые проверяют возможность загрузки библиотеки.

Для запуска тестов на desktop устройствах в dart проектах используется команда:

dart test

Для тестов flutter проектов используется команда:

cd example flutter/example
flutter test integration_test/load_test.dart

Libraries

api