Несколько файлов 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