Несколько файлов dex определяют Lcom/google/android/gms/internal/zzau

Я получаю ошибку com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzau; когда я запускаю свое приложение

app.gradle

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.0'
compile 'com.android.support:cardview-v7:21.0.0'
compile 'com.google.android.gms:play-services:7.0.+'
compile 'com.android.support:mediarouter-v7:21.0.3'
compile 'com.squareup:otto:1.3.5'
compile 'com.squareup.picasso:picasso:2.3.4'
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.github.ksoichiro:android-observablescrollview:1.4.0'
compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
compile 'com.facebook.android:facebook-android-sdk:4.1.0'
compile 'com.parse.bolts:bolts-android:1.+'
compile 'com.edmodo:rangebar:1.0.0'
compile 'com.melnykov:floatingactionbutton:1.3.0'
compile project(':library_viewpager')
compile project(':androidHorizontalListView')
compile project(':CastCompanionLibrary')
compile project(':mobihelp_sdk_android_v1.4')
compile fileTree(include: 'Parse-*.jar', dir: 'libs')
compile files('libs/Parse-1.9.2.jar')
compile files('libs/GoogleConversionTrackingSdk-2.2.2.jar')
}

CastCompanionLibrary

dependencies {
compile 'com.android.support:appcompat-v7:22.+'
compile 'com.android.support:mediarouter-v7:22.+'
compile 'com.google.android.gms:play-services-cast:7.5.0'
}

Как это исправить? Я предполагаю, что ошибка происходит, потому что я использую сервисы Google Play как в модуле, так и в приложении. но версии разные. это вызывает проблему?

14 ответов

Решение

У меня была похожая проблема, и ваш вопрос помог мне решить мой и, вероятно, поможет вам решить ваш. Проблема в том, что вы определили:

dependencies {
...
  compile 'com.google.android.gms:play-services-cast:7.5.0'
}

а также

dependencies {
...
  compile 'com.google.android.gms:play-services:7.0.+'
...
}

Начиная с сервисов Google 7.5.0, если вы используете отдельные модули из сервисов Play, вы не можете использовать целые сервисы Play в качестве зависимости одновременно. Решение состоит в том, чтобы выбрать только те услуги, которые вам нужны, а не весь пакет, например:

вместо

dependencies {
...
  compile 'com.google.android.gms:play-services:7.0.+'
...
}

использование

dependencies {
...
  compile 'com.google.android.gms:play-services-maps:7.0.+'
  compile 'com.google.android.gms:play-services-location:7.0.+'
  compile 'com.google.android.gms:play-services-gcm:7.0.+'
...
}

Также я не уверен, но, вероятно, было бы неплохо использовать одну и ту же версию сервисов Google в обеих конфигурациях gradle.

У меня была похожая проблема после сборки с использованием phonegap/cordova: com.android.dex.DexException: несколько файлов dex определяют Lcom/google/android/gms/internal/zzsk;

Я исправил это, отредактировав build.gradle(модуль Android), так как у меня было 2 библиотеки, которые должны иметь одинаковую версию с разными номерами версий (в моем случае 8.4.0 и 9.2.1)

dependencies{
....
//make sure are both same version (8.4.0 or 9.2.1 in my case)
compile 'com.google.android.gms:play-services-gcm:9.2.1'
// this is the one I changed:  compile 'com.google.android.gms:play-services-location:8.4.0'
compile 'com.google.android.gms:play-services-location:9.2.1' // it was 8.4.0
....
}

SDK Firebase для Android теперь имеют независимые номера версий, что позволяет выполнять более частые и гибкие обновления.

Обновите все ваши зависимости Firebase до последней версии (по состоянию на 2 мая 2018 года):

 Firebase Core          com.google.firebase:firebase-core:15.0.2
    Ads                 com.google.firebase:firebase-ads:15.0.0
  Analytics             com.google.firebase:firebase-analytics:15.0.2
 App Indexing           com.google.firebase:firebase-appindexing:15.0.0
 Authentication         com.google.firebase:firebase-auth:15.1.0
