2016-07-04 26 views
20

Wystąpił problem z integracją Firebase. Przede wszystkim dodałem reguły do ​​głównego poziomu build.gradle plik:Wiele plików dex definiuje 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 
} 

i moduł Gradle plik:

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' 

podczas kompilacji projektu, pojawia się błąd:

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

Przyczyna błędu jest jasna, ale nie skompilowałem żadnej biblioteki dwukrotnie. Czy powinienem ręcznie wykluczyć klasę FirebaseException z procesu kompilacji? Jeśli tak to jak? Być może jest to błąd w zależności od Firebase?

Dzięki.

Odpowiedz

3

Wygląda na to, że osiągnąłeś methods count limit. Postaraj się usunąć zależności firebase i sprawdź liczbę metod dla twojej aplikacji (na przykład z this gradle plugin (jeśli nie usuniesz tych zależności, nie będziesz w stanie zbudować swojego projektu w ogóle, a zatem użyj wtyczki metod method). ..

Firebase is a HUGE library - 17K + metody zależy to od tony rzeczy Jedną rzeczą, jaką można zrobić, to sprawdzić listę Zależności klikając ten przycisk na „methodscount.com”: enter image description here

Jeśli masz już niektóre te w projekcie możesz spróbować wykluczyć:

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

Jeśli to nie pomoże, możesz chcieć configure multidex dla swojego projektu.

13

Miałem ten problem z modułem react-native-google-signin. Ponieważ instrukcje modyfikowania build.gradle są często nieaktualne, niekompletne lub po prostu zdefiniowane w wielu niepowiązanych projektach, projekt jest kompilowany dopiero po skopiowaniu ustawień z przykładowego projektu . Okazuje się, że kolejność instrukcji jest ważna, a także polecenie exclude group. Wynik końcowy wyglądał następująco (w 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' 

Górny build.gradle zawarte dodatkowe gms ścieżki klasy jak zwykle:

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

Po zakończeniu tych zmian budować bez Multiple dex błędów.

+3

Również ten problem zareagować-native push-powiadomień biblioteki –

+0

Również tego powodu 'reagować-native maps' z Airbnb. – mxcl

+0

Dzięki, utworzyłem błąd PR => https://github.com/joonhocho/react-native-google-sign-in/pull/25 – SaroVin

-2

proszę dodać ten kod wewnątrz androida w build.gradle

dexOptions { 
    preDexLibraries = false 
} 
+0

: Błąd podczas konwersji kodu bajtowego na dex: Przyczyna: java.lang.RuntimeException : Tłumaczenie zostało przerwane – Khan

0

natknąłem się ten błąd, gdy używałem Firebase-ui: 2.0.0. Udało mi się go rozwiązać przez obniżenie do 'com.firebaseui:firebase-ui:1.2.0' i dodaje następującą linię w projekcie build.gradle Level:

allprojects { 
    repositories { 
     jcenter() 

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

Firebase jest ogromna biblioteka, więc trzeba włączyć multidex wsparcie w swojej aplikacji.

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

To działało dla mnie! – marchinram

1

W przypadku pomaga każdemu, byłem uderzenie podobny problem, to było spowodowane przez wtyczkę Gradle dla usług Google, przynosząc w zależności które były sprzeczne z Firebase.

W moim najwyższym poziomie build.gradle miałem w buildscript:

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

które niósł w (automatycznie) zależności o których były sprzeczne z moim aplikacji build.gradle:

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

Trochę mylące, ponieważ miałem tylko jedną zależność od kompilacji i drapałem się w głowę, co mogło być mylące.

Usunąłem wtyczkę gradującą google-services i rozwiązanie problemu. Przypuszczam, że mógłbym też znaleźć odpowiednią wersję :)

0

Dzięki this post, po prostu sprawdź i zaktualizuj swoje wersje zależności google do ostatniej wersji.

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

Używam reagują-native mapy i reagowania-Native-google-logować.

I mam Wiele plików dex określić Lcom/google/Firebase/FirebaseException

Bellow mojego rozwiązania.

Otwarte build.gradle (reagują-native mapy)

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" 
} 

jest wersja 10.2.4

dalej otwartą build.gradle (reagują 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:+" 
} 

Używa wersji 9.2.1, i to jest powód.

Zmień go do wersji 10.2.4 będzie

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

Następnie otwórz build.gradle (APP) i dodać nowy

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

Teraz masz.

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

polecenie Run cd android & gradlew clean & cd .. util bez błędu następnie uruchomić react-native run-android. Nadzieja może pomóc.

0

Dzieje się tak, ponieważ niektóre z twoich bibliotek używają różnych wersji innych bibliotek.

Sprawdź swoją ostatnią dodaną bibliotekę i wyklucz. Dla mojego projektu, który był "Reakcja-native-firestack".

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