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

НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: 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)

Спасибо. С наилучшими пожеланиями.

4b9b3361

Ответ 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 решило проблему