没有找到“com.google.firebase.provider.FirebaseInitProvider”类?

Posted

技术标签:

【中文标题】没有找到“com.google.firebase.provider.FirebaseInitProvider”类?【英文标题】:Didn't find class "com.google.firebase.provider.FirebaseInitProvider"? 【发布时间】:2017-02-11 00:57:57 【问题描述】:

我在应用启动时遇到以下异常。

java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:4993)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536)
at android.app.ActivityThread.access$1300(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.ActivityThread.installProvider(ActivityThread.java:4978)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536) 
at android.app.ActivityThread.access$1300(ActivityThread.java:149) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5214) 
at java.lang.reflect.Method.invokeNative(Native Method) 

这是应用级别的 build.gradle

apply plugin: 'com.android.application'
apply plugin: 'android-apt' 

android 
compileSdkVersion 24
buildToolsVersion "24.0.1"

defaultConfig 
    applicationId "com.vfirst.ifbagro"
    minSdkVersion 17
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true

buildTypes 
    release 
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    



dependencies 
compile fileTree(dir: 'libs', include: ['*.jar'])


compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.google.android.gms:play-services:9.4.0'
testCompile 'junit:junit:4.12'


apply plugin: 'com.google.gms.google-services'

这是我的应用级 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript 
repositories 
    jcenter()
    mavenCentral()

dependencies 
    classpath 'com.android.tools.build:gradle:2.2.0'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    classpath 'com.google.gms:google-services:3.0.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files



allprojects 
repositories 
    jcenter()



task clean(type: Delete) 
     delete rootProject.buildDir

如何解决这个问题?

【问题讨论】:

***.com/questions/37312103/…的可能重复 我已经尝试了所有这些答案。什么都解决不了 您的清单或 google-services.json 中似乎有问题,请确保它们正确无误。你能发布你的清单文件吗? 您是否进行了 MultiDex:android:name="android.support.multidex.MultiDexApplication" 所需的清单更改?如果 MultiDex 配置正确,您将在应用程序初始化期间看到 logcat 消息,如下所示:I/MultiDex: install done. 检查即时运行启用如果是,禁用即时运行。 【参考方案1】:

我遇到了同样的错误,我用 MultiDex 解决了它,就像这个链接中描述的那样: https://developer.android.com/studio/build/multidex.html


有时仅启用 MultiDex 是不够的。

如果 主要 DEX 文件中未提供启动期间所需的任何类,则您的应用会崩溃并出现错误 java.lang.NoClassDefFoundError时间>。 https://developer.android.com/studio/build/multidex#keep

FirebaseInitProvider 在启动时是必需的。

因此您必须在主 DEX 文件中按要求手动指定 FirebaseInitProvider

build.gradle 文件

android 
    buildTypes 
        release 
            multiDexKeepFile file('multidex-config.txt')
            ...
        
    

multidex-config.txt(与build.gradle文件在同一目录下)

com/google/firebase/provider/FirebaseInitProvider.class

【讨论】:

你太棒了 嘿这个异常:原因:java.lang.ClassNotFoundException:找不到类“com.google.firebase.provider.FirebaseInitProvider”与启用multidex无关,其实如果你看到问题 build.gradle multiDexEnabled is enabled! 不是这个错误来自multidex,他只是没有完成所有步骤,因为你看不到他的清单或他的主类。 这行得通。我在我的 gradle 文件中启用了 multidex,但缺少 Android Manifest 部分! 另外,请确保您的 Application 类扩展自 MultiDexApplication()。这在我的情况下丢失了。【参考方案2】:

我也遇到了同样的问题,最后通过在 android studio 中禁用 Instant Run 解决了这个问题。

设置→构建、执行、部署→即时运行并取消选中启用即时运行

更新:

最新的 Android Studio 3.5+ 中没有 Instant Run 选项。它应该只适用于旧版本。

【讨论】:

