java.lang.NoClassDefFoundError:com.google.firebase.FirebaseOptions

时间:2016-05-24 18:27:15

标签: android google-app-engine firebase google-play-services google-cloud-platform

我在google开发者控制台上遇到了这个奇怪的错误。所以我使用谷歌云测试实验室来了解真正发生的事情。结果我的应用程序几乎在所有设备上都失败了

FATAL EXCEPTION: main
 Process: com.blackcurrantapps.iamin, PID: 16706
 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:1591)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1562)
    at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
    at android.app.ActivityThread.installProvider(ActivityThread.java:4871)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4466)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4406)
    at android.app.ActivityThread.access$1500(ActivityThread.java:139)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5102)
    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:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)

以下是测试的屏幕截图。 enter image description here

现在这是有趣的部分,我甚至根本不在我的应用中使用Firebase 。当我在整个应用程序中查找路径时,没有引用“Firebase”这个词。我虽然使用谷歌云服务,登录和谷歌应用程序引擎。

这是我的build.gradle文件:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig {
        applicationId "com.blackcurrantapps.iamin"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 11
        versionName "Fixed Check in Bug"
        multiDexEnabled = true
    }
    buildTypes {
        release {
            shrinkResources true
//            minifyEnabled true
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
}
repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    maven { url "https://oss.sonatype.org/content/groups/public/" }
    maven { url "https://jitpack.io" }
    maven { url 'https://maven.fabric.io/public' }
}

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

    compile('com.mikepenz:materialdrawer:4.5.8@aar') {
        transitive = true
    }

    compile 'com.mikepenz:google-material-typeface:1.2.0.1@aar' //Google Material Design Icons
    compile 'com.mikepenz:fontawesome-typeface:4.4.0.1@aar'

    compile('com.vincentbrison.openlibraries.android:dualcache:2.2.2@jar') {
        transitive = true;
    }

    compile project(':htmlDialog')
    compile('com.twitter.sdk.android:twitter:1.8.0@aar') {
        transitive = true;
    }
    compile 'com.android.support:palette-v7:23.4.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile 'com.google.android.gms:play-services-maps:9.0.0'
    compile 'com.google.android.gms:play-services-gcm:9.0.0'
    compile 'com.google.android.gms:play-services-identity:9.0.0'
    compile 'com.google.android.gms:play-services-base:9.0.0'
    compile 'com.google.android.gms:play-services-plus:9.0.0'
    compile 'com.google.android.gms:play-services-analytics:9.0.0'
    compile 'com.google.android.gms:play-services-location:9.0.0'
    compile 'com.android.support:cardview-v7:23.4.0'
    compile 'com.rengwuxian.materialedittext:library:2.1.3'
    compile 'com.twotoasters.jazzylistview:library:1.2.1'
    compile 'com.twotoasters.jazzylistview:library-recyclerview:1.2.1'
    compile 'com.pnikosis:materialish-progress:1.7'
    compile 'com.getbase:floatingactionbutton:1.10.1'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup.okhttp:okhttp:2.6.0'
    compile 'me.dm7.barcodescanner:zbar:1.8.3'
    compile 'net.glxn.qrgen:android:2.0'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.github.PhilJay:MPAndroidChart:v2.1.6'
    compile 'de.greenrobot:eventbus:2.4.0'
    compile 'com.android.support:support-v4:23.4.0'
    compile 'com.pavelsikun:material-seekbar-preference:0.12.1+'

    compile project(path: ':backend', configuration: 'android-endpoints')
}

有人可以帮助我吗?

12 个答案:

答案 0 :(得分:19)

感谢您发布问题Sanket。我是Firebase测试实验室(原云测试实验室)的PM。想告诉你,这是我们最终应该修复的错误。

您的应用似乎正在使用最新最好的Google Play服务。我们上周更新了我们的设备以使用它们,然后我们发现了一个让我们恢复到旧版本的错误。现在,我们在我们的设备上重新部署了最新的Play服务,因此重新运行测试应该可行。如果没有,请告诉我,我们会调查并修复它。