Cloud Firestore         com.google.firebase:firebase-firestore:16.0.0
Cloud Functions         com.google.firebase:firebase-functions:15.0.0
Cloud Messaging         com.google.firebase:firebase-messaging:15.0.2
Cloud Storage           com.google.firebase:firebase-storage:15.0.2
Crash Reporting         com.google.firebase:firebase-crash:15.0.2
Crashlytics             com.crashlytics.sdk.android:crashlytics:2.9.1
Invites                 com.google.firebase:firebase-invites:15.0.2
Performance Monitoring  com.google.firebase:firebase-perf:15.1.0
Realtime Database       com.google.firebase:firebase-database:15.0.0
Remote Config           com.google.firebase:firebase-config:15.0.2

Примечание к выпуску: https://firebase.google.com/support/release-notes/android

Если это происходит с response-native-device-info, вы можете изменить только с:

compile(project(':react-native-device-info'))

в

compile(project(':react-native-device-info')) {
  exclude group: 'com.google.android.gms'
}

Как описано здесь: https://github.com/rebeccahughes/react-native-device-info/blob/81b0c20fab8a10ccf0341dbd6710d7a5915b06a6/README.md#troubleshooting

Я столкнулся с той же проблемой после добавления Firebase в свое приложение вручную.
Для меня решение менялось:

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

чтобы:

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

в файле build.gradle корневого уровня.

Была такая же проблема при интеграции Firebase. В моем случае это было вызвано несоответствием версий.

в приложении Gradle у меня было:

ext {
    PLAY_SERVICES_VERSION = '10.2.0'
}
dependencies {
    compile "com.google.android.gms:play-services-maps:$PLAY_SERVICES_VERSION"
    compile "com.google.android.gms:play-services-location:$PLAY_SERVICES_VERSION"
    compile "com.google.android.gms:play-services-places:$PLAY_SERVICES_VERSION"
    compile 'com.google.firebase:firebase-database:10.0.1'
}

firebase зависимость была добавлена ​​через встроенный плагин Firebase в Android Studio. Когда я соответствовал версиям, это работало.

У меня недавно была эта проблема, причина была в разнице версий:

'com.google.firebase:firebase-ads:9.0.6'

'com.google.firebase:firebase-crash:11.0.2'

поэтому убедитесь, что у вас та же версия.

Если у кого-то были такие же проблемы, как у меня, я удалил зависимость от firebase-core, и это сработало как чудо.

dependencies{
    implementation 'com.google.firebase:firebase-core:15.0.0'
    implementation 'com.google.android.gms:play-services-ads:15.0.0'
    implementation 'com.google.firebase:firebase-crash:15.0.0'
    implementation 'com.google.firebase:firebase-messaging:15.0.0'
}

в

dependencies{
    implementation 'com.google.android.gms:play-services-ads:15.0.0'
    implementation 'com.google.firebase:firebase-crash:15.0.0'
    implementation 'com.google.firebase:firebase-messaging:15.0.0'
}

У меня была такая же проблема, но моя была вызвана самой новой версией firebase-ui 2.0.0. Поэтому я опустил версию до 1.2.0 и добавил следующую строку в файл build.gradle уровня проекта:

allprojects {
    repositories {
        jcenter()

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

Мой проект - проект cordova ionic1, я потратил целую ночь и утро, чтобы решить эту проблему, это то, что я сделал, потому что у меня были зависимости от firebase и службы Google: перейдите к этому файлу: platform \ android \ cordova-plugin-firebase \ Cordova-плагин-firebase \ приложение-build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // classpath 'com.google.gms:google-services:3.0.0'
        // i changed the above line from 3.0.0 to 3.1.1
        classpath 'com.google.gms:google-services:3.1.1'
    }
}
repositories {
    mavenCentral()
}
dependencies {
    compile 'me.leolin:ShortcutBadger:1.1.4@aar'
    //compile 'com.google.firebase:firebase-crash:+'
    // i changed the above line from + to 11.0.2
    compile 'com.google.firebase:firebase-crash:11.0.2'
}

Затем перейдите к этому файлу: platform \ android \ project.properties Первоначально у меня было это

