Как правильно выставить зависимость библиотеки поддержки в библиотеке Android с помощью android-gradle 3?

Я разрабатываю библиотеку Android. Библиотека зависит от appcompat-v7, Мои потребители также зависят от appcompat-v7, Как наиболее правильно выставить мою зависимость appcompat от libray при публикации в репозиторий maven?

Что я делаю сейчас

  • Листинг appcompat-v7 зависимость как implementation зависимость в библиотеке
  • Использование android-maven-publish для публикации POM-файлов, что приводит к тому, что зависимость указывается с помощью Scope "runtime"

Тем не менее, с этой настройкой предпочтение версии библиотеки перетекает на потребителя. Вот снимок экрана с представлением проекта потребителя, где версия библиотеки использует v27.0.0, а потребитель настроен на 26.1.0:

v27.0.0 превалирует над v26.1.0, вызывая ошибки компилятора (поскольку подпись фрагмента изменилась).

Есть ли способ избежать этого, настраивая другую библиотеку, или это должно быть результатом? Я ошибаюсь, предполагая, что разные версии библиотеки appcompat должны быть разрешены в библиотеке и в приложении-потребителе? Стоит ли вместо этого публиковать несколько двоичных файлов, каждый из которых скомпилирован с использованием разной версии библиотеки поддержки, чтобы удовлетворить любую заданную настройку потребителя?

1 ответ

Решение

Есть ли способ избежать этого, настраивая другую библиотеку, или это должно быть результатом?

К сожалению, это ожидаемый результат. Причиной этой проблемы является то, что JVM не позволяет иметь более одного раза класс с одним и тем же пакетом и именем.

Я ошибаюсь, предполагая, что разные версии библиотеки appcompat должны быть разрешены в библиотеке и в приложении-потребителе?

Как я уже сказал, это JVM ограничение.

Стоит ли вместо этого публиковать несколько двоичных файлов, каждый из которых скомпилирован с использованием разной версии библиотеки поддержки, чтобы удовлетворить любую заданную настройку потребителя?

Это единственное решение, которое у вас есть, даже делать это очень больно.

Другие вопросы по тегам