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

Posted

技术标签:

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

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

FATAL EXCEPTION: main
 Process: com.blackcurrantapps.iamin, PID: 16706
 
    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')

谁能帮帮我?

【问题讨论】:

【参考方案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 服务,但我仍然遇到同样的错误。你能给我任何解决方案吗? 我已修复:您可以阅读我的回答,谢谢。 ***.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 没有任何联系,但它实际上解决了我的崩溃

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

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

    如果您使用的是自定义 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://***.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

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

【讨论】:

以上是关于java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions的主要内容,如果未能解决你的问题,请参考以下文章