target=android-26
android.library.reference.1=CordovaLib
cordova.gradle.include.1=cordova-plugin-firebase/app-build.gradle
cordova.system.library.1=com.google.gms:google-services:+
cordova.system.library.2=com.google.firebase:firebase-core:+
cordova.system.library.3=com.google.firebase:firebase-messaging:+
cordova.system.library.4=com.google.firebase:firebase-crash:+
cordova.system.library.5=com.google.firebase:firebase-config:+
cordova.system.library.6=com.android.support:support-v4:24.1.1+
cordova.system.library.7=com.google.android.gms:play-services-auth:11.+
cordova.system.library.8=com.google.android.gms:play-services-identity:11.+

Затем я прокомментировал службы Google, поскольку нам нужны определенные зависимости, и я также поместил версии для Firebase и GMS в один и тот же номер версии 11.0.2, так что после того, как мой файл выглядит следующим образом

target=android-26
android.library.reference.1=CordovaLib
cordova.gradle.include.1=cordova-plugin-firebase/app-build.gradle
# cordova.system.library.1=com.google.gms:google-services:+
cordova.system.library.2=com.google.firebase:firebase-core:11.0.2
cordova.system.library.3=com.google.firebase:firebase-messaging:11.0.2
cordova.system.library.4=com.google.firebase:firebase-crash:11.0.2
cordova.system.library.5=com.google.firebase:firebase-config:11.0.2
cordova.system.library.6=com.android.support:support-v4:24.1.1+
cordova.system.library.7=com.google.android.gms:play-services-auth:11.0.2
cordova.system.library.8=com.google.android.gms:play-services-identity:11.0.2

Для тех, кто интересуется, как это исправить для плагинов Apache Cordova, я исправил эту проблему, обеспечив все plugin.xml файлы содержат одну и ту же основную и вспомогательную версию, но последнюю версию, например:

<framework src="com.google.firebase:firebase-auth:15.0.+" />
<framework src="com.google.firebase:firebase-messaging:15.0.+" />

Когда используешь 15.0.0 выше, com.android.dex.DexException ошибка возникла по какой-то причине. Используя + для номера ревизии (что означает, последняя версия) все отлично работало с cordova 7.1.0 и cordova-android 6.3.0.

Не забудьте удалить и повторно добавить платформу Android после редактирования plugin.xml из плагинов, иначе ваши изменения не будут применены вообще!

Также: убедитесь, что только ОДИН файл Gradle применяет это, на всякий случай:

dependencies {
    classpath 'com.android.tools.build:gradle:+'
    classpath 'com.google.gms:google-services:3.0.0'
}

У меня была эта проблема, и ни одно из решений не сработало. Что сработало для меня, так это добавление этого плагина

 cordova plugin add cordova-android-play-services-gradle-release --save

а затем в обоих / платформы / Android/ Cordova-Plugin-Fcm/ и / платформы / Android/ Cordova-плагин-открыть / заменить

apply plugin: com.google.gms.googleservices.GoogleServicesPlugin

с:

ext.postBuildExtras = {
  apply plugin: com.google.gms.googleservices.GoogleServicesPlugin
}

У меня тоже была эта проблема, я пробовал много способов решить эту проблему. То, что работало для меня, удаляло следующую строку из моего gradle.

compile 'com.google.firebase:firebase-core:16.0.3'

Сначала у меня есть оба firebase-core а также firebase-ml-vision (что мне нужно было только firebase-ml-vision) вроде следующее.

compile 'com.google.firebase:firebase-ml-vision:17.0.0'
compile 'com.google.firebase:firebase-core:16.0.3'

После удаления строки я получил следующее предупреждение,

Предупреждение. Файл приложения должен быть зависимым от com.google.firebase: firebase-core, чтобы службы Firebase работали как положено.

Но, согласно официальным документам, основная зависимость может отсутствовать ( https://firebase.google.com/docs/ml-kit/android/detect-faces), поэтому ее можно игнорировать.

Если кто-то еще сталкивался с этой проблемой в Ionic, удаление и повторное добавление платформы работало для меня:

> ionic cordova rm platform android
> ionic cordova add platform android
Другие вопросы по тегам