Неудачная инициализация FirebaseApp в приложениях Android Instant

В настоящее время я работаю над существующим приложением для Android, чтобы создать версию приложений Instant.

Моя Android Studio теперь разделена на несколько модулей:

  • модуль бизнес-объекта (который является библиотекой)
  • базовый модуль
  • moduleA -feature- модуль
  • модуль приложения (который является модулем телефона / планшета)
  • мгновенный модуль (который является модулем мгновенных приложений)

Мой мгновенный модуль приложения можно скомпилировать и запустить на телефоне / планшете, но каждый раз он вылетает из-за проблем с Firebase. У меня есть следующее сообщение в logcat:

I / FirebaseInitProvider: инициализация FirebaseApp не удалась

Согласно документации, библиотека Firebase совместима с Instant Apps, но я почти уверен, что не перемещаю файл google-services.json в нужное место в моем проекте...

Вот что я сделал:

  1. Я определил следующие зависимости classpath в файле build.gradle проекта Android Studio: classpath 'com.google.gms:google-services:3.1.1'

  2. Я поместил файл google-services.json в базу моего модуля (потому что это запрашивается в документации)

Теперь, если я попытаюсь применить плагин (применить плагин: 'com.google.gms.google-services') в файле build.gradle базового модуля, я не смогу скомпилировать. У меня есть следующее сообщение:

Ошибка: не удалось выполнить задачу ': base: processGooglePlayProductionDebugFeatureGoogleServices'.

> Не найдено подходящего клиента для имени пакета 'com.mycompany.myapp.base'

Фактически, имя пакета, определенное в файле google-services.json, используется приложением (поскольку согласно документации базовая библиотека не может иметь того же имени пакета, что и установленное приложение для Android).

Я также попытался применить плагин в файлах build.gradle установленного приложения и в модуле мгновенных приложений, оставив файл google-services.json в базовом модуле. Приложение скомпилировано, но у меня есть журнал: "Неудачная инициализация FirebaseApp".

Поэтому я попытался переместить файл google-services.json в модуль мгновенного приложения, но у меня все еще есть журнал: "Инициализация FirebaseApp не удалась"

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

Я не могу найти пример реализации в Интернете. На самом деле репозиторий Sample Google не использует файл google-services.json.

Заранее спасибо за вашу помощь!

Редактировать: Здесь зависимости моих модулей:

Зависимости моего базового -feature- модуля:

  implementation project(':businessobject')
  feature project(':moduleA')
  application project(':app')

Зависимости моего модуля A -feature- модуля:

api project(':base')
api project(':businessobject')

Зависимости моего модуля приложения (который является модулем телефона / планшета):

implementation (project(':base'))
implementation (project(':businessobject'))
implementation (project(':moduleA'))

Зависимости моего мгновенного модуля (который является модулем мгновенных приложений):

implementation project(':base')
implementation project(':businessobject')
implementation project(':moduleA')

1 ответ

потому что согласно документации базовая библиотека не может иметь того же имени пакета, что и установленное приложение для Android.

Я думаю, что документация немного устарела. Каждый " функциональный " модуль должен использовать свое имя пакета, потому что это то, что используется для генерации имени класса R. На самом деле, нет причин, по которым нельзя использовать базовую функцию с тем же именем пакета, что и само приложение.

Вроде как google-services Плагин необходимо обновить, чтобы плагин "Feature" использовал идентификатор приложения, а не имя, указанное в AndroidManifest.xml (который будет перезаписан позже, чтобы совпадать с идентификатором приложения).

tl; dr --- изменяя имя пакета " base " на " com.mycompany.myapp ", все должно заработать.

Другие вопросы по тегам