NoClassDefFoundError:com.google.firebase.FirebaseOptions

时间:2016-06-02 17:40:17

标签: android firebase firebase-realtime-database firebase-authentication

我继续使用NoClassDefFoundError在我正在使用的其他测试设备(4.4.2)上。但在我的测试设备(Android 5.1)上工作正常。

我尝试了用Google搜索过的解决方案,似乎没有任何效果。

我正在使用Firebase实时数据库。有人可以帮忙吗?

以下是错误日志:

06-03 01:36:29.607 2655-2655/mobapps.mypersonal.biz.grouptracker E/dalvikvm: Could not find class 'com.google.firebase.FirebaseOptions', referenced from method com.google.firebase.FirebaseApp.<init> 06-03 01:36:29.617 2655-2655/mobapps.mypersonal.biz.grouptracker E/dalvikvm: Could not find class 'com.google.firebase.FirebaseApp$zzb', referenced from method com.google.firebase.FirebaseApp.zzaJ 06-03 01:36:29.621 2655-2655/mobapps.mypersonal.biz.grouptracker E/dalvikvm: Could not find class 'com.google.firebase.FirebaseApiNotAvailableException', referenced from method com.google.firebase.FirebaseApp.getToken 06-03 01:36:29.629 2655-2655/mobapps.mypersonal.biz.grouptracker E/dalvikvm: Could not find class 'com.google.firebase.FirebaseApp$zza', referenced from method com.google.firebase.FirebaseApp.zza 06-03 01:36:29.639 2655-2655/mobapps.mypersonal.biz.grouptracker E/AndroidRuntime: FATAL EXCEPTION: main
    Process: mobapps.mypersonal.biz.grouptracker, PID: 2655
    java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
        at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
        at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1656)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1627)
        at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
        at android.app.ActivityThread.installProvider(ActivityThread.java:5079)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:4653)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4593)
        at android.app.ActivityThread.access$1500(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1402)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:5363)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
        at dalvik.system.NativeStart.main(Native Method)

4 个答案:

答案 0 :(得分:14)

这就解决了我的问题:

  1. 将编译'com.android.support:multidex:1.0.2'添加到 应用程序/的build.gradle。

  2. android:name =“android.support.multidex.MultiDexApplication”添加到 AndroidManifest.xml 中的应用程序代码中。

    如果您使用的是自定义Application类,请跳过 AndroidManifest.xml并使您的Application类扩展 MultiDexApplication 而不是Application。

答案 1 :(得分:2)

此错误报告的版本主要是修订版28,29,并且已在较新的Play服务版本中解决,因此如果您遇到此问题,请确保您的Android工作室中已安装Google Play服务的更新版本。因为旧版本有它。要更新Play服务版本..

请按照以下步骤操作:

  1. 转到Android SDK Manager
  2. 转到此处,您可以找到如下图所示,将其更新为最新版本并尝试运行项目。
  3. enter image description here

    如果您在应用程序中使用MultiDex ,那么请确保您已正确完成。

    在您 App level Build.Gradle 文件中使用此代码multiDexEnabled true

     defaultConfig {
            applicationId "com.reversebits.tapanhp.saffer"
            minSdkVersion 17
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
            multiDexEnabled true
        }
    

    dependencies内的同一文件中应用MultiDex依赖

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
    
        testCompile 'junit:junit:4.12'
    
        compile 'com.google.android.gms:play-services:9.4.0'
        compile 'com.android.support:multidex:1.0.1'
    }
    

    然后在 AndroidMenifest.xml 文件中,确保 Application标记的名称为MultiDexApplication

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

    注意

    如果您有自己的应用类并且在清单文件中使用它,那么您可以在Application类中初始化multidex ,如下所示,

    public class AppClass extends Application {
    
        //this will initialize multidex in your own Application class
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    
    }
    

答案 2 :(得分:1)

感谢上面的 TapanHP ,我快速为我工作了:

简答:

我在我的multiDexEnabled= true文件中设置了app/build.gradle,这在上面的Android 5.xx上运行良好,但任何带有4.xx(套件kat)的测试设备都会抛出一个严重错误“不幸的是,YourAppName已停止。

调试器显示:

Could not find class 'com.google.firebase.FirebaseOptions' ....

注意:我还有一个扩展Application的自定义类。

我的解决方案: 将以下代码添加到我的自定义应用程序类

import android.support.multidex.MultiDex;
public class YourCustomApplication extends Application {

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

...
} 

没有更严重的崩溃。

答案 3 :(得分:0)

我有同样的问题,我已经解决了这个问题:

a great post by Dan Lew

您必须将android:name=".app"替换为android:name="android.support.multidex.MultiDexApplication"