【问题标题】:java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptionsjava.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
【发布时间】:2016-09-22 02:49:03
【问题描述】:

我在我的谷歌开发者控制台上遇到了这个奇怪的错误。所以我用谷歌云测试实验室来看看到底发生了什么。结果我的应用在几乎所有设备上都失败了

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)

这是测试的屏幕截图。

现在有趣的部分来了,我什至根本不在我的应用中使用 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')
}

谁能帮帮我?

【问题讨论】:

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


    【解决方案1】:

    感谢您发布问题 Sanket。我是 Firebase 测试实验室(前身为 Cloud Test Lab)的 PM。想让您知道这是我们这边的一个错误,现在应该修复。

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

    【讨论】:

    • 这不仅仅是谷歌云测试,实际用户设备也没有更新最新的谷歌播放服务(9.0)。我将我的应用程序恢复到(8.4.4)并且一切正常。以后您是否建议将 Google Play 服务版本保持在比最新版本低一级以避免此类问题?
    • 我在实际设备上运行应用程序时也遇到以下错误:找不到类 'com.google.firebase.FirebaseOptions',从方法 com.google.firebase.FirebaseApp 引用。 可以找不到类“com.google.firebase.FirebaseApp$zzb”,引用自方法 com.google.firebase.FirebaseApp.zzaJ 找不到类“com.google.firebase.FirebaseApiNotAvailableException”,引用自方法 com.google.firebase。 FirebaseApp.getToken 找不到类“com.google.firebase.FirebaseApp$zza”,引用自方法 com.google.firebase.FirebaseApp.zza
    • 我仍然在真实设备中遇到这个问题。除了更新手机的 google play 服务之外,还有其他解决方法吗?
    • 嗨,兄弟,我也更新了 google play 服务,但我仍然遇到同样的错误。你能给我任何解决方案吗?
    • 我已修复:您可以阅读我的回答,谢谢。 stackoverflow.com/questions/37360126/…
    【解决方案2】:

    我找到了适合我的解决方案。我正在导入整个 google play services 9.0.1 库。临时解决方法是仅导入您的应用实际需要的 API。您可以获取完整的 API 列表here

    【讨论】:

    • 谢谢...这很有帮助。
    • 我不认为这是一个解决方案。我做的完全一样。
    【解决方案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)
    

    它对我有用!

    【讨论】:

      【解决方案4】:

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

      我看到您的发布部分中已将您的评论删除。

      【讨论】:

      • 那是因为我还没有学会正确使用proguard。我的错。
      【解决方案5】:

      您可以尝试以下代码 sn-p:

      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】:

        只需将 google play-service 依赖降级为compile 'com.google.android.gms:play-services:8.3.0' 即可解决问题。

        【讨论】:

          【解决方案7】:

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

          configurations {
              all*.exclude group: 'com.google.firebase', module: 'firebase-common'
          }
          

          【讨论】:

          • 这到底是做什么的?
          • 基本上不包括firebase包。
          【解决方案8】:

          以我为例:使用 FCM 和谷歌地图

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

          效果很好。

          【讨论】:

            【解决方案9】:

            如果这可以帮助其他人,我使用它解决了这个问题,虽然这与 Firebase 没有任何联系,但它实际上解决了我的崩溃

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

            2. android:name="android.support.multidex.MultiDexApplication"添加到AndroidManifest.xml中的应用标签中。

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

            【讨论】:

            • 为我工作,即使没有第 1 步,我只是从 MultiDexApplication 类扩展了我的 Application cals 并且它工作(Kit-Kat 4.4)
            【解决方案10】:

            原来我对MultiDex 的使用是错误的,这导致了这个错误。 这确实应该在官方文档中的某个地方提到。


            如何正确地做:

            在 Gradle.build 中(应用级别)

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

            在清单中, 添加

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

            在应用程序类中,

            public class Global extends MultiDexApplication {
            ...
            }
            

            【讨论】:

              【解决方案11】:

              在 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) 编辑 Manifest,并添加这个 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);
                      ----
                      ----
              

              【讨论】:

              • 非常感谢
              • 在我的例子中,从 MultiDexApplication 类扩展 Application 类解决了这个问题。不需要调用 MultiDex.install(this);
              【解决方案12】:

              如果您使用的是 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
              }
              

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-09-18
                • 1970-01-01
                • 2016-10-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-07-22
                相关资源
                最近更新 更多