Произошла ошибка в приложении com google android gms
Обновлено: 23.03.2023
Вы можете использовать объект GoogleApiClient ("Клиент API Google") для доступа к API Google, предоставляемым в библиотеке сервисов Google Play (например, к Google Sign-In, Games и Drive). Клиент Google API обеспечивает общую точку входа в службы Google Play и управляет сетевым подключением между устройством пользователя и каждой службой Google.
Однако новый интерфейс GoogleApi и его реализации проще в использовании и являются предпочтительным способом доступа к API сервисов Play. См. Доступ к Google API.
В этом руководстве показано, как вы можете:
<ул>Чтобы начать работу, сначала необходимо установить библиотеку сервисов Google Play (версия 15 или более поздняя) для Android SDK. Если вы еще этого не сделали, следуйте инструкциям в разделе Настройка SDK сервисов Google Play.
Начать автоматически управляемое соединение
После того как ваш проект будет связан с библиотекой сервисов Google Play, создайте экземпляр GoogleApiClient с помощью API GoogleApiClient.Builder в методе onCreate() вашей активности. Класс GoogleApiClient.Builder предоставляет методы, позволяющие указать API Google, которые вы хотите использовать, и желаемые области действия OAuth 2.0. Вот пример кода, который создает экземпляр GoogleApiClient, который подключается к службе Google Диска:
Вы можете добавить несколько API и несколько областей действия в один и тот же GoogleApiClient, добавив дополнительные вызовы к addApi() и addScope() .
Важно! Если вы добавляете Wearable API вместе с другими API в GoogleApiClient , вы можете столкнуться с ошибками подключения клиента на устройствах, на которых не установлено приложение Wear OS. Чтобы избежать ошибок подключения, вызовите метод addApiIfAvailable() и передайте API Wearable, чтобы ваш клиент мог корректно обрабатывать отсутствующий API. Дополнительную информацию см. в разделе Доступ к Wearable API.
Чтобы начать автоматически управляемое подключение, необходимо указать реализацию интерфейса OnConnectionFailedListener для получения неразрешимых ошибок подключения. Когда ваш автоматически управляемый экземпляр GoogleApiClient пытается подключиться к API Google, он автоматически отображает пользовательский интерфейс, чтобы попытаться исправить любые устранимые сбои подключения (например, если сервисы Google Play необходимо обновить). Если возникает ошибка, которую невозможно устранить, вы получите вызов onConnectionFailed() .
Вы также можете указать дополнительную реализацию интерфейса ConnectionCallbacks, если вашему приложению необходимо знать, когда автоматически управляемое соединение установлено или приостановлено. Например, если ваше приложение выполняет вызовы для записи данных в API Google, их следует вызывать только после вызова метода onConnected().
Вот пример действия, реализующего интерфейсы обратного вызова и добавляющего их в клиент API Google:
Ваш экземпляр GoogleApiClient автоматически подключится после того, как ваша активность вызовет onStart(), и отключится после вызова onStop() . Ваше приложение может сразу начать отправлять запросы на чтение к API Google после создания GoogleApiClient , не дожидаясь завершения подключения.
Общение с сервисами Google
После подключения ваш клиент может выполнять вызовы на чтение и запись, используя API-интерфейсы конкретной службы, для которых разрешено ваше приложение, как указано в API и областях, которые вы добавили в свой экземпляр GoogleApiClient.
Примечание. Прежде чем звонить в определенные службы Google, вам может потребоваться зарегистрировать свое приложение в консоли разработчика Google. Инструкции см. в соответствующем руководстве по началу работы для используемого вами API, например Google Диска или Google Sign-In.
Когда вы выполняете запрос на чтение или запись с помощью GoogleApiClient , клиент API возвращает объект PendingResult, представляющий запрос. Это происходит немедленно, до того, как запрос будет доставлен в службу Google, к которой обращается ваше приложение.
Например, вот запрос на чтение файла с Google Диска, который предоставляет объект PendingResult:
После того как ваше приложение получит объект PendingResult, ваше приложение может указать, будет ли запрос обрабатываться как асинхронный вызов или как синхронный вызов.
Совет. Ваше приложение может ставить в очередь запросы на чтение, даже если оно не подключено к сервисам Google Play. Например, ваше приложение может вызывать методы для чтения файла с Google Диска независимо от того, подключен ли еще ваш экземпляр GoogleApiClient. После установления соединения выполняются поставленные в очередь запросы на чтение. Запросы на запись вызывают ошибку, если ваше приложение вызывает методы записи сервисов Google Play, когда ваш клиент Google API не подключен.
Использование асинхронных вызовов
Чтобы сделать запрос асинхронным, вызовите setResultCallback() для PendingResult и предоставьте реализацию интерфейса ResultCallback. Например, вот запрос, выполняемый асинхронно:
Когда ваше приложение получает объект Result в обратном вызове onResult(), он доставляется как экземпляр соответствующего подкласса, как указано в используемом вами API, например DriveApi.MetadataBufferResult .
Использование синхронных вызовов
Если вы хотите, чтобы ваш код выполнялся в строго определенном порядке, возможно, потому, что результат одного вызова необходим в качестве аргумента для другого, вы можете сделать свой запрос синхронным, вызвав await() для PendingResult . Это блокирует поток и возвращает объект Result после завершения запроса. Этот объект доставляется как экземпляр соответствующего подкласса, как указано в используемом вами API, например DriveApi.MetadataBufferResult .
Поскольку вызов await() блокирует поток до получения результата, ваше приложение никогда не должно выполнять синхронные запросы к API Google в потоке пользовательского интерфейса. Ваше приложение может создать новый поток с помощью объекта AsyncTask и использовать этот поток для выполнения синхронного запроса.
В следующем примере показано, как сделать запрос файла на Google Диск как синхронный вызов:
Доступ к API носимых устройств
Wearable API предоставляет канал связи для приложений, работающих на портативных и носимых устройствах. API состоит из набора объектов данных, которые система может отправлять и синхронизировать, и прослушивателей, которые уведомляют ваши приложения о важных событиях с помощью уровня данных. Wearable API доступен на устройствах под управлением Android 4.3 (API уровня 18) или выше, если носимое устройство подключено и на нем установлено приложение-компаньон Wear OS.
Автономное использование Wearable API
Если ваше приложение использует Wearable API, но не использует другие API Google, вы можете добавить этот API, вызвав метод addApi(). В следующем примере показано, как добавить Wearable API в ваш экземпляр GoogleApiClient:
В ситуациях, когда API носимых устройств недоступен, запросы на подключение, включающие API носимых устройств, завершаются ошибкой с кодом ошибки API_UNAVAILABLE.
В следующем примере показано, как определить, доступен ли Wearable API:
Использование Wearable API с другими API Google
Если ваше приложение использует Wearable API в дополнение к другим API Google, вызовите метод addApiIfAvailable() и передайте Wearable API, чтобы проверить, доступен ли он. Вы можете использовать эту проверку, чтобы ваше приложение корректно обрабатывало случаи, когда API недоступен.
В следующем примере показано, как получить доступ к Wearable API вместе с Drive API:
В приведенном выше примере GoogleApiClient может успешно подключиться к Google Диску без подключения к Wearable API, если он недоступен. После подключения экземпляра GoogleApiClient убедитесь, что Wearable API доступен, прежде чем выполнять вызовы API:
Игнорирование сбоев подключения API
Если вы вызываете addApi(), а GoogleApiClient не может успешно подключиться к этому API, вся операция подключения для этого клиента завершается с ошибкой и вызывает обратный вызов onConnectionFailed().
Вы можете зарегистрировать игнорирование ошибки подключения API, используя addApiIfAvailable() . Если API, добавленный с помощью addApiIfAvailable(), не может подключиться из-за неисправимой ошибки (например, API_UNAVAILABLE для Wear), этот API удаляется из вашего GoogleApiClient, и клиент переходит к подключению к другим API. Однако, если какое-либо соединение API завершается с ошибкой, которая может быть устранена (например, намерение разрешения согласия OAuth), операция подключения клиента завершается сбоем. При использовании автоматически управляемого соединения GoogleApiClient попытается устранить такие ошибки, когда это возможно. При использовании подключения, управляемого вручную, ConnectionResult, содержащий намерение разрешения, доставляется в обратный вызов onConnectionFailed(). Сбои подключения API игнорируются только в том случае, если нет решения для сбоя и API был добавлен с помощью addApiIfAvailable() . Чтобы узнать, как реализовать обработку сбоев подключения вручную, см. раздел Обработка сбоев подключения.
Поскольку API-интерфейсы, добавленные с помощью addApiIfAvailable(), могут не всегда присутствовать в подключенном экземпляре GoogleApiClient, вам следует защищать вызовы этих API, добавляя проверку с помощью hasConnectedApi() . Чтобы узнать, почему не удалось подключиться к определенному API, когда вся операция подключения для клиента прошла успешно, вызовите getConnectionResult() и получите код ошибки из объекта ConnectionResult. Если ваш клиент вызывает API, когда он не подключен к клиенту, вызов завершается с ошибкой с кодом состояния API_NOT_AVAILABLE.
Если для API, который вы добавляете с помощью addApiIfAvailable(), требуется одна или несколько областей, добавьте эти области в качестве параметров в вызове метода addApiIfAvailable(), а не с помощью метода addScope().Области, добавленные с помощью этого подхода, могут не запрашиваться, если подключение API завершается сбоем до получения согласия OAuth, в то время как области, добавленные с помощью addScope(), запрашиваются всегда.
Подключения, управляемые вручную
Большая часть этого руководства показывает, как использовать метод enableAutoManage для инициирования автоматически управляемого соединения с автоматически устраняемыми ошибками. Почти во всех случаях это лучший и самый простой способ подключения к API Google из вашего приложения для Android. Однако в некоторых ситуациях вам может потребоваться использовать управляемое вручную подключение к API Google в своем приложении:
<ул>В этом разделе приведены примеры этих и других расширенных вариантов использования.
Начать управляемое вручную подключение
Чтобы инициировать управляемое вручную подключение к GoogleApiClient , необходимо указать реализацию интерфейсов обратного вызова, ConnectionCallbacks и OnConnectionFailedListener . Эти интерфейсы получают обратные вызовы в ответ на асинхронный метод connect(), когда подключение к службам Google Play выполняется успешно, не удается или оно приостанавливается.
При управлении подключением вручную вам потребуется вызывать методы connect() и disconnect() в нужные моменты жизненного цикла вашего приложения. В контексте активности лучше всего вызывать connect() в методе onStart() вашей активности и disconnect() в методе onStop() вашей активности. Методы connect() и разъединения() вызываются автоматически при использовании автоматически управляемого соединения.
Если вы используете GoogleApiClient для подключения к API, требующим аутентификации, таким как Google Диск или Google Play Игры, есть большая вероятность, что ваша первая попытка подключения завершится неудачно, и ваше приложение получит вызов onConnectionFailed() с ошибкой SIGN_IN_REQUIRED, потому что учетная запись пользователя не указана.
Обработка сбоев подключения
Когда ваше приложение получает вызов обратного вызова onConnectionFailed(), вы должны вызвать hasResolution() для предоставленного объекта ConnectionResult. Если он возвращает значение true, ваше приложение может запросить у пользователя немедленные действия по устранению ошибки, вызвав startResolutionForResult() для объекта ConnectionResult. В этой ситуации метод startResolutionForResult() ведет себя так же, как и startActivityForResult(), и запускает действие, соответствующее контексту, которое помогает пользователю устранить ошибку (например, действие, помогающее пользователю выбрать учетную запись).
Если hasResolution() возвращает значение false, ваше приложение должно вызвать GoogleApiAvailability.getErrorDialog() , передав этому методу код ошибки. Это возвращает диалоговое окно, предоставляемое службами Google Play, которое соответствует ошибке. Диалоговое окно может просто предоставить сообщение с объяснением ошибки или также может предоставить действие для запуска действия, которое может устранить ошибку (например, когда пользователю необходимо установить более новую версию сервисов Google Play).
Например, ваш метод обратного вызова onConnectionFailed() теперь должен выглядеть следующим образом:
После того, как пользователь завершит диалоговое окно, предоставленное startResolutionForResult(), или закроет сообщение, предоставленное GoogleApiAvailability.getErrorDialog(), ваша активность получит обратный вызов onActivityResult() с кодом результата RESULT_OK. Затем ваше приложение может снова вызвать connect(). Например:
В приведенном выше коде вы, вероятно, заметили логическое значение mResolvingError . Это отслеживает состояние приложения, пока пользователь устраняет ошибку, чтобы избежать повторных попыток устранить одну и ту же ошибку. Например, пока диалоговое окно выбора учетной записи отображается, чтобы помочь пользователю устранить ошибку SIGN_IN_REQUIRED, пользователь может повернуть экран. Это воссоздает вашу активность и вызывает повторный вызов метода onStart(), который затем снова вызывает connect(). Это приводит к еще одному вызову startResolutionForResult() , который создает другое диалоговое окно выбора учетной записи перед существующим.
Это логическое значение служит своему назначению только в том случае, если оно сохраняется во всех экземплярах действия. В следующем разделе объясняется, как сохранить состояние обработки ошибок вашего приложения, несмотря на другие действия пользователя или события, происходящие на устройстве.
Сохранение состояния при устранении ошибки
Чтобы избежать выполнения кода в onConnectionFailed() во время предыдущей попытки устранения ошибки, необходимо сохранить логическое значение, которое отслеживает, пытается ли ваше приложение уже устранить ошибку.
Как показано в приведенном выше примере кода, ваше приложение должно устанавливать для логического значения значение true каждый раз, когда оно вызывает startResolutionForResult() или отображает диалоговое окно из GoogleApiAvailability.getErrorDialog() . Затем, когда ваше приложение получит RESULT_OK в обратном вызове onActivityResult(), установите для логического значения значение false .
Чтобы отслеживать логическое значение при перезапуске действия (например, когда пользователь поворачивает экран), сохраните логическое значение в сохраненных данных экземпляра действия с помощью onSaveInstanceState() :
Затем восстановить сохраненное состояние во время onCreate():
Теперь вы готовы безопасно запустить свое приложение и вручную подключиться к сервисам Google Play.
Если не указано иное, содержимое этой страницы предоставляется по лицензии Creative Commons Attribution 4.0, а образцы кода — по лицензии Apache 2.0. Подробнее см. в Правилах сайта Google Developers. Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.
[x] Я прочитал руководство по установке
[x] Я знаю, что для iOS мне нужно установить модули, потому что я прочитал руководство по установке
[x] Я прочитал ссылку руководство и проверил, что все в порядке, как в руководстве по ручному связыванию
[x] Я знаю, что перед использованием tipi-stripe мне нужно установить параметры для моего приложения, как описано в руководстве по использованию
Проблема
ОШИБКА: не удалось решить: com.google.android.gms:play-services-wallet:16.1.0, несмотря на исключение и указание реализации 16.0.0
Окружающая среда
<ул>Ссылки на журналы и источники
Код для воспроизведения проблемы (хорошо иметь)
Проект синхронизации с файлами Gradle
Текст был успешно обновлен, но возникли следующие ошибки:
kyytiPetteri прокомментировал 18 июля 2019 г.
Та же проблема. Решение состояло в том, чтобы удалить глобальную версию playServicesVersion с корневого уровня build.gradle. Я думаю, что в какой-то момент библиотека пытается получить версию кошелька из глобальной игры, которую вы определили.
Корневой уровень build.gradle
Если он по-прежнему не работает, попробуйте добавить/отредактировать в том же файле следующее:
bericp1 прокомментировал 18 июля 2019 г.
Да, к сожалению, глядя на список версий, доступных для play-services-maps и play-services-wallet, единственные последние общие версии, которые у них есть, это 16.0.0 или 17.0.0, поэтому, если вы используете react-native 0.60 + ИЛИ вы вручную обновили свое приложение Android для использования AndroidX + Jetifier, вы можете исправить это, обновив googlePlayServicesVersion до "17.0.0" .
В противном случае всем нам придется использовать метод исключения для точной настройки версий сервисов Google Play, а не использовать глобальную версию googlePlayServicesVersion .
Добро пожаловать в центр разработчиков OneSignal New IA. Вы найдете исчерпывающие руководства и документацию, которые помогут вам начать работу с OneSignal New IA как можно быстрее, а также поддержку, если вы застряли. Давайте сразу!
Распространенные проблемы с настройкой Android и Amazon.
📘
Действия по устранению неполадок
<ул>Пожалуйста, выполните все шаги ниже. Если у вас по-прежнему возникают проблемы, обратитесь в службу поддержки, предоставив журнал, созданный в соответствии с приведенными ниже инструкциями.
Вернитесь к руководству по установке, которому вы следовали в разделе «Быстрый запуск Mobile Push», чтобы убедиться, что вы выполнили все шаги по добавлению OneSignal SDK в свое приложение.
Собственные Android SDK: убедитесь, что вы добавили код инициализации OneSignal в метод onCreate в своем классе Application.
Если у вас нет класса приложений, следуйте этому руководству.
После выполнения остальной части этого руководства по устранению неполадок используйте метод setLogLevel OneSignal SDK для Verbose, чтобы проверить полный лог-каталог с устройства при воспроизведении поведения.
Если вам нужна помощь в интерпретации журналов, отправьте их в виде файла .txt, чтобы наша служба поддержки и инженеры помогли вам.
<р>1. Выберите Android Monitor в нижней части окна.------ Если вы этого не видите, выберите его в меню «Вид» > «Инструменты Windows» > «Монитор Android».
2. Выберите свое устройство из выпадающего списка.
3. Убедитесь, что фильтры не заданы, а для типа задано значение Подробно. <р>4. Выделите все строки в журнале, нажав Control + A, а затем скопируйте их.
5. Вставьте их в файл .txt и отправьте в службу поддержки. Включите также шаги для воспроизведения проблемы. <р>1. adb logcat -b all -d -v время потока > onesignal_crash_logcat.txt
2. Отправьте файл onesignal_crash_logcat.txt в службу поддержки. Включите также шаги для воспроизведения проблемы.
Если в вашем пути нет adb, вам нужно будет полностью указать путь к adb в Android SDK. Он находится под \platform-tools\adb .
Если у вас не установлен Android SDK, вы можете просто загрузить SDK Platform Tools, который содержит исполняемый файл adb.
Ошибки ANR возникают, когда основной поток вашего приложения блокируется более 5 секунд. Вы можете увидеть, что это происходит вместе с:
Это просто показывает, как начался процесс приложения. Это может происходить чаще после добавления OneSignal из-за получения push-уведомлений о событиях, запускающих процесс вашего приложения.
Лучший способ разобраться в этих проблемах ANR — проверить полную трассировку стека всех потоков.
Начиная с верхней части каждой трассировки стека и спускаясь вниз, вы сможете понять, какое событие произошло последним и вызвало ANR.
Если вы видите OneSignal в реальной трассировке стека, убедитесь, что вы тестируете последнюю версию нашего SDK. Как только вы убедитесь, что это все еще происходит, отправьте полную трассировку стека всех потоков с ANR на [email protected], и мы поможем разобраться.
Полный журнал, скорее всего, будет состоять из нескольких тысяч строк. Журнал, который мы ищем, выглядит примерно так.
Проверьте, вызываете ли вы наш метод SDK: OneSignal.clearOneSignalNotifications(); или с помощью собственного метода Android NotificationManagerCompat.from(context).cancelAll(), описанного здесь.
В OneSignal Android Native SDK будут повторно отображаться уведомления, с которыми вы не взаимодействовали. Пользователь должен щелкнуть или закрыть уведомление, чтобы оно больше не отображалось.
<р>5. Добавьте следующее в файл .gradle. <р>6. Попробуйте перезапустить Android Studio, а затем перейдите в Инструменты > Android > Синхронизировать проект с файлами Gradle.Если вы получаете следующую ошибку Android Studio при создании проекта
Удалите следующую строку из файла .gradle.
Ошибка: (22, 0) Не удалось найти плагины метода() для аргументов [. ] для объекта типа com.android.build.gradle.AppExtension
Эта ошибка означает, что вы добавили плагины < . >в неправильное место в вашем приложении/build.gradle. Вы должны иметь следующие 3 строки в самом верху вашего файла. Дважды проверьте, что у вас нет повторяющихся строк.
Не удалось найти ошибки класса, ожидаемые в логарифме для устройств Android до версии 5.0. Это просто сообщает вам, что не может найти эти классы, поскольку ваше приложение загружается в память. Это не вызывает никаких проблем в вашем приложении, поскольку вызовы защищены проверками во время выполнения, поэтому они не будут создавать никаких проблем.
Ошибка: не удалось разрешить: com.android.support:customtabs:[26.0.0,26.2.0) ИЛИ com.android.support:support-v4:[26.0.0,26.2.0)
Для решения проблемы используйте один из приведенных ниже вариантов.
Добавьте новый репозиторий Google Maven в файл build.gradle
Также обновите compileSdkVersion до 26 в вашем приложении/build.gradle .
Если вы еще не готовы обновить свой проект до новой библиотеки поддержки и все еще используете targetSdkVersion 25 или более раннюю версию, вы можете следовать варианту A или C в инструкциях раздела.
Сегодня после обновления игровых сервисов в корневой папке я столкнулся со следующей проблемой. Я не знаю, как это исправить.
Кто-нибудь может помочь мне исправить это?
Эта ошибка очень раздражает. Я не знаю, где конфликт. Кстати, почему он показывает конфликт, хотя версии не взаимосвязаны.
Ошибка:
Библиотека com.google.android.gms:play-services-measurement-base запрашивается различными другими библиотеками по адресу [[15.0.0,15.0.0], [15.0.2,15.0.2 ]], но разрешается в 15.0.2. Отключите плагин и проверьте дерево зависимостей с помощью ./gradlew :app:dependencies.
скрипт build.gradle:
9 ответов 9
Одной из ваших зависимостей является другая версия com.google.android.gms .
Зависимости Firebase теперь имеют независимые версии, в отличие от предыдущих. Если у вас есть конфликты версий, вы можете обновить свой com.google.gms:google-services . и начните определять независимую версию.
Обновить com.google.gms:google-services
Перейдите на верхний уровень (проект) build.gradle и обновите com.google.gms:google-services до версии 4.1.0 или новее, если она доступна.
Обновить зависимости Firebase до последних версий
Версии зависимостей Firebase могут быть индивидуальными. Поэтому проверьте последние версии.
Способы решения:
<ол>Проблема
как узнать, какая зависимость использует com.google.android.gms?
Для Android используйте эту строку
или если у вас есть оболочка gradle:
где приложение – модуль вашего проекта.
Кроме того, если вы хотите проверить, является ли что-то зависимым от компиляции, testCompile и androidTestCompile, а также того, что его вызывает:
Gradle View — это подключаемый модуль Android Studio, который можно установить и отобразить иерархию зависимостей. Methods Count — это еще один плагин, он также показывает дерево зависимостей.
Счетчик методов был закрыт, поэтому он больше не может предоставлять новые или обновленные счетчики библиотечных методов.
Firebase Android SDK теперь имеют независимые номера версий, что позволяет более часто и гибко обновлять их.
Попробуйте, у меня работает.
Добавьте это в конец файла build.gradle
С сервисом Google Play. Версия 4.3.0
Для подключаемого модуля сервисов Google Play версии 4.3.0 и выше используйте googleServices.disableVersionCheck = true
@Akshay Я использую приведенный выше код, но получаю ОШИБКУ: плагин с идентификатором 'com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true' не найден. можешь подсказать, почему я иду
Я использую этот подход, но когда я хочу скомпилировать проект, он говорит, что символ RecyclerView не найден, а также это кажется странным подходом
Firebase Android SDK теперь имеют независимые номера версий, что позволяет более часто и гибко обновлять их.
Обновите версию плагина Google Play Gradle до последней версии, на данный момент 3.3.0.
и обновите библиотеки до последней версии.
Также, как сообщается, используйте версию не ниже 15.0.2:
Вам потребуется обновить версию последней зависимости до 15.0.2. Это решает проблему, из-за которой версия 3.3.0 плагина Google Services Gradle сообщает: библиотека com.google.android.gms:play-services-measurement-base запрашивается различными другими библиотеками по адресу [[15.0.0,15.0. 0], [15.0.2,15.0.2]], но разрешается в 15.0.2.
Что вы имеете в виду под использованием хотя бы версии 15.0.2?! Например, есть некоторые библиотеки, последняя версия которых — 15.0.1, например play-services-location:15.0.1.
Мне нужно было обновить com.google.android.gms:play-services-base до версии 15.0.1 вместо 15.0.0 .
Скорее всего, одна из ваших других зависимостей извлекает несколько версий ваших зависимостей com.google.firebase:* помимо ваших явных зависимостей
Возможно, вы сможете решить эту конкретную проблему, переместив свою зависимость firebase-messaging на 15.0.2.
Необходимо использовать компонент основной библиотеки вместе с другими компонентами Firebase:
Я потерял из-за этого 4 дня. Вот точные шаги, которые мне помогли:
удалить папку платформы
Это указывает на то, что не все зависимости Firebase имеют одинаковые номера версий для текущей сборки. Поэтому вам нужно обновлять каждый отдельно. Моя окончательная конфигурация выглядела так:
Надеюсь, вы увидите разницу и новое обновление в результате использования плагина службы Google 3.3.0
Читайте также: