Какие зависимости следует помещать в каждый модуль мгновенного приложения?

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

Теперь читаем документы для разработчиков Android по структуре проекта и ссылаясь на схему ниже:

введите здесь описание изображения

Меня интересует новый gradle 3.0 конфигурации зависимостей, какие библиотеки должны находиться в каких модулях?

Базовая функция

Я думал, что почти все в базовом функциональном модуле должно использовать конфигурацию api gradle, поскольку базовый функциональный модуль по существу компилируется в файл библиотеки AAR. Один вопрос, который у меня может возникнуть по этому модулю, если бы кто-то использовал ROOM, был бы этот модуль для его размещения?

Функция

Теперь, что касается функциональных модулей, насколько я понимаю, все должно использовать конфигурацию implementation gradle, поскольку эти модули не должны пропускать зависимости к каким-либо другим модулям, чтобы сделать их действительно независимыми друг от друга.

Просто ищу подтверждение моего понимания, а также любые идеи, которые помогут с проектом. Вот репозиторий github, если вы хотите проверить код, который я получил до сих пор. На данный момент это действительно просто, но я думал о том, чтобы возиться с Star Wars API с помощью Retrofit.

Спасибо за любую помощь и с радостью приму любой вклад, если вы хотите попробовать и сделать запрос на вытягивание самостоятельно для любых других концепций создания мгновенного приложения, которые должны знать другие.


person Andrew Steinmetz    schedule 20.01.2018    source источник
comment
Вообще говоря, ваше предположение о том, какая зависимость должна жить в каком модуле, верно. Кроме того, базовый модуль также может содержать implementation зависимости, если он является единственным потребителем этой зависимости. Также ознакомьтесь с каноническим кодом примеров.   -  person keyboardsurfer    schedule 22.01.2018


Ответы (2)


Общие детали в вашем вопросе верны. Рассмотрим некоторые из приведенных ниже предложений, которые дополняют пункты, упомянутые TWL:

  • Добавление определенных библиотек в конкретный функциональный модуль, который должен быть включен только в функциональный модуль, а не в базовый APK.

Например, предположим, что у вас есть приложение, которое зависит от библиотек X, Y и Z. Первоначально вы можете упаковать все библиотеки в базовый модуль, поместив все зависимости в базовый файл gradle.build. Но если только код функционального модуля требует библиотеки Z, имеет смысл переместить эту зависимость из базового модуля в функциональный модуль. Это работает до тех пор, пока никакие другие функциональные модули не зависят от той же библиотеки. Если несколько функциональных модулей используют одну и ту же библиотеку, определенно имеет смысл сохранить ее в базовом модуле.

введите здесь описание изображения

  • Забота о транзитивных зависимостях.

Транзитивные зависимости возникают, когда библиотека, на которую опирается ваш проект, зависит от другой библиотеки, которая, в свою очередь, может зависеть от еще одной библиотеки. Иногда эти транзитивные зависимости могут содержать неожиданные сюрпризы, такие как библиотеки, которые вам вообще не нужны (например, библиотека обработки JSON, которую вы никогда не используете в своем коде).

Я надеюсь, что это добавит некоторую информацию к вашему запросу,

Мне интересно, с новыми конфигурациями зависимостей gradle 3.0, какие библиотеки должны жить в каких модулях?

По некоторым из этих ссылок также можно получить дополнительные данные:
Приложения с мгновенным запуском для Android (рекомендации)
Структура AIA

person ManmeetP    schedule 23.01.2018

Как упомянул keyboardsurfer, ваше предположение о зависимости находится в правильном направлении.

  • Base находится в корне и действует как библиотека, совместно используемая всеми небазовыми функциональными модулями, поэтому ее общие зависимости должны быть установлены с помощью api, чтобы модули, которые зависят от нее, также могли получить к ним доступ. (хотя база не должна действовать только как библиотека, она также может быть самой функцией APK)

  • Функции, как приложение с мгновенным запуском, каждое из них расширяется до конца как отдельный APK, поэтому нет причин, по которым он должен передавать свои зависимости другим модулям, поэтому зависимости должны быть установлены с помощью implementation здесь.

В примерах Google есть несколько примеров cookie-api и install-api, которые более четко продемонстрируйте использование конфигурации зависимостей как я объяснил выше.

person TWL    schedule 22.01.2018