Несколько файлов 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?
Спасибо.
Ответы
Ответ 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
}