НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: com.android.dex.DexException: несколько файлов dex определяют
У меня есть проблема с использованием Google Play Services в моем приложении Android с помощью Android Studio.
Я пробовал все и до сих пор не работает.
Это ошибка.
Execution failed for task ':app:dexDebug'.
com.android.ide.common.internal.LoggedErrorException: Не удалось выполнить команду: /Пользователи/jghg/Desktop/My App/Android/SDK/android-sdk-mac_86/build-tools/19.0.1/dx --dex --output/Users/jghg/Desktop/My App/Eureka/UDA/app/build/libs/app-debug.dex/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/classes/debug/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/dependency -cache/debug/Users/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/classes-08979151dd1373bd3f799299d93376d22d4afa46.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/classes-167b9d3c5d689abe004c3fa5b0bcb945d3f0fc8e.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/google-play-services-ec20f8af7bb457c5095cae1afa0cee722582f198.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/support-v4-13.0.0-473d85b8d55c88bfed3404072e6c132f96543429.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre- dexed/debug/support-v4-19.0.1-861cc05365a0e9262c764da37d61e3f93dc16de6.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/support-v4-19.0.1-dcc11 377c764caea791f711123b8b678f876c3b6.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/twitter4j-async-3.0.5-0904cb320186fb23a9a9bf25a048c5bc4ec07bc2.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/twitter4j-core-3.0.5-41d2d5805e2d90cf77813a126306c4cbe22583ae.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/twitter4j-examples -3.0.5-adc1ee9b037c8061429560e6a5fe89ce8e502db6.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/twitter4j-media-support-3.0.5-37d138cdc631738d13ddb6f4d34c560a9cd8e048.jar/Пользователи/jghg/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/twitter4j-stream-3.0.5-c96c138ea216b25631a1a8b47520ecaf33f288d8.jar Код ошибки: 2 Вывод: НЕОПРЕДЕЛЕННОЕ ТОП-УРОВНЕ ИСКЛЮЧЕНИЕ: com.android.dex.DexException: несколько файлов dex определяют Lcom/google/ads/AdRequest $ErrorCode; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) на com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) на com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) на com.android.dx.merge.DexMerger.merge(DexMerger.java:188) на com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) на com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) на com.android.dx.command.dexer.Main.run(Main.java:230) на com.android.dx.command.dexer.Main.main(Main.java:199) на com.android.dx.command.Main.main(Main.java:103)
Спасибо.
С наилучшими пожеланиями.
Ответы
Ответ 1
Ошибка возникает, если у вас есть одна и та же библиотека/каталог, включенная более одного раза в ваши зависимости build.gradle. Хорошо, скажем, у вас есть структура приложения, которая выглядит так:
![enter image description here]()
Итак, у вас есть основное "приложение", а затем у вас есть куча суб-приложений/модулей/библиотек. Библиотеки: 1) gene_test_library
, 2) genes_nine_old_androids_library
и 3) swipe_list_view_library
.
Меня зовут Gene, поэтому поэтому есть все эти "генные" библиотеки.
Внутри build.gradle
для "app"
у меня есть:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.0'
compile project(':libraries:gene_test_library')
//compile project(':libraries:genes_nine_old_androids_library')
compile project(':libraries:swipe_list_view_library')
}
Внутри build.gradle
для gene_test_library
у меня ничего нет:
dependencies {
}
Внутри build.gradle
для gene_nine_old_androids_library
у меня есть:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
}
Внутри build.gradle
для swipe_list_view_library
у меня есть:
dependencies {
compile 'com.nineoldandroids:library:2.4.0+'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
}
Эта строка кода compile fileTree(dir: 'libs', include: ['*.jar'])
просто означает "Эй, загляните внутрь" папки libs внутри этого модуля для любых файлов jar. У меня нет ничего в папке libs любого из модулей, поэтому вы можете игнорировать эту строку кода.
Итак, скажем, я раскомментирую //compile project(':libraries:genes_nine_old_androids_library')
В build.gradle
для модуля "app"
. Тогда я получил бы ошибку "UNEXPECTED TOP-LEVEL EXCEPTION:"
. Почему это?
![enter image description here]()
Ну, записывая //compile project(':libraries:genes_nine_old_androids_library')
внутри build.gradle
для "app"
, это то же самое, что и сборка зависимостей модуля "genes_nine_old_androids_library"
и размещение там. Поэтому, раскомментируя инструкцию //compile project(':libraries:genes_nine_old_androids_library')
, модуль build.gradle
для "app" становится:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.0'
compile project(':libraries:gene_test_library')
***compile fileTree(dir: 'libs', include: ['*.jar'])***
***compile 'com.android.support:appcompat-v7:21.0.0'***
compile project(':libraries:swipe_list_view_library')
}
Обратите внимание, как теперь compile 'com.android.support:appcompat-v7:21.0.0'
отображается 2x. Вот откуда исходит ошибка.
Ответ 2
Ваша библиотека сервисов Google Play экспортируется из других зависимостей вашего проекта и во время компиляции dex компилятор запутывается.
Если вы используете Gradle, тогда включение этого в проект build.gradle должно исключать возможность экспортировать библиотеку поддержки в ваш основной проект.
apply plugin: 'android'
apply plugin: 'crashlytics'
/** Must exclude exported support jars from dependencies, or get dex duplicate class error.
* we're
**/
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
all*.exclude group: 'com.google.android.gms', module: 'play-services'
}
Если вы используете систему сборки andoid studio. Затем вы должны перейти в раздел "Файл → структура проекта и отключить → модули". Пройдите через каждый модуль и щелкните вкладку зависимости, снимите флажок в столбце экспорта для библиотеки поддержки и библиотеки сервисов Google Play.
Отправить комментарии, если вам нужна дополнительная помощь.
Ответ 3
Это также может произойти, если у вас разные версии той же библиотеки, импортированной в ваш build.gradle, а не в одну из ваших библиотек. Например, службы Google Play Store требуют, чтобы все они ссылались на ту же версию, что у меня:
приложение build.gradle
compile 'com.google.android.gms:play-services-base:7.5.0'
тогда:
модуль/библиотека build.gradle
compile 'com.google.android.gms:play-services-cast:7.8.+'
Обновление версии моего приложения до версии 7.8.0 решило проблему