2016-07-04 3 views
20

У меня возникла проблема с интеграцией Firebase. Прежде всего, я добавил правила корневого уровня build.gradle файла:Несколько файлов dex определяют 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 
} 

И модуль 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' 

Во время сборки проекта, я получаю ошибку:

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

Причина ошибки ясна, но я не скомпилировал ни одну библиотеку дважды. Должен ли я исключить класс FirebaseException из процесса сборки вручную? Если да, то как? Возможно, это ошибка в зависимостях Firebase?

Спасибо.

ответ

3

Похоже, вы достигли methods count limit. Попробуйте удалить зависимости firebase и проверить количество методов для вашего приложения (например, с помощью this gradle plugin (если вы не удалите эти зависимости, вы не сможете вообще построить проект, чтобы использовать плагин count count). ..

Firebase is a HUGE library - 17k + методы это зависит от тонн вещи Одна вещь, которую вы можете сделать, это проверить список зависимостей, нажав на эту кнопку «methodscount.com»: enter image description here

Если у вас уже есть некоторые в вашем проекте вы можете попытаться их исключить:

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

Если это не поможет, вы можете захотеть configure multidex для вас.

13

У меня была эта проблема с модулем react-native-google-signin. Поскольку инструкции по изменению build.gradle часто бывают не актуальными, неполными или просто определенными в нескольких несвязанных проектах, проект скомпилирован только после копирования настроек из примера проекта react-native-google-signin. Оказывается, порядок инструкций важен, а также команда exclude group. Окончательный результат выглядит следующим образом (в 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' 

верхней build.gradle включен дополнительный gms классам, как обычно:

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

После того, как эти изменения с отделкой без каких-либо ошибок Multiple dex.

+3

также эта проблема для библиотеки реагировать родное-нажимное уведомление –

+0

Также было это из-за 'реагировать нативный-maps' из AirBnB. – mxcl

+0

Спасибо, я создал PR => https://github.com/joonhocho/react-native-google-sign-in/pull/25 – SaroVin

-2

Пожалуйста, добавьте этот код в андроиде в build.gradle

dexOptions { 
    preDexLibraries = false 
} 
+0

Ошибка: ошибка преобразования байт-кода в dex: Причина: java.lang.RuntimeException : Перевод был прерван – Khan

0

я встретил эту ошибку, когда я использовал firebase-Ui: 2.0.0. Мне удалось решить путем понижения до 'com.firebaseui:firebase-ui:1.2.0' и добавил следующую строку в build.gradle уровня проекта:

allprojects { 
    repositories { 
     jcenter() 

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

FireBase является огромной библиотекой, так что вам необходимо включить поддержку multidex в приложении.

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

Это сработало для меня! – marchinram

1

В случае помогает любому, я бил с подобной проблемой, она была вызвана плагин Gradle услуг Google, приносящих в зависимости, вступает в противоречие с Firebase.

В моем верхнем уровне build.gradle я, в buildscript:

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

доставлявший в (автоматически) зависимостей, которые конфликтующие с, в build.gradle моего приложения:

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

Немного запутался, поскольку у меня была только одна зависимость от компиляции, и я царапал себе голову, что могло бы быть в огне.

Я удалил плагин google-services gradle, и он решил проблему. Полагаю, я мог бы также найти нужную версию :)

0

Благодаря this post просто проверьте и обновите версии зависимостей google до последней версии.

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

Я использую реагирующие родной-карты и среагировать родной-Google-зарегистрировались.

И я получил Несколько DEX файлов определяют Lcom/Google/firebase/FirebaseException

пыльника моего решения.

Open build.gradle (реагируют родной-карты)

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

версия является 10.2.4

Продолжить открытую build.gradle (реагируют родной-Google-входа в аккаунт)

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

Он использует версию 9.2.1, и это причина.

Изменить его до версии 10.2.4 будет

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

Далее откройте build.gradle (приложение) и добавить новый один

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

Теперь у вас есть.

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

команда Run cd android & gradlew clean & cd .. Util без ошибок затем запустить react-native run-android. Надежда может помочь.

0

Это связано с тем, что некоторые из ваших библиотек используют разные версии другой библиотеки.

Проверьте свою последнюю добавленную библиотеку и исключите. Для моего проекта, который был «реагировать-родной-firestack».

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