Подтвердить что ты не робот

Несколько файлов dex определяют Lcom/google/firebase/FirebaseException

У меня возникла проблема с интеграцией Firebase. Прежде всего, я добавил правила к корневому уровню build.gradle:

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'

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

Ошибка: ошибка преобразования байт-кода в dex: Причина: com.android.dex.DexException: несколько файлов dex определяют Lcom/Google/firebase/FirebaseException;

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

Спасибо.

4b9b3361

Ответ 1

У меня возникла проблема с модулем 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.

Ответ 2

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

Firebase - ОГРОМНАЯ библиотека - методы 17k+. Это зависит от тонны вещей. Одна вещь, которую вы можете сделать, это проверить список зависимостей, нажав эту кнопку на "methodscount.com": введите описание изображения здесь

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

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

Если это не поможет, вы можете настроить multidex для своего проекта.

Ответ 3

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
}

Ответ 4

В случае, если это помогает кому-либо, я сталкивался с подобной проблемой, это было вызвано плагином 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, и он решил проблему. Полагаю, я мог бы также найти правильную версию:)

Ответ 5

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

allprojects {
    repositories {
        jcenter()

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

Ответ 6

Благодаря этому сообщению просто проверьте и обновите версии зависимостей google до последней версии.

Я мог бы исправить свою проблему. Проблема в том, что BaseGameUtils все еще используя/ссылаясь на более старую версию игровых сервисов. Добавлено правильное версии, и теперь он работает. Думаю, я опустил BaseGameUtils для своего следующего проект.

Ответ 7

Я использую реакцию-native-maps и реакция-native-google-signin.

И я получил Несколько файлов dex, определяющих Lcom/google/firebase/FirebaseException

Решите мое решение.

Открыть 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(action-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:+"
}

Он использует версию 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" 
}

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

Ответ 8

Добавьте этот код внутри android в build.gradle

dexOptions {
    preDexLibraries = false
}