У меня есть многомодульный Android-проект с несколькими вкусами, модули следующие:
core
модуль, который представляет собой библиотеку Android, в которой хранятся обычные вещи, в том числе библиотечные зависимости. *Модуль 1005 * authentication
, который, как следует из названия, является модулем, который содержит множество действий пользовательского интерфейса и отвечает за аутентификацию пользователей.Это также модуль с активностью запуска. user
модуль, который является еще одним модулем библиотеки Android.Он отвечает за обработку пользовательского интерфейса профиля пользователя, пользовательских данных, а также базы данных Firebase.Но он также должен иметь дело с аутентификацией Firebase, чтобы получить Uid, поскольку он используется в качестве ключа в базе данных. - Другие модули, которые сейчас не имеют отношения к делу
Модуль core
делаетничего в отношении Firebase, кроме как просто включить его в качестве зависимости для других модулей.Так что у меня есть это в моем проекте build.gradle
:
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
classpath 'com.google.gms:google-services:4.1.0'
}
, и у меня также это есть в моем ядре build.gradle
:
apply plugin: 'com.android.library'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
otherstuff
}
otherStuff
}
dependencies {
otherStuff
api 'com.google.android.gms:play-services-base:16.1.0'
api 'com.google.firebase:firebase-core:16.0.6'
api 'com.google.firebase:firebase-auth:16.1.0'
api 'com.google.firebase:firebase-database:16.0.6'
api 'com.google.firebase:firebase-storage:16.0.5'
api 'com.hbb20:ccp:2.2.3'
api 'com.google.android.libraries.places:places:1.0.0'
}
Модуль user
ничего не делает, кроме импорта библиотеки core
и немедленного использования аутентификации.Итак, у моего пользователя build.gradle
есть следующее:
dependencies {
otherStuff
implementation project(':core')
}
, а затем я продолжаю использовать его в своих классах следующим образом:
FirebaseAuth auth = FirebaseAuth.getInstance();
boolean isLoggedIn()
{
assert(auth != null);
return (auth.getCurrentUser() != null);
}
void uploadUserImpl()
{
assert(isLoggedIn());
db.getReference("users").child(auth.getCurrentUser().getUid()).setValue(this);
}
etc
Модуль authentication
- это тот, который определяет имя приложения, активность средства запуска и т. Д. Так что, по моему мнению, по крайней мере, это также тот, который должен иметь файл google-services.json
.Так что он находится в папке authentication
.
Он включает в себя библиотеки core
и user
, поэтому в моей аутентификации build.gradle
у меня есть следующее:
dependencies {
otherStuff
implementation project(':core')
implementation project(':user')
}
Он также продолжает использовать проверку подлинности Firebase для входа в систему и регистрации пользователей.
Теперь с проблемой:
При попытке построить проект я получаю следующую ошибку:
File google-services.json is missing. The Google Services Plugin cannot function without it.
Searched Location:
/work/mewais/CompanyName/ProjectName/core/src/FlavorName/debug/google-services.json
/work/mewais/CompanyName/ProjectName/core/google-services.json
и если я пытаюсь скопировать google-services.json
в core
, я получаю следующую ошибку:
No matching client found for package name 'com.companyname.projectname.core'
в файле google-services.json
определено имя приложениявнутри него:
"package_name": "com.companyname.projectname.appname"
, который, очевидно, ожидает имя приложения, а не core
.
Так как включить Firebase в этот параметр?Я хочу сохранить зависимости firebase, определенные внутри core
, потому что несколько модулей будут использовать его.В то же время, authentication
- это тот, который на самом деле определяет appname
, а также тот, у которого есть активность запуска, в которой я начинаю использовать Firebase.Я также ожидаю, что user
и любые другие модули смогут использовать Firebase после этого.Мне не имеет смысла регистрировать все модули в Firebase (даже не уверен, возможно ли это, поскольку Firebase ожидает приложение, а не библиотеку ?!).Так есть ли способ исправить эту проблему?