Добавление зависимостей в библиотеку android api против реализации

Предположим, я создаю библиотеку Android и хочу использовать ConstraintLayout. Я вижу два разных подхода других создателей библиотек:

1. Добавьте его с помощью ключевого слова implementation. Обратной стороной является то, что если кто-то добавляет мою библиотеку в проект и не имеет компоновки ограничений в зависимостях, сборка завершится ошибкой с такими ошибками: error: attribute 'com.example.test:layout_constraintBottom_toBottomOf' not found.

2. Добавьте его с помощью api. Таким образом, он компилируется нормально, но если какая-либо другая библиотека использует компоновку ограничений с другими версиями, это может привести к ошибке Android dependency 'com.android.support.constraint:constraint-layout:1.1.2' has different version for the compile (1.0.0) and runtime (1.1.2).

Какой способ имеет наименьшую стоимость обслуживания кода клиента?

1
0
256
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Дело не в самой низкой стоимости обслуживания клиентского кода. Это о том, нужна ли клиенту транзитивная зависимость - ConstraintLayout - для компилировать против вашей библиотеки. Независимо от того, используете ли вы implementation или api, транзитивная зависимость всегда будет зависимостью время выполнения клиента.

Вот вопрос, который вам нужно задать себе: используете ли вы ConstraintLayout или какие-либо другие элементы транзитивной библиотеки в сигнатурах методов или свойствах общедоступного API вашей библиотеки, то есть в том, что используется клиентом? Если да, то вам следует объявить библиотеку компоновки ограничений как api. В противном случае используйте implementation.

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