web-dev-qa-db-fra.com

Plusieurs fichiers dex définissent Lcom/google/firebase/FirebaseException

J'ai rencontré un problème avec l'intégration de Firebase. Tout d'abord, j'ai ajouté des règles au fichier build.gradle au niveau racine:

buildscript {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.1.2'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Et le module Gradle file:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 24
    buildToolsVersion "24"

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 2
        versionName "0.9"
    }
    buildTypes {
       ///
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.google.firebase:firebase-core:9.0.2'
    compile 'com.google.firebase:firebase-crash:9.0.2'
}

apply plugin: 'com.google.gms.google-services'

Lors de la construction du projet, j'obtiens l'erreur:

Erreur: Erreur lors de la conversion du bytecode en dex: Cause: com.Android.dex.DexException: plusieurs fichiers dex définissent Lcom/google/firebase/FirebaseException;

La raison de l'erreur est claire, mais je n'ai compilé aucune bibliothèque deux fois. Devrais-je exclure la classe FirebaseException du processus de construction manuellement? Si c'est le cas, comment? Peut-être est-ce un bug dans les dépendances de Firebase?

Merci.

22
Mark Korzhov

J'ai eu ce problème avec le module react-native-google-signin. Comme les instructions pour modifier build.gradle ne sont souvent pas à jour, incomplètes ou simplement définies dans plusieurs projets non liés, le projet est compilé uniquement après avoir copié les paramètres du projet d'exemple react-native-google-signin. Il s'avère que l'ordre des instructions est important, ainsi que la commande exclude group. Le résultat final ressemblait à ceci (en app/build.gradle):

dependencies {
    ...
    compile 'com.google.Android.gms:play-services-auth:9.2.1'
    compile(project(":react-native-google-signin")) {
        exclude group: "com.google.Android.gms"
    }   
}

task copyDownloadableDepsToLibs(type: Copy) {
   from configurations.compile
   into 'libs'
}

apply plugin: 'com.google.gms.google-services'

Le build.gradle supérieur comprenait un classpath gms supplémentaire comme d'habitude:

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.2.2'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

Une fois ces modifications terminées, la génération s'est terminée sans aucune erreur Multiple dex.

13
mp31415

FireBase est une énorme bibliothèque, vous devez donc activer le support multidex dans votre application.

dependencies {
    compile ('com.google.firebase:firebase-core:9.0.2') {
        exclude module: 'play-services-base'
        exclude module: 'support-v4'
        exclude module: 'support-annotations'
    }
    compile 'com.Android.support:multidex:1.0.1'
}

defaultConfig {
        // Enabling multidex support.
        multiDexEnabled true
}
4
Kasun Wanniarachchi

On dirait que vous avez atteint nombre maximal de méthodes . Essayez de supprimer les dépendances firebase et de vérifier le nombre de méthodes de contrôle pour votre application (par exemple, avec ce plugin Gradle) utiliser le plugin count count).

Firebase est une bibliothèque ÉNORME - 17k + méthodes. Cela dépend de tonnes de choses. Une chose à faire est de vérifier la liste des dépendances en cliquant sur le bouton "methodscount.com": enter image description here

Si vous en avez déjà dans votre projet, vous pouvez essayer de les exclure:

compile ('com.google.firebase:firebase-core:9.0.2') {
    exclude module: 'play-services-base'
    exclude module: 'support-v4'
    exclude module: 'support-annotations'
}

Si cela ne vous aide pas, vous voudrez peut-être configurer multidex _ pour votre projet.

3
Denis Kniazhev

J'utilise réact-native-maps et réag-native-google-signin.

Et j’ai eu Plusieurs fichiers dex définissent Lcom/google/firebase/FirebaseException

Ci-dessous ma solution.

Ouvrez build.gradle (react-native-maps)

dependencies {
     provided "com.facebook.react:react-native:+"
     compile "com.google.Android.gms:play-services-base:10.2.4"
     compile "com.google.Android.gms:play-services-maps:10.2.4"
}

La version est 10.2.4

Continuer à ouvrir build.gradle (react-native-google-signin)

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile "com.Android.support:appcompat-v7:23.0.1"
    compile 'com.google.Android.gms:play-services-auth:9.2.1' <- change here
    compile "com.facebook.react:react-native:+"
}

Il utilise la version 9.2.1, et c'est la raison. 

Le changer pour la version 10.2.4 sera 

compile 'com.google.Android.gms:play-services-auth:10.2.4'

Ensuite, ouvrez build.gradle (app) et ajoutez-en un nouveau. 

compile 'com.google.Android.gms:play-services-auth:10.2.4'

Maintenant vous avez.

compile 'com.google.Android.gms:play-services-auth:10.2.4'
compile(project(":react-native-google-signin")){
    exclude group: "com.google.Android.gms" 
}

Exécutez la commande cd Android & gradlew clean & cd .. util sans erreur puis exécutez react-native run-Android. Hope peut vous aider.

1
Tuan Nguyen

Au cas où cela aiderait quelqu'un, je rencontrais un problème similaire, il était causé par le plug-in Gradle pour les services Google, générant une dépendance en conflit avec Firebase.

Dans mon build.gradle de niveau supérieur, j'avais, dans le script de construction:

classpath 'com.google.gms:google-services:3.0.0'

Ce qui apportait (automatiquement) des dépendances en conflit dans le build.gradle de mon application:

compile 'com.firebaseui:firebase-ui-auth:2.2.0'

Un peu déroutant car je n'avais qu'une dépendance à la compilation et que je me gratifiais la tête de ce qui pourrait être un amalgame.

J'ai enlevé le plugin de google-services gradle et le problème a été résolu. Je suppose que je pourrais aussi trouver la bonne version :)

1
zedix

En effet, certaines de vos bibliothèques utilisent des versions différentes des autres bibliothèques.

Vérifiez votre dernière bibliothèque ajoutée et excluez .

compile(project(':react-native-firestack')){
     exclude group: "com.google.Android.gms" // very important
}
0
MultiGameguard

J'ai rencontré cette erreur lorsque j'utilisais firebase-ui: 2.0.0. J'ai réussi à le résoudre en rétrogradant à 'com.firebaseui:firebase-ui:1.2.0' et j'ai ajouté la ligne suivante dans le niveau de construction build.gradle:

allprojects {
    repositories {
        jcenter()

        // Add the following
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
}
0
Darush

Merci à this post , il suffit de vérifier et de mettre à niveau vos versions de dépendances Google vers la dernière version.

Je pourrais résoudre mon problème. Le problème était que BaseGameUtils était toujours utiliser/référencer une ancienne version de play-services. Ajout du correct version, et cela fonctionne maintenant. Je suppose que je vais omettre BaseGameUtils pour mon prochain projet.

0
Pablo Cegarra