【问题标题】:Firebase API initialization is failing on startupFirebase API 初始化在启动时失败
【发布时间】:2017-06-16 21:37:46
【问题描述】:

在应用启动时,控制台会打印以下内容:

Firebase API initialization failure.                                                        
java.lang.reflect.InvocationTargetException
   at java.lang.reflect.Method.invoke(Native Method)
   at com.google.firebase.FirebaseApp.zza(Unknown Source)
   at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
   //..
Caused by: java.lang.IllegalAccessError: Method 'void android.support.v4.content.ContextCompat.<init>()' is inaccessible to class 'com.google.firebase.iid.zzg'

Firebase 设置已按照说明完成:

  1. classpath 'com.google.gms:google-services:3.1.0' 已添加到顶层 build.gradle
  2. apply plugin: 'com.google.gms.google-services' 已添加到应用级别 build.gradle

运行./gradlew app:dependencies,可以看到如下输出:

com.google.firebase:firebase-core:9.0.0
     \--- com.google.firebase:firebase-analytics:9.0.0
          +--- com.google.android.gms:play-services-basement:9.0.0
          |    \--- com.android.support:support-v4:23.0.0 -> 25.3.1 (*)
          +--- com.google.firebase:firebase-common:9.0.0
          |    +--- com.google.android.gms:play-services-basement:9.0.0 (*)
          |    \--- com.google.android.gms:play-services-tasks:9.0.0
          |         \--- com.google.android.gms:play-services-basement:9.0.0 (*)
          \--- com.google.firebase:firebase-analytics-impl:9.0.0
               +--- com.google.android.gms:play-services-base:9.0.0
               |    +--- com.google.android.gms:play-services-basement:9.0.0 (*)
               |    +--- com.google.firebase:firebase-common:9.0.0 (*)
               |    \--- com.google.android.gms:play-services-tasks:9.0.0 (*)
               +--- com.google.android.gms:play-services-basement:9.0.0 (*)
               +--- com.google.firebase:firebase-iid:9.0.0
               |    +--- com.google.android.gms:play-services-basement:9.0.0 (*)
               |    \--- com.google.firebase:firebase-common:9.0.0 (*)
               \--- com.google.firebase:firebase-common:9.0.0 (*)

也许这是问题的一部分,也许不是,但我觉得奇怪的是,最新版本的插件包含旧版本的 Firebase (9.0.0) 而不是 11.0.1

此外,正如错误所述,问题是由以下原因引起的:

java.lang.IllegalAccessError: Method 'void android.support.v4.content.ContextCompat.<init>()'

这似乎表明 v4 支持库可能与该问题有关。

是什么导致了这些问题,解决方法是什么?

【问题讨论】:

  • 你确定你编译的是 Firebase 11.0.1 吗?
  • @cricket_007 什么? google-services 插件包含该库,从 ./gradlew app:dependencies 的输出中可以看出,它添加了 9.0.0 版本。
  • 插件将分析添加到您的类路径中。它不会将 Firebase 的任何其他部分编译到您的实际应用中
  • 请重新阅读问题。
  • 我确实阅读了这个问题。请重新阅读 Firebase 文档并注意 compile 'com.google.firebase:firebase-core:11.0.1'

标签: android firebase android-support-library firebase-analytics support-v4


【解决方案1】:

当我运行依赖项任务时,在应用程序模块 build.gradle 中没有将 Google Play 或 Firebase 库指定为依赖项,我在生成的输出顶部看到以下警告消息:

google-services plugin could not detect any version for com.google.android.gms or com.google.firebase, default version: 9.0.0 will be used.
please apply google-services plugin at the bottom of the build file.

向右滚动该消息以查看:default version: 9.0.0 will be used

必须 build.gradle 中的依赖项块之后应用插件的原因是它会扫描库列表以确定用于处理的版本。您的模块依赖项必须至少包含一个 Firebase 或 Google Play 库,以便插件可以选择版本号。

您在帖子的评论中指出不需要明确依赖核心。那是在某个地方的文档中吗?查看每个 Firebase API(Analytics、实时数据库、存储、崩溃报告等)的设置指南,每个 API 都包含一个将 API 库添加到依赖项的步骤。

【讨论】:

  • 如果您单击将 Android 应用程序添加到您的 Firebase 项目,它会启动一个模式,引导您完成这些步骤。最后一步指示开发人员将classpath 'com.google.gms:google-services:3.1.0' 包含在他们的顶级build.gradle 中,并将插件应用到他们的应用程序级别build.gradle 中。然后它提到默认情况下包含 Analytics,并且显示不需要包含任何其他依赖项。
  • 注意,将compile 'com.google.firebase:firebase-core:11.0.1' 显式添加到我的依赖项确实会提高版本,如./gradlew app:dependencies 的输出所示。然而,虽然这确实缓解了最初的错误,但现在出现了一个奇怪的问题,即我的演示者对 getView() 的调用(在本例中是一个 Activity)返回 null。删除 Firebase 解决了这个问题,我觉得这很奇怪。此问题不一定与此问题相关,因此我可能会提交另一个问题。
猜你喜欢
  • 2019-04-23
  • 1970-01-01
  • 2016-10-27
  • 2016-09-20
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多