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