если мы посмотрим на инструменты сборки Gradle, мы заметим, что зависимость от конфигурации компиляции устарела в пользу api и реализации. См. здесь
поэтому у меня возник вопрос о видимости зависимостей с использованием API. Представьте, что у нас есть следующий набор в модуле с именем app:
dependencies {
api 'commons-httpclient:commons-httpclient:3.1'
implementation 'org.apache.commons:commons-lang3:3.5'
}
Итак, насколько я понимаю, org.apache.commons:commons-lang3:3.5 будет доступен только в самом модуле. но зависимость commons-httpclient:commons-httpclient:3.1 будет доступна за пределами модуля, что это на самом деле означает? Означает ли это, что если я превратил свой модуль приложения в библиотеку, зависимость будет доступна всем, кто использует библиотеку, (не всегда ли так было?
вот что говорят документы Android о конфигурации API:
api compile Зависимость доступна модулю во время компиляции, а также доступна потребителю модуля во время компиляции и во время выполнения. Эта конфигурация ведет себя так же, как компиляция (которая теперь устарела), и обычно ее следует использовать только в библиотечных модулях. Модули приложения должны использовать реализацию, если вы не хотите предоставлять его API отдельному тестовому модулю. КомпиляцияТолько при условии
api
=compile
, поэтому он будет виден модулю приложения (т.е. доступен во время компиляции).implementation
не будет виден вашему модулю приложения. Оба будут включены в .apk (т.е. доступны во время выполнения). - person Eugen Pechanec   schedule 29.05.2017