2016-07-04 22 views
20

Ho riscontrato un problema con l'integrazione di Firebase. Prima di tutto, ho aggiunto le regole al livello principale build.gradle di file:Più file dex definiscono Lcom/google/firebase/FirebaseException

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 
} 

e il modulo di file Gradle:

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' 

durante la costruzione del progetto, ottengo l'errore:

Error:Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/firebase/FirebaseException;

La motivazione dell'errore è chiara, ma non ho compilato alcuna libreria due volte. Devo escludere la classe FirebaseException manualmente dal processo di compilazione? Se é cosi, come? Forse questo è un bug nelle dipendenze di Firebase?

Grazie.

risposta

3

Sembra che tu abbia raggiunto methods count limit. Prova a rimuovere le dipendenze da firebase e verifica il conteggio dei metodi per la tua app (ad esempio, con this gradle plugin (se non rimuovi queste dipendenze non sarai in grado di costruire il tuo progetto, quindi, utilizzare il plugin conteggio dei metodi). ..

Firebase is a HUGE library - 17k + metodi dipende da tonnellate di roba una cosa che si può fare è quello di verificare la lista delle dipendenze cliccando qui su "methodscount.com": enter image description here

Se si dispone già di alcuni dei questi nel tuo progetto puoi provare a escluderli:

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

Se ciò non è di aiuto, è possibile che si desideri configure multidex per il progetto.

13

Ho avuto questo problema con il modulo react-native-google-signin. Poiché le istruzioni su come modificare build.gradle spesso non sono aggiornate, incomplete o appena definite in più progetti non correlati, il progetto viene compilato solo dopo aver copiato le impostazioni dal progetto di esempio react-native-google-signin. Risulta importante l'ordine delle istruzioni e il comando exclude group. Il risultato finale si presentava così (in 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' 

La parte superiore build.gradle ha incluso un ulteriore gms percorso di classe come al solito:

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

Dopo queste modifiche costruiscono finito senza Multiple dex errori.

+3

avuto anche questo problema per la libreria reagire-native-push notifica –

+0

ha avuto anche questo a causa di 'reagire-native-maps' da AirBnB. – mxcl

+0

Grazie, ho creato un PR => https://github.com/joonhocho/react-native-google-sign-in/pull/25 – SaroVin

-2

Aggiungi questa codice all'interno android nei build.gradle

dexOptions { 
    preDexLibraries = false 
} 
+0

Errore: errore di conversione di bytecode in dex: Causa: java.lang.RuntimeException : La traduzione è stata interrotta – Khan

0

ho incontrato questo errore quando stavo usando Firebase-ui: 2.0.0. Sono riuscito a risolverlo per il downgrade a 'com.firebaseui:firebase-ui:1.2.0' e aggiunta la seguente riga nel livello di progetto build.gradle:

allprojects { 
    repositories { 
     jcenter() 

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

Firebase è una libreria enorme, quindi è necessario abilitare il supporto multidex nell'applicazione.

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 
} 
+0

Questo ha funzionato per me! – marchinram

1

In caso aiuta nessuno, sono stato colpito un problema simile, è stato causato dal plugin Gradle per i servizi di Google portando in una dipendenza che era in contrasto con Firebase.

Nel mio livello superiore build.gradle ho avuto, in buildscript:

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

che stava portando a (automaticamente) le dipendenze che sono stati in conflitto con, in build.gradle del mio app:

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

Un po 'di confusione dato che avevo solo una dipendenza compilata e mi stavo grattando la testa cosa poteva essere in conflitto.

Ho rimosso il plugin gradle di google-services e ho risolto il problema. Suppongo che potrei anche solo trovare la versione giusta :)

0

Grazie a this post, basta controllare e aggiornare le versioni delle dipendenze di Google per l'ultima versione.

I could fix my problem. The problem was that BaseGameUtils was still using/referencing an older version of play-services. Added the correct version, and it works now. Guess I will omit BaseGameUtils for my next project.

0

Sto usando reagire nativo-mappe e reagire-native-google-signin.

E, ho avuto più file DEX definiscono lcom/google/Firebase/FirebaseException

Bellow la mia soluzione.

aperta build.gradle (reagirà-native-mappe)

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 versione 10.2.4 è

Continuare build.gradle aperta (reagiscono-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:+" 
} 

Utilizza la versione 9.2.1 e questo è motivo.

Modifica alla versione 10.2.4 sarà

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

successiva, aperta build.gradle (app) e aggiungere uno nuovo

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

Ora avete.

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

comando Esegui cd android & gradlew clean & cd .. util nessun errore quindi eseguire react-native run-android. La speranza può aiutare.

0

Questo perché alcune delle tue librerie utilizzano versioni diverse di un'altra libreria.

Controlla l'ultima libreria aggiunta ed escludi. Per il mio progetto era "react-native-firestack".

compile(project(':react-native-firestack')){ 
    exclude group: "com.google.android.gms" // very important 
} 
Problemi correlati