Задача
У меня есть многомодульная установка с тремя модулями: app
, domain
, android-base
.
domain
реализует авторизацию и аутентификацию с помощью Firebase, поэтому ему нужна зависимость от Firebase. Модуль app
предоставляет файл google-services.json с идентификатором приложения и другими необходимыми настройками.
Когда я добавляю зависимость Firebase в свой модуль приложения, я могу легко ссылаться на символы Firebase. Когда я добавляю зависимость Firebase в другие модули, я не могу ссылаться на символы Firebase без жалобного компилятора.
Что я пробовал
Многие, многие потоки SO говорят вам включить путь к классам сервисов в build.gradle верхнего уровня, затем применить плагин внизу приложения build.gradle и затем включить зависимости Firebase в блок зависимостей. Я сделал все это. Я объявил репозиторий Google вверху, google()
- первый в блоке allprojects
build.gradle верхнего уровня repositories
. Не помогло.
Я вставил apply plugin: 'com.google.gms.google-services'
в качестве последней строки в моем domain
модуле, однако это привело меня к ошибке (?) в версиях Play Services от 4.2.0 - я столкнулся с исключением NullpointerException без любая полезная информация. Поэтому, как и многие другие, кто сталкивался с этой проблемой, я пытался понизить версию Google Play Services, а также gradle, изменив пути к классам в файле build.gradle верхнего уровня. Не помогло.
Я также испытал несколько комбинаций firebase-core и firebase-auth из отчаяния. Не помогло.
Я пробовал чистые сборки и аннулирование кешей. Не помогло.
Зависимость добавлена в путь к классам. Это просто не разрешается ни для какого другого модуля, кроме «приложения». Я что-то пропустил?
код
Домен build.gradle
dependencies { ...
implementation 'com.google.firebase:firebase-core:16.0.9'
implementation 'com.google.firebase:firebase-auth:17.0.0' ...
}
Приложение build.gradle
dependencies {
// no firebase dependency here
implementation project(path: ':domain')
}
apply plugin: 'com.google.gms.google-services'
Верхний уровень build.gradle
buildscript {
ext.kotlin_version = '1.3.31'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.0.2'
}
}
allprojects {
repositories {
google()
jcenter()
}
}