web-dev-qa-db-fra.com

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

Je recevais cette erreur étrange sur ma console de développeur google. J'ai donc utilisé Google Cloud Test Lab pour voir ce qui se passait réellement. s'avère que mon application échoue sur presque tous les appareils

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)

Voici une capture d'écran du test .  enter image description here

Maintenant, voici la partie amusante, je n’utilise même pas Firebase dans mon application. Il n'y a aucune référence au mot "Firebase" quand je fais une recherche dans le chemin d'accès de toute mon application J'utilise cependant les services Google Cloud, la connexion et le moteur d'applications Google.

Voici mon fichier 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')
}

Est-ce que quelqu'un pourrait m'aider ?

32
Sanket Berde

Merci d'avoir posté la question Sanket. Je suis le PM de Firebase Test Lab (anciennement Cloud Test Lab). Je voulais vous faire savoir qu'il s'agit d'un bogue de notre côté qui devrait maintenant être corrigé.

Il semble que votre application utilise actuellement les derniers et meilleurs services Google Play. Nous avons mis à jour nos appareils pour les utiliser la semaine dernière, puis nous avons découvert un bogue qui nous faisait revenir à une version plus ancienne. À l'heure actuelle, nous avons redéployé les derniers services de lecture sur nos appareils. Vous devez donc réexécuter vos tests. Si non, s'il vous plaît faites le moi savoir et nous allons examiner et résoudre le problème.

18
Ahmed Mounir

J'ai trouvé une solution qui a fonctionné pour moi. J'importais toute la bibliothèque de Google Play Services 9.0.1. La solution temporaire consiste à importer uniquement les API dont votre application a réellement besoin. Vous pouvez obtenir la liste complète des API ici .

14
Swati Rawat

avec mon cas: utiliser FCM et Google map

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

J'ai corrigé: Supprimé 

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

et utilisé

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

Cela a bien fonctionné.

6
sonnv1368

Si cela peut aider les autres, je résous ce problème en utilisant ceci, bien que cela ne soit lié nulle part à Firebase mais en réalité, il résout mon crash.

  1. Ajoutez compile 'com.Android.support:multidex:1.0.1' à app/build.gradle.

  2. Ajoutez Android:name="Android.support.multidex.MultiDexApplication" à la balise d'application dans AndroidManifest.xml.

  3. Si vous utilisez une classe d'application personnalisée, ignorez le fichier AndroidManifest.xml et faites en sorte que votre classe d'application étende MultiDexApplication au lieu de l'application.

4
Devavrata

Vous devez utiliser le fichier com.google.firebase: firebase-ads: 9.0.2 AdMob Sur les dépendances Android,

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

et retirez votre

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

Ça marche pour moi!

3
MMe

Vous essayez de suivre l'extrait de code:

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

J'espère que ce n'est pas trop tard. Firebase posait problème, donc je l'ai exclu ..__ Je viens d'ajouter ceci dans le module gradle

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

Il suffit de déclasser la dépendance de Google Play-Service à compile 'com.google.Android.gms:play-services:8.3.0' et le problème sera résolu.

2
Amit Upadhyay

Dans Android 4.4, la solution était semblable à celle-ci ( https://stackoverflow.com/a/38707231/3377472 ):

-J'ai la révision des services Google Play 33

1) Configurez build.gradle et et les dépendances

Activation du support multidex et ajout de la bibliothèque de 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) Modifier le manifeste et ajouter cet Android: nom

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

3) classe d'application

-Ma classe d'application est:

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

Il s’est avéré que mon utilisation de MultiDex était erronée et que cela entraînait cette erreur ..__ Cela aurait dû être mentionné quelque part dans la documentation officielle.


Comment le faire de la bonne façon:

Dans Gradle.build (niveau de l'application)

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

Dans le manifeste, ajouter

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

Dans la classe d'application,

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

Si vous utilisez les services de Google Play, assurez-vous d’ajouter ce service. Par exemple, lorsque vous utilisez des cartes:

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

au lieu de 

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

Cela réduira la taille du code et la compilation ne nécessitera pas l'utilisation de la fonctionnalité "multidex" . 

{
multiDexEnabled true
}

dans votre code essayez de le supprimer et les références de bibliothèque inutiles 

0
Farina Ali

Je ne suis pas sûr que cela aide, mais j'avais le même problème avec Android sdk 19 et cela me rendait fou. Je n'utilise pas Firebase (du moins pas à dessein) Je ne suis pas sûr de savoir pourquoi, mais l'erreur a cessé lorsque j'ai défini "minifyEnabled true" dans la configuration. 

Je vois que vous avez commenté le vôtre dans votre section releases.

0
gregrobinz