答案 1 :(得分:14)

我找到了一个适合我的解决方案。我正在导入整个谷歌播放服务9.0.1库。临时解决方法是仅导入应用程序实际需要的API。您可以获取API here的完整列表。

答案 2 :(得分:6)

根据我的情况:使用FCM和Google地图

//for FCM
compile 'com.google.firebase:firebase-messaging:9.4.0'
//for Map
compile 'com.google.android.gms:play-services:9.4.0'

我已修复: 删除

compile 'com.google.android.gms:play-services:9.4.0'

和使用

compile 'com.google.android.gms:play-services-maps:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'

工作正常。

答案 3 :(得分:4)

如果这可以帮助其他我用这个来解决这个问题,虽然这与Firebase无关,但它实际上解决了我的崩溃

  1. compile 'com.android.support:multidex:1.0.1'添加到a​​pp / build.gradle。

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

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

答案 4 :(得分:3)

您必须使用com.google.firebase:firebase-ads:9.0.2 AdMob 在Android依赖项上,

compile 'com.google.firebase:firebase-ads:9.0.2'

并删除您的

play-services (com.google.android.gms: play-services:9.0.2)

对我有用!

答案 5 :(得分:3)

您尝试按照代码段进行操作:

defaultConfig { 
    multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
}

public class Controller extends Application {

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

答案 6 :(得分:2)

只需将Google Play服务依赖关系降级为compile 'com.google.android.gms:play-services:8.3.0',问题就会解决。

答案 7 :(得分:2)

我希望现在还为时不晚。 Firebase造成了麻烦,因此我将其排除在外。 我刚刚在模块gradle上添加了这个:

 temp = A[ first ];   
 A[ first ] = A[ i ]; //this value should be set to red color
 A[ i ] = temp;  //this too

答案 8 :(得分:1)

原来我对MultiDex的使用是错误的,并导致此错误。 这应该在官方文档中提到过。

如何以正确的方式做到:

在Gradle.build(应用级别)

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

在清单中, 添加

<application
        android:name=".Global"
...

在Application类中,

public class Global extends MultiDexApplication {
...
}

答案 9 :(得分:1)

在Android 4.4中,解决方案与此类似(https://stackoverflow.com/a/38707231/3377472):

- 我有Google Play服务修订版33

1)配置build.gradle和依赖项

启用multidex支持并添加multidex库

   android {
        compileSdkVersion 23
        buildToolsVersion '23.0.3'
        defaultConfig {
            applicationId "packagename"
            minSdkVersion 14
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"

            //------- Enabling multidex support----------.
            multiDexEnabled true
        }

        dexOptions {
            javaMaxHeapSize "3g"//use 3Gb of ram to launch android 
        }

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


dependencies {

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

      // if you are using google maps
      compile 'com.google.android.gms:play-services-maps:9.2.0'
      compile 'com.google.android.gms:play-services-location:9.2.0'
}

2)编辑清单,并添加此android:name

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

3)申请类

- 我的应用程序类是:

import android.support.multidex.MultiDex;

public class Application extends AppCompatActivity {


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


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //this is the solution 
        MultiDex.install(this);

        setContentView(R.layout.layout_example);
        ----
        ----

答案 10 :(得分:0)

不确定这是否有帮助,但我使用Android sdk 19时遇到了同样的问题,这让我感到疯狂。我不使用Firebase(至少不是故意的) 我不知道为什么,但是当我设置&#34; minifyEnabled true&#34;时错误停止了。在gradle配置中。

我发现你的发布部分已经注释了你的内容。

答案 11 :(得分:0)

如果您使用的是Google Play服务,请确保添加特定服务。例如 使用地图时:

compile 'com.google.android.gms:play-services-maps:x.x.x

而不是

 compile 'com.google.android.gms:play-services:9.6.1'

这将减小代码的大小,编译不需要使用“multidex”功能。 如果你偶然已经包括

{
multiDexEnabled true
}

在您的代码中尝试删除它和不必要的库引用