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

我得到了下面的例外应用程序启动。

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'

这是我的应用程序级别构建

// 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
}

如何解决这个问题?

112700 次浏览

我也有同样的错误,我用 MultiDex 解决了它,就像这个链接上描述的: Https://developer.android.com/studio/build/multidex.html


有时仅仅启用 MultiDex 是不够的。

如果 主要的 DEX 文件中没有提供任何需要 在启动阶段的类,那么您的应用程序就会崩溃,出现错误 NoClassDefFoundErrorHttps://developer.android.com/studio/build/multidex#keep

在启动过程中需要 FirebaseInitProvider

因此必须手动指定主 DEX 文件中所需的 FirebaseInitProvider

Gradle 文件

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

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

com/google/firebase/provider/FirebaseInitProvider.class

添加项目根路径 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'

在 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"

在我的 YouTube 播放器项目中,我遇到了同样的问题... ... 下面的内容为我解决了这个问题:

  1. 将这段代码添加到 defaultConfing中的 build.gradle(模块: 应用程序) :

    defaultConfig {
    ....
    ....
    multiDexEnabled = true
    }
    
  2. Add this code into your build.gradle (module: app) inside dependencies:

    dependencies {
    compile 'com.android.support:multidex:1.0.1'
    .....
    .....
    }
    
  3. Open AndroidManifest.xml and within application:

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

    或者,如果你有 App 类,从 MultiDexApplication 扩展它,比如:

    public class MyApp extends MultiDexApplication {
    .....
    

And finally, I think you should have Android Support Repository downloaded, in the Extras in SDK Manager.

如果你在应用程序级别中使用 MultiDex,那么在应用程序类中将 扩大适用范围改为 扩展 MultiDexApplication。一定会成功的

首先将以下内容添加到 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>

就是这样,一定会成功的

我也面临着同样的问题,最终通过在一个机器人工作室中禁用 Instant Run解决了它。

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

更新:

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

只需在应用程序类中重写以下方法。

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


}
}

启用 multidex不是一个好的解决方案,因为 multidex在 android 中还有另一种用法

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

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

我认为这个问题的原因是当即时运行被启用时,Android Studio 不把像 firebase这样的库放到生成的 apk 中以减少项目构建时间,因为 firebase库和其他库如 maps其他人存在于 Play 服务中,并且 Play 服务安装在 Android 设备上,所以如果即时运行被启用,不需要把它们放到生成的 apk 中以使构建时间更快。

因此,当您解压缩 apk 并将其安装到另一个设备上时,您将看到这个异常

1: 转到 gradle,启用 multiDexEnable 并在依赖项中添加 multidex 库。

android {
...
defaultConfig {
multiDexEnabled true
...
}
}


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

2: 转到 Manifest 文件并编写 android: name = “ . MyApplication”(Class name (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>

正如你所写的 android: name =”。“我的应用程序”内部应用程序在清单文件。它会给你一个错误,因为你没有创建 MyApplication 类。创建 MyApplication 类通过“ application”类或者简单地点击.MyApplication,一个小红气球出现在语法的左边点击它,你会在菜单中看到(创建 MyApplication 类) ,点击它并包含下面的方法在这个类中。

    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]

希望对你有用。

我有同样的问题,解决了只需添加一段代码 ,如果你得到这个问题意味着你已经完成了所有的步骤,需要使用 Firebase。您只需要创建一个扩展 Application(公共类 Application _ CrashReport 扩展了 Application)的类,并在 主要档案中添加这个类,然后在该类中重写下面的方法

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

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

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

注意 :-< strong > 不要忘记遵循以上步骤

这是由于 MultiDex。

解决步骤:

  1. 在 gradle-> Dependency-> 中(编译‘ com.android.support: multidex: 1.0.1’) 将其添加到依赖项

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

  3. 去看看

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

为了避免这个限制,您必须为 multidex 配置应用程序

如果 您的 MinSdkVersion设置为 21或更高,所有您需要做的就是 在模块级 build.gradle 文件中将 multiDexEnable 设置为 true,如下所示 图示:

android {
defaultConfig {
...
minSdkVersion 21
multiDexEnabled true
}
...
}

否则 ,如果 minSdkVersion 设置为20或更低,则必须 使用 multidex 支持库如下:

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

android {
defaultConfig {
...
minSdkVersion 15
multiDexEnabled true
}
...
}


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

根据是否重写 Application 类,执行下列操作之一:

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

    <application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
  • 否则如果 重写 Application 类,将其更改为扩展 MultiDexApplication (如果可能) ,如下所示:

   public class MyApplication extends MultiDexApplication { ... }
  • 否则 可以重写 Application 类,但不可能更改基类,然后可以重写 方法并调用 MultiDex.install (this)以启用 多指数:

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

我也面临同样的问题后,尝试所有的解决方案,我发现下面的解决方案。

如果您已经应用了保护规则,那么在保护规则中添加以下一行

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

解决了我的问题。

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

这对于那些进来的人来说有点晚了,但是检查一下你们的保护规则!我在这上面浪费了很多时间。你的保护规则可能是把名字改成重要的消防文件。这实际上只是在生产和即时运行中证明了一个问题:)

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.**

这个问题发生在我使用 Android Gradle 插件3.4.0切换到 Android Studio 3.4时。它与 R8编译器一起工作。

Android Gradle 插件包含额外的预定义 ProGuard 规则文件,但是建议您使用 机器人优化。更多信息 给你

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'
}
}

我也面临着同样的问题,我通过修改 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'

如果您的 minsdkversion > 20,则需要使用最新的 Firebase Auth 版本,即。

实现‘ com.google.firebase: firebase-auth: 18.1.0’

如果你实际上不需要,就不需要设置 multi-dex。

我在使用 Firebase helper 的16.0.5时遇到了这个问题,但是当我更新到18.1.0时能够修复它。

如果你使用 Xamarin。表单,你可能想签出 没有找到类“ com.google.firebase.Provider. FirebaseInitProvider”吗?,因为这捕获了与谷歌 Firebase 启动时的索引错误问题(此时未解决)。

我已经恢复使用在短期内没有收缩,并计划使用 ProGuard,直到 R8更加稳定。

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

  1. 如果你支持 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
  1. 如果你不支持 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
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
  

//在应用程序级别的分级文件中添加上述代码

默认配置{

}