Пакет применяется для компиляции нативной библиотеки под разные платформы, предоставляет генерируемые биндинги для работы с библиотекой, также хук, который автоматически подключает библиотеку к проекту.
Версионирование пакета
Каждая версия пакета использует фиксированную версию библиотеки. Но пакет версионируется без учета версий библиотеки.
Поддерживаемые платформы
- 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