对我来说也一样。这是问题的原因——不是 multidex 或任何其他答案。 似乎这是 Android Studio 2.3 的问题。禁用即时运行也对我有用,但这不是理想的解决方案:( 我从另一家公司继承了两个项目。对于几个小项目,代码库、清单和 gradle 配置实际上是相同的。一个项目可以正常构建和运行,而另一个则不能。关闭即时运行,它们现在都运行。奇怪的。这是使用 Android Studio。 2.3. 我在使用 AS 3.1 和运行 API 26 的模拟器时遇到了同样的问题。在此之前我还没有遇到 API 19-25 的任何问题。禁用即时运行确实让我运行该应用程序。谢谢。 禁用 Instant Run 并不能解决我的这个问题。【参考方案3】:

在 build.gradle(Module:app) 文件中,将以下代码插入到 defaultConfig 中:

  defaultConfig 
        applicationId "com.***.****"
minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    

并插入到依赖项中:

implementation 'com.android.support:multidex:2.0.1'

然后将代码添加到清单中:

<application 
    android:name="android.support.multidex.MultiDexApplication"

【讨论】:

我正在尝试,如果可行,我会投票和评论【参考方案4】:

我在(YouTube 播放器项目)中遇到了同样的问题...以下解决了我的问题:

    将此代码添加到 defaultConfing 内的 build.gradle (module: app) 中:

    defaultConfig 
        ....
        ....
        multiDexEnabled = true
    
    

    将此代码添加到dependencies 内的build.gradle(模块:应用程序)中:

    dependencies 
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    
    

    打开AndroidManifest.xmlapplication内:

    <application
        android:name="android.support.multidex.MultiDexApplication"
        .....
        .....
    </application>
    

    或者如果您有 App 类,请从 MultiDexApplication 扩展它,例如:

    public class MyApp extends MultiDexApplication 
    .....
    

最后,我认为您应该在 SDK ManagerExtras 中下载 Android Support Repository

【讨论】:

我做了“MultiDex.install(this);”但它没有用。使用 MultiDexApplication 扩展应用程序类就成功了。【参考方案5】:

只需在您的应用程序类中覆盖以下方法。

public class YourApplication extends Application 

    @Override
    protected void attachBaseContext(Context context) 
        super.attachBaseContext(context);
        MultiDex.install(this);
    
    @Override
    public void onCreate() 
        super.onCreate();
        Realm.init(this); //initialize other plugins 

    

【讨论】:

加一是因为不喜欢 Manifest 中的 android:name 内容 最简单最好的答案 如果您使用的是自定义应用程序类,那么这就是答案。其他答案无法解决问题。【参考方案6】:

当您的应用及其引用的库超过 65,536 个方法时,您会遇到构建错误,表明您的应用已达到 Android 构建架构的限制

To avoid this limitation you have to configure your app for multidex

如果您的 minSdkVersion 设置为 21 或更高,您需要做的就是 在模块级 build.gradle 文件中将 multiDexEnabled 设置为 true,如 此处显示:

android 
    defaultConfig 
        ...
        minSdkVersion 21 
        multiDexEnabled true
    
    ...   

Else,如果您的 minSdkVersion 设置为 20 或更低,那么您必须 使用multidex支持库如下:

1.修改模块级别的build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:

android 
    defaultConfig 
        ...
        minSdkVersion 15 
        multiDexEnabled true
    
    ...
 

dependencies 
        implementation 'com.android.support:multidex:1.0.3'

2。根据您是否覆盖 Application 类,执行以下操作之一:

如果您不覆盖 Application 类,请编辑清单文件以在标记中设置 android:name,如下所示:

    <application
        android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
否则,如果您确实覆盖了 Application 类,请将其更改为扩展 MultiDexApplication(如果可能),如下所示:

   public class MyApplication extends MultiDexApplication  ... 
否则您确实覆盖了 Application 类,但无法更改基类,那么您可以改为覆盖 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用 多索引:

   public class MyApplication extends SomeOtherApplication 
     @Override
     protected void attachBaseContext(Context base) 
        super.attachBaseContext(base);
        MultiDex.install(this);
     
   

【讨论】:

为什么应用需要扩展MultiDexApplication? MultiDexApplication 是支持库类。它实现 Application 类并覆盖方法名称 attachBaseContext 来完成 MultiDex 注册的工作。如果重写 attachBaseContext 方法,则不需要扩展此类。 这在 2019 年使用 React Native 为我修复了它,但在 MainApplication.java 中缺少 2 个导入:import android.content.Context;import android.support.multidex.MultiDex; 您的回答帮助我让我的应用重新兼容。【参考方案7】:

启用multidex 不是一个好的解决方案,因为multidex在android 中有其他用法请参阅此答案what is multidex

正如@Shylendra Madda 所说,解决方案是禁用即时运行

设置→构建、执行、部署→即时运行并取消选中启用即时运行

我认为这个问题的原因是启用即时运行时,Android Studio 不会将 firebase 等库放入生成的 apk 以减少项目构建时间,因为 firebase 库和其他库如 maps others 存在于播放服务中,并且播放服务安装在 android 设备上,因此如果启用即时运行,则无需将它们放入生成的 apk 中以加快构建时间。

所以当你提取 apk 并将其安装在另一台设备上时,你会看到这个异常

【讨论】:

这是完美的解决方案 禁用 Instant Run 并不能解决我的问题。 在 Android Studio 3.5.1 中,Build、Execution、Deployment 部分没有 Instant Run 项。 @Vergiliy 他们将其替换为应用更改,请参阅发布博客文章android-developers.googleblog.com/2019/08/… 了解更多信息,文档developer.android.com/studio/run#apply-changes 了解有关应用更改的更多信息【参考方案8】:

在尝试了所有解决方案后,我也遇到了同样的问题,我找到了以下解决方案。

如果您已应用 proguard 规则,请在 ProGuard 规则中添加以下行

-keep class com.google.firebase.provider.FirebaseInitProvider

它解决了我的问题。

【讨论】:

@gunavant patel bro 请告诉我如何添加到 proguard 中 @gunavant patel 我认为这将解决我的问题...您能否将示例代码发布在此行的位置-keep class com.google.firebase.provider.FirebaseInitProvider @GowthamanM 首先检查您是否在 app/build.gradle 文件中启用了 proguard。如果启用,那么您会在该文件中的 app/proguard-rules.pro 中找到 proguard-rules 文件,添加上面的行。如果您没有启用 proguard,那么它对您没有帮助。 buildTypes release minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 如何启用请告诉我先生 如果你没有启用 proguard 那么问题就不同了。但我会告诉你如何启用它。在发布中添加“minifyEnabled true”,或者如果您想启用调试,则还添加调试类型。【参考方案9】:

1:进入gradle enable multiDexEnabled,在依赖项中添加multidex库。

android 
   ...
   defaultConfig 
      multiDexEnabled true
      ...
   


dependencies 
  // add dependency 
  implementation 'com.android.support:multidex:1.0.1'

2:进入Manifest文件并写android:name=".MyApplication"(类名(MyApplication)是可选的,你可以写任何你想要的)。

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        .
        .
        .
        .
        .
    </application>

3: 正如您在 Manifest 文件中编写的 android:name=".MyApplication" 内部应用程序。它会给你一个错误,因为你没有创建 MyApplication 类。 Create MyApplication Class 通过“application”类扩展它或者直接点击.MyApplication,一个小红气球出现在语法左侧点击它,你会在菜单中看到(create MyApplication class),点击它并Include下面的方法在那个类里面。

    public class MyApplication extends Application 

    @Override 
    protected void attachBaseContext(Context base) 
        super.attachBaseContext(base);
        MultiDex.install(this);
     

如果您想了解更多信息,请点击此链接:[https://developer.android.com/studio/build/multidex.html]

希望它对你有用。

【讨论】:

【参考方案10】:

首先在build.gradle(Module:app)中添加以下内容---->

defaultConfig
..
multiDexEnabled true
..


然后在同一个文件中添加以下内容

dependencies
...
compile 'com.android.support:multidex:1.0.1'
...


然后在AndroidManifest.xml中写如下

<application
    android:name="android.support.multidex.MultiDexApplication"
    .....
    .....
</application>

就是这样。一定会成功的

【讨论】:

【参考方案11】:

如果您在 App Gradle 中使用 MultiDex,请在您的应用程序类中将 extends application 更改为 extends MultiDexApplication。它将毫无疑问地工作

【讨论】:

【参考方案12】:

我遇到了同样的问题,只需添加一段代码即可解决,如果您遇到此问题,则表示您已经完成了使用 Firebase 所需的所有步骤。您只需要创建一个扩展应用程序的类 (public class Application_CrashReport extends Application ) 并将此类添加到 mainifest 文件 和该类中只需覆盖下面的方法

  @Override
protected void attachBaseContext(Context base) 
    super.attachBaseContext(base);

并添加 MultiDex.install(this);在那个方法中意味着

  @Override
protected void attachBaseContext(Context base) 
    super.attachBaseContext(base);
    MultiDex.install(this);

注意:- 不要忘记按照上述步骤操作

【讨论】:

【参考方案13】:

这对于进来的人来说有点晚了,但请检查您的 proguard 规则!我在这上面浪费了很多时间。您的 proguard 规则可能会将名称更改为重要的 firebase 文件。这实际上只证明了生产和即时运行中的问题:)

proguard-rules.pro

-keep class com.google.firebase.**  *; 
-keep class com.firebase.**  *; 
-keep class org.apache.**  *; 
-keepnames class com.fasterxml.jackson.**  *; 
-keepnames class javax.servlet.**  *; 
-keepnames class org.ietf.jgss.**  *; 
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**

【讨论】:

这成功了,启用 multidex 只会浪费时间!【参考方案14】:

如前所述,这是multidex 的问题:您应该将实现添加到您的build.gradleMainApplication.java。但是你添加什么真的取决于你是否支持AndroidX。这是解决此问题所需的:

    如果您支持 AndroidX

将这些代码行放入您的build.gradle (android/app/build.gradle):

defaultConfig 
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE

...
...
dependencies 
  ...
  implementation "androidx.multidex:multidex:2.0.1" // <-- THIS LINE
  ...

将这些行放入您的MainApplication.java (android/app/src/main/java/.../MainApplication.java):

package com.your.package;

import androidx.multidex.MultiDexApplication; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication  ...  // <-- THIS LINE
    如果您不支持 AndroidX

将这些代码行放入你的build.gradle (android/app/build.gradle):

defaultConfig 
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE

...
...
dependencies 
  ...
  implementation "com.android.support:multidex:1.0.3" // <-- THIS LINE
  ...

将这些行放入您的MainApplication.java (android/app/src/main/java/.../MainApplication.java):

package com.your.package;

import android.support.multidex.MultiDex;; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication  ...  // <-- THIS LINE

【讨论】:

【参考方案15】:

这是由于 MultiDex。

解决步骤:

    在gradle->dependencies->(编译'com.android.support:multidex:1.0.1') 在依赖项中添加这个

    在您的项目应用程序类中扩展 MultiDexApplication 这样(公共类 MyApplication 扩展 MultiDexApplication)

    运行并检查

【讨论】:

【参考方案16】:

您应该使用MultiDexApplication 而不是Application 扩展您的Application 类。

【讨论】:

【参考方案17】:

当我使用 Android Gradle 插件 3.4.0 切换到 Android Studio 3.4 时出现此问题。它适用于 R8 编译器。

Android Gradle 插件包含额外的预定义 ProGuard 规则文件,但建议您使用 proguard-android-optimize.txt。更多信息here。

buildTypes 
    release 
        minifyEnabled true
        proguardFiles getDefaultProguardFile(
          'proguard-android-optimize.txt'),
          // List additional ProGuard rules for the given build type here. By default,
          // Android Studio creates and includes an empty rules file for you (located
          // at the root directory of each module).
          'proguard-rules.pro'
    

【讨论】:

【参考方案18】:

我遇到了同样的问题,我通过将 fireabseStorage 版本更改为与 Firebase 数据库版本相同来解决了这个问题

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:17.0.0'

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:16.0.1'

【讨论】:

【参考方案19】:

如果你有> 20 minsdkversion,你需要使用最新的Firebase Auth版本,即

实现 'com.google.firebase:firebase-auth:18.1.0'

如果您实际上不需要它,则无需设置 multi-dex。

我在使用 Firebase 帮助程序中的 16.0.5 时遇到了这个问题,但在我更新到 18.1.0 后能够修复它。

【讨论】:

【参考方案20】:

如果您使用的是 Xamarin.Forms,您可能需要查看 Didn't find class "com.google.firebase.provider.FirebaseInitProvider"?,因为这会捕获 google firebase 启动时出现 dex 错误的问题(目前未解决)。

我在短期内恢复使用不收缩,并计划使用 ProGuard 直到 R8 更稳定。

【讨论】:

【参考方案21】:

添加项目根路径google-services.json

dependencies 
compile 'com.android.support:support-v4:25.0.1'
**compile 'com.google.firebase:firebase-ads:9.0.2'**
compile files('libs/StartAppInApp-3.5.0.jar')
compile 'com.android.support:multidex:1.0.1'
  
apply plugin: 'com.google.gms.google-services'

【讨论】:

考虑在你的答案中添加一些信息,这段代码对任何人都没有帮助

以上是关于没有找到“com.google.firebase.provider.FirebaseInitProvider”类?的主要内容,如果未能解决你的问题,请参考以下文章

未找到 ID 为“com.google.firebase.appdistribution”的插件

Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzbqo()Z;或其超类('com.google.firebase.FirebaseApp' 的声明

错误:找不到参数 [com.google.firebase:firebase-bom:29.0.1] 的方法平台()

Firebase 分析事件 app_clear_data

无法解决:com.google.firebase:firebase-ml-vision:24.1.3;无法解决:com.google.firebase:firebase-core:20.0.2

为什么新的Firebase Crashlytics(没有Fabric)在Android中不起作用?