Указание зависимостей с помощью ключевого слова compile устарело.Новое ключевое слово для использования - «реализация».(См. этот вопрос SO для примера объяснения .) Разница между «compile» и «реализацией» в том, что касается вашего случая, заключается в том, что «compile» распространяет зависимость на все подключенные модули, в то время как «реализация "является одноуровневой.Итак, если у вас есть
root
module A
module B
и модуль B имеет вычленение, введенное с помощью «compile», тогда root имеет доступ к этой зависимости.Но если вы теперь измените B, чтобы ввести зависимость с помощью «реализации», вам все равно нужно будет добавить зависимость в build.gradle корневого проекта.
Почему это важно?Потому что дочерний модуль не может знать, кто его родитель.Таким образом, хотя A и B видят зависимости, которые вы привели в root, они на самом деле не должны - видеть эти зависимости - это причуда того, как работает Studio.По этой же причине ответ на вопрос «Могу ли я добавить еще одну зависимость от ProjectA для root»: «Нет, вам не повезло, это создаст круговую зависимость, и это не разрешено».
я бы попробовал следующие зависимости:
И в модуле A, и в модуле B:
dependencies {
implementation 'com.google.guava:guava:23.0'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
Затем в модуле B вы делаете:
implementation project(':projectA')
Затем в корне, вы зависите от A и B.