Android Firebase DynamiteModule:加载模块描述符失败

Android Firebase DynamiteModule: Failed to load module descriptor

自从升级到最新版本的Firebase(9.0.0),在通过signInWithEmailAndPassword()认证用户时,无法解决以下两个错误。有谁知道发生了什么事吗?

    05-19 18:09:49.245 23550-23589/[PACKAGE] E/DynamiteModule: Failed to load 
    module descriptor class: Didn't find class 
    "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor" 
on path: DexPathList[[zip file 
"/data/app/[PACKAGE]-3/base.apk"],nativeLibraryDirectories=
[/data/app/[PACKAGE]-3/lib/x86, /vendor/lib, /system/lib]]

    05-19 18:09:49.252 23550-23550/[PACKAGE] E/FirebaseApp: 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)
      at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
      at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
      at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
      at android.content.ContentProvider.attachInfo(ContentProvider.java:1748)
      at android.content.ContentProvider.attachInfo(ContentProvider.java:1723)
      at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)

(...)    
Caused by: java.lang.IncompatibleClassChangeError: The method 'java.io.File android.support.v4.content.ContextCompat.getNoBackupFilesDir(android.content.Context)' was expected to be of type virtual but instead was found to be of type direct (declaration of 'com.google.firebase.iid.zzg' appears in /data/data/[PACKAGE]/files/instant-run/dex/slice-com.google.firebase-firebase-iid-9.0.0_95503dc60ed409569d1585da411de93e6c633bf7-classes.dex)
      at com.google.firebase.iid.zzg.zzeC(Unknown Source)
      at com.google.firebase.iid.zzg.<init>(Unknown Source)
      at com.google.firebase.iid.zzg.<init>(Unknown Source)
      at com.google.firebase.iid.zzd.zzb(Unknown Source)
      at com.google.firebase.iid.FirebaseInstanceId.getInstance(Unknown Source)
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.google.firebase.FirebaseApp.zza(Unknown Source) 
      at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) 
      at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) 
      at com.google.firebase.FirebaseApp.zzbu(Unknown Source)  
      at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source) 
      at android.content.ContentProvider.attachInfo(ContentProvider.java:1748) 
      at android.content.ContentProvider.attachInfo(ContentProvider.java:1723) 
      at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source) 

(...)

你能检查一下你的 Google Play 服务版本吗?

来自 Firebase 官方 website:

先决条件

  • 一台Android设备运行Google播放服务9.0.0或更高版本
  • 来自 Android SDK 管理器的 Google 播放服务 SDK
  • Android Studio 1.5 或更高版本
  • 一个 Android Studio 项目及其包名称。

我发现了问题。问题是 Guilherme 提到的第一个先决条件,但不是粗体部分。虽然您的依赖项还需要明确说明播放服务部分的 9.+,设备本身也需要安装 9.+。在我的 phone 上调试工作正常,更新我的模拟器的图像也解决了那里的问题。

这个对另一个问题的回答使我的应用进行了身份验证

阿方索·戈麦斯乔丹娜·玛纳斯

你好皮埃尔,

您必须在 Firebase 控制台中手动将现有的 Google OAuth 2.0 客户端 ID 列入白名单,然后才能将其与新的 Auth APIs 一起使用。

为此,请按照下列步骤操作:

  • 转到 Google API 控制台中的“凭据”部分。
  • Select 从您之前配置的项目右上角 Google 登录。
  • 转到 OAuth 2.0 客户端 ID 部分 如果您在 Android 或 iOS 应用程序上使用 Google 登录: 记下与为您的应用程序注册的所有条目对应的客户端 ID 字符串。
  • 将这些客户端 ID 输入到您的 Firebase 项目的配置中:
  • https://console.firebase.google.com
  • 转到 Firebase 控制台
  • 打开授权部分

    在 Sign-In methods 下,打开 Google 配置,并将您所有的客户端 ID 添加到来自外部项目的客户端 ID 白名单中。 如果您在 Web 应用程序上使用 Google 登录: 单击以打开您的 Web 客户端 ID 并记下客户端 ID 和密码。 将此客户端 ID 输入到您的 Firebase 项目的配置中: 在 https://console.firebase.google.com 转到 Firebase 控制台 打开授权部分 在登录方法下,打开 Google 配置,并在 Web SDK 配置部分下添加值。

如果这能解决您的问题,请告诉我。

我遇到了同样的问题,我发现我在 Firebase 控制台中犯了一个错误。

出现此问题的原因之一可能是您的 Firebase > Auth Dashboard 中的登录方法 可能已被禁用。

我刚刚启用它,它开始工作了。

您可以在添加 google 登录选项的同时结帐 在我们使用之前

GoogleSignInOptions gso = new GoogleSignInOptions
                    .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()
                    .build();

添加一行,如下代码所示

GoogleSignInOptions gso = new GoogleSignInOptions
                .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

添加后如果出现

之类的错误
An internal error has occured. [ Invalid Idp Response: id_token audience mismatch. ]

然后 Click 在这里获取适合我的解决方案。

如果您只是想使用 Firebase 身份验证而由于错误而来到这里:

Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"

转到 https://console.firebase.google.com/project/[your project]/authentication/providers 并启用您支持的身份验证提供程序。

我在注册用户时遇到了类似的问题,但最终找到了可行的解决方案。

卸载 HAXM 并重新安装它 解决了我的问题,它成功地为用户注册了 firebase auth :)

如果你什么都做了但什么都没有尝试更新你的 ARM EABI。

Google APIs ARM EABI v7a System Image

如果您的模拟器没有新的护目镜更新,您将始终收到身份验证错误。

执行此 post 中建议的所有操作,然后更新 ARM EABI 映像。 这解决了我的问题。

禁用 Instant 运行 对我有用。听起来很荒谬,我知道。我尝试清理项目。我尝试了 uninstalling/reinstalling 这个应用程序。最终成功的方法是禁用 Instant 运行。 感叹

我注销然后登录,它为我解决了这个问题。

可能是由于某种同步原因,FB 内容尚未实现。

如果有这个问题我会尽量拦截。但实际上,这是 Firebase 系统中的一个错误。这是一个由多个用例引起的错误,这本身就是另一个问题。

很遗憾 Firebase 初始化错误如此不简单,因此开发人员需要猜测出了什么问题。就我而言,我只导入了:

compile 'com.google.firebase:firebase-auth:10.2.0'

忘记导入核心:

compile 'com.google.firebase:firebase-core:10.2.0'

也许它会对某人有所帮助,祝你好运!

如果您没有在 Firebase 和 Google API 中注册 SHA1 指纹,也可能会发生这种情况。它们都必须注册两个指纹:来自调试密钥库和生产密钥库(当您在 Android Studio 上输入一些密码密钥时首次创建项目的 apk 时生成)。

Here 展示了如何从那里获取 SHA1。

或 运行 此命令在 C:\Users\<user name>\.android 目录上。

keytool -list -v -keystore debug.keystore

分享我的经验: 我遇到了同样的问题,我 googled 无处不在,但找不到确切的答案,即使我按照 Google Android 文档所做的一切。一天后突然,我的应用程序运行良好,同时我收到了来自 google 的电子邮件,说明 "Google APIs Explorer connected to your Google Account"。在我看来 google 需要时间来授予我们访问权限,请等待这封电子邮件,也许这个问题与错误代码无关。