Android : Как создать библиотеку без конфликтующих зависимостей

#android #android-studio #gradle #android-gradle-plugin

Вопрос:

Я создаю библиотеку Android, которая в конечном итоге будет использоваться моими многочисленными приложениями. Предполагая, что эта библиотека имеет зависимость X с версией 1.0. Что делать, если основное приложение хочет использовать зависимость X с версией 0.5? Я не хочу, чтобы основное приложение проходило процесс исключения зависимостей из gradle. Есть ли какой-нибудь другой способ? Я думаю, как изменить имя или дать псевдоним зависимостям в моей библиотеке? Возможно ли это вообще?

Ответ №1:

Если gradle найдет две (или более) версии зависимости в графике зависимостей, он по умолчанию выберет последнюю версию. Большинство библиотек гарантируют обратную совместимость, поэтому обычно это работает нормально. Gradle также предлагает множество крючков, позволяющих клиенту выбрать другую стратегию.

Если вы действительно хотите, чтобы у пользователей вашей утилиты было две версии (общей/транзитивной) зависимости от их пути к классам, вам нужно будет переупаковать зависимость так, чтобы каждый класс перемещался в другой пакет, поскольку у вас может быть только одна версия каждого (полного) имени класса в пути к классам

Чтобы переупаковать банку, взгляните на плагин shadow. Многие библиотеки (например, hibernate и spring) предпочитают переупаковывать/затемнять ASM-банку, чтобы избежать конфликтов.

Пожалуйста, обратите внимание, что в 99% случаев переупаковка банки является неправильным выбором, и вы должны просто позволить нормальному процессу разрешения зависимостей

См. раздел понимание разрешения зависимостей