Дизайн API: Скрыть переходный API - PullRequest
0 голосов
/ 16 мая 2018

Я строю набор модулей Android с фиксированным API, который зависит от других внутренних модулей.Gradle представила здесь замечательную функцию (время сборки), позволяющую разделять зависимости от этих внутренних модулей на две категории:

  • api - эти модули являются «API» и транспортируют свои зависимости дальше вверх по стеку зависимостей.(например, потому что на их API также ссылаются в другом API)
  • implementation - эти модули - чистая деталь реализации, не являются частью API реализующего модуля

Gradle использует это главным образом для ускорения сборок, потому что если зависимость реализации какого-либо модуля изменилась, его API остается постоянным, и, следовательно, зависимые модули не нужно перекомпилировать. В этом сообщении в блоге это хорошо подводится .

Теперь, когда я публикую свои модули, очевидно, что зависимости implementation и api становятся обычными зависимостями Maven в том смысле, что даже внутренние модулибудет «утекать» внутренний API в код, который реализует только внешний API.

Я знаю, что, вероятно, нет способа правильно решить эту проблему, и я предполагаю, что со временем люди разработали различные обходные пути, чтобы справиться с ситуацией,как, например, создание «толстых» библиотек, которые включают внутренние зависимости, но скрывают их через видимость пакетов или тому подобное, но это не тот путь, по которому я могу пойти - поскольку мои модули действительно являются модулями в том смысле, что они могут и должны бытьпотребляемый отдельно (и в конечном итоге объединяемый друг с другом), я не могу справиться со сложностью создания толстых библиотек, таких как "moduleA + moduleB", "moduleA + moduleC", aso.

Итак, что делают другие людиисправить эту проблему?Каковы другие полезные обходные пути?У меня такое ощущение, что отсутствует модификатор видимости для межмодульной группы, что говорит о реализации кода: «Этот класс можно использовать только в той же группе Maven, даже если он общедоступен».

Идеи

...