没有find类“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' 

这是我的应用程序级别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 } 

如何解决这个问题?

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

我也面临同样的问题,并最终通过在android studio中禁用Instant Run来解决它。

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

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

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

并插入到依赖关系:

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

然后添加代码到清单:

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

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

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

     defaultConfig { .... .... multiDexEnabled = true } 
  2. 将这段代码添加到您的build.gradle (module:app)内的dependencies

     dependencies { compile 'com.android.support:multidex:1.0.1' ..... ..... } 
  3. 打开AndroidManifest.xml并在application

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

最后,我想你应该在SDK Manager中的Extras中下载Android Support Repository

在应用程序类中重写下面的方法。

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

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

而已。 它一定会工作

启用multidex不是一个好的解决scheme,因为multidex在android中有另一个用法,请看这个答案什么是multidex

@Shylendra Madda说,解决scheme是禁用即时运行

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

我认为这个问题的原因是当即时运行被启用时,Android Studio不会将诸如firebase库放入生成的apk中,以减less项目构build时间,因为在播放服务中存在firebase库和其他库(如maps 等 )服务安装在Android设备上,所以如果即时运行启用不需要把它们放在生成的apk,使生成时间更快。

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

如果您在App Gradle中使用MultiDex,则更改扩展应用程序以在应用程序类中扩展MultiDexApplication 。 它会挑衅的工作

1:转到gradle enable multiDexEnabled并在依赖关系中添加multidex库。

 android { ... defaultConfig { multiDexEnabled true ... } } dependencies { // add dependency compile '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:正如你所写的android:name =“。MyApplication”在Manifest文件里面的应用程序。 它会给你一个错误,因为你没有创buildMyApplication类。 创buildMyApplication类通过“应用程序”类来扩展它,或者只需点击.MyApplication,在语法左侧出现一个小红色的气球点击它,你会在菜单中看到(创buildMyApplication类),点击它并包含下面的方法里面的类。

  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%5D

希望它适合你。

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