wiki/work/fsight/archive/MavenMigration.md

44 lines
5.6 KiB
Markdown
Raw Normal View History

# Текущая схема доступа
На данный момент пользователи получают дистрибутив фреймворка в формате zip архива через портал релизов (nextcloud/owncloud share с паролем). В архиве содержится файл библиотеки `fmp.aar`, который впоследствии импортируется в проект приложения Android.
Проблема: зависимости самой библиотеки.
Ранее (до текущей схемы) пользователи должны были указывать зависимости самой библиотеки в конечном приложении, т.к. Android aar файл не может содержать в себе реализации зависимостей. Это включало конкретные версии зависимостей. Например, библиотека использовала версию Котлина (std библиотека языка) под номером А, но в приложении используется версия Б. В свою очередь, библиотека не будет работать, если между версиями А и Б мажорные релизы. В случае с минорными релизами могут возникать нежелательные баги, т.к. всё тестирование проводилось на версии А. Такое жёсткое ограничение на базовые библиотеки, а также необходимость каждый раз их обновлять в каждом приложении, когда обновляется фреймворк - очень неприятный процесс.
Для решения этой проблемы, вместо интеграции aar файла напрямую, мы стали распространять отдельный gradle модуль (gradle - система сборки приложений Android). Он разделял версии модуля приложения и версии библиотеки. И это также позволяло пользователям просто заменить папку `fmp` в проекте, вместо редактирования конфигурации сборки в самом приложении.
Эта схема отлично работала какое-то время, пока в gradle не убрали поддержку использования прямых aar зависимостей в модулях. Это означает, что ни изначальный способ, ни текущий не будут работать на актуальных версиях сборщика проектов.
# Новая схема доступа
В Android стандарный способ доставки библиотек - через Maven репозиторий. Чаще всего это стандартные, публичные репозитории. Например, Google репозиторий. Они включены в шаблон проекта и добавляются автоматически при создании нового проекта в IDE (среде разработки).
При этом есть поддержка добавления сторонних репозиториев, что необходимо в нашем случае.
Maven репозиторий представляет собой простейший HTTP сервер с конкретной файловой структурой. Когда пользователь указывает название библиотеки и её версию, IDE знает конкретный путь к файлу для HTTP GET запроса на репозиторий.
Спецификация Maven поддерживает использование HTTP Basic Auth для авторизации запросов.
От пользователей потребуется стандартная для всех библиотек конфигурация системы сборки:
1. Указать URL репозитория в списке репозиториев. Например, `https://fmp.fsight.ru/maven`.
2. (Опционально) Указать рядом с URL username и password для HTTP Basic Auth.
3. В списке всех зависимостей приложения указать библиотеку FMP.
Пример добавления репозитория:
```groovy
repositories {
maven {
url "https://fmp.fsight.ru/maven"
credentials {
username "user"
password "password"
}
}
}
```
Пример добавления зависимости библиотеки:
```groovy
implementation "ru.fsight.fmp:android:22.10.02"
```
После выполнения указанных выше операций библиотека готова к работе. Также пользователи будут получать уведомления о новых версиях с возможностью обновиться в один клик. Без необходимости скачивать дистрибутив с портала релизов и манипуляций с файлами. Также gradle разрешит все проблемы зависимостей через `.pom` файлы Maven репозитория.