Страницы

Поиск по вопросам

пятница, 1 марта 2019 г.

Разница между compile files и provided files c точки зрения разработчика библиотеки

Я создал простою библиотеку (AAR), которая при вызове функции взаимодействует с приложением через механизм бродкастов. И вот у меня возник вопрос: как правильно подключать её сторонним разработчикам через compile files и provided files и могу ли я на это как-то повлиять?
Насколько я понял из немногочисленной информации в интернете, если ее подключать через compile files, то она включается в APK, а если через provided files, то зависимость происходит на этапе компиляции. Я не совсем понимаю плюсы/минусы каждого подхода и как я могу на это повлиять в качестве разработчика?!
У меня был случай, когда я подключил стороннюю библиотеку через compile files вместо provided files и при вызове некоторых функций получал ошибку сигментации. Я не хочу, чтобы такая ситуация случилась с моей библиотекой и поэтому хочу подробнее разобраться в проблеме.


Ответ

Для подключения зависимостей в Gradle есть несколько конфигураций:
implementation (compile до Gradle plugin 3.0) Самая часто используемая, добавляет при компиляции зависимость в classpath текущего модуля и добавляет в APK (для модулей с типом "приложение") api (compile до Gradle plugin 3.0) Добавляет при компиляции зависимость в classpath текущего модуля и всех, кто использует его, также добавляет в APK (для модулей с типом "приложение"). Данную конфигурацию обычно используют в модулях библиотек для заявления транзитивных зависимостей. compileOnly (provided до Gradle plugin 3.0) Добавляет при компиляции зависимость в classpath текущего модуля и НЕ добавляет в APK (для модулей с типом "приложение"). Например, вы используете библиотеку, которая опциональна и/или поставляется производителем устройства. runtimeOnly (apk до Gradle plugin 3.0) Добавляет зависимость в APK, но НЕ добавляет при компиляции зависимость в classpath текущего модуля
Т.к. вы разработчик библиотеки, то вам следует уделить внимание использованию implementation и api для зависимостей вашей библиотеки.
Если библиотека используется в модуле приложения, то она подключается всегда через implementation (исключение - библиотеки, являющиеся частью Андроида на конкретном устройстве)

Комментариев нет:

Отправить комментарий