没有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播放器项目)中遇到了同样的问题…以下问题解决了我的问题:
-
将此代码添加到
defaultConfing
build.gradle
(module:app)中:defaultConfig { .... .... multiDexEnabled = true }
-
将这段代码添加到您的
build.gradle
(module:app)内的dependencies
:dependencies { compile 'com.android.support:multidex:1.0.1' ..... ..... }
-
打开
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'