web-dev-qa-db-ja.com

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

Googleのデベロッパーコンソールでこの奇妙なエラーが発生していました。そこで、Google Cloud Test Labを使用して、実際に何が起こっているのかを確認しました。ほとんどすべてのデバイスでアプリが失敗することがわかりました

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」という単語への参照がありません。ただし、Googleクラウドサービス、ログイン、Googleアプリエンジンは使用します。

ここに私の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')
}

誰でもここで私を助けることができますか?

32
Sanket Berde

質問Sanketを投稿していただきありがとうございます。私は、Firebase Test Lab(以前のCloud Test Lab)のPMです。これは修正すべきバグであるということをお知らせしたかったです。

アプリは現在、最新かつ最高のGoogle Play開発者サービスを使用しているようです。先週それらを使用するようにデバイスを更新した後、古いバージョンに戻すバグを発見しました。現在、デバイスに最新のPlayサービスを再デプロイしているので、テストを再実行する必要があります。そうでない場合は、お知らせください。調査して修正します。

19
Ahmed Mounir

私に合った解決策を見つけました。 Google Play Services 9.0.1ライブラリ全体をインポートしていました。一時的な回避策は、アプリが実際に必要とするAPIのみをインポートすることです。 APIの全リストを取得できます こちら

14
Swati Rawat

私の場合: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'

うまくいきました。

6
sonnv1368

これが他の人を助けることができる場合、これを使用してこれを解決しましたが、これは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クラスでApplicationではなくMultiDexApplicationを拡張します。

4
Devavrata

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)

わたしにはできる!

3
MMe

次のコードスニペットを試してみてください:

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);
  } 
}
3
Suresh Sarak

手遅れではないことを願っています。 Firebaseが問題を引き起こしていたため、除外しました。これをモジュールgradleに追加しました。

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

Google play-service依存関係をcompile 'com.google.Android.gms:play-services:8.3.0'と問題は解決されます。

2
Amit Upadhyay

Android 4.4では、解決策は次のように似ていました( https://stackoverflow.com/a/38707231/3377472 ):

-Google Play開発者サービスリビジョン33

1)build.gradleおよび依存関係を構成する

マルチデックスのサポートを有効にし、マルチデックスのライブラリを追加

   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);
        ----
        ----
1
Jorge T

MultiDexの使用が間違っていたことが判明し、このエラーが発生します。これはどこかの公式ドキュメントで本当に言及されているはずです。


正しい方法:

Gradle.build(アプリレベル)

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

マニフェストで、追加します

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

Applicationクラスでは、

public class Global extends MultiDexApplication {
...
}
1
Sanket Berde

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
}

あなたのコードでそれと不要なライブラリ参照を削除してみてください

0
Farina Ali

これが役立つかどうかはわかりませんが、Android sdk 19を使用して同じ問題が発生し、私を狂わせていました。 gradle configで「minifyEnabled true」を設定すると停止しました。

releasesセクションでコメントアウトされていることがわかります。

0
gregrobinz