wiki/work/fsight/archive/maven_migration.md

5.6 KiB

Текущая схема доступа

На данный момент пользователи получают дистрибутив фреймворка в формате 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.

Пример добавления репозитория:

repositories {
    maven {
        url "https://fmp.fsight.ru/maven"
        credentials {
            username "user"
            password "password"
        }
    }
}

Пример добавления зависимости библиотеки:

implementation "ru.fsight.fmp:android:22.10.02"

После выполнения указанных выше операций библиотека готова к работе. Также пользователи будут получать уведомления о новых версиях с возможностью обновиться в один клик. Без необходимости скачивать дистрибутив с портала релизов и манипуляций с файлами. Также gradle разрешит все проблемы зависимостей через .pom файлы Maven репозитория.