Android Studio - НЕОПРЕДЕЛЕННЫЙ ТОП-УРОВЕННЫЙ ИСКЛЮЧИТЕЛЬ:
Я создал новый проект в Android Studio, используя новые шаблоны проектов, предоставленные как часть инструмента. Весь код был создан Studio. Я еще не внес никаких изменений.
Я пытаюсь запустить код, но приложение терпит неудачу со следующими ошибками, не уверен, что проблема в том, чтобы любая помощь была оценена.
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Users\RichardKavanagh\AppData\Local\Android\android-sdk\build-tools\19.0.1\dx.bat --dex --output D:\Android\Projects\MyHealthRecord\app\build\libs\app-debug.dex D:\Android\Projects\MyHealthRecord\app\build\classes\debug D:\Android\Projects\MyHealthRecord\app\build\dependency-cache\debug D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\android-support-v7-appcompat-5a78dab7e2789bbe64f4bc80d106ca75c04dcf6f.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\classes-f9b947272e9f33ba50355b52d82755584f9c0c58.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\support-v4-19.0.0-31a2c13df80d37d62ca50fec3bde6da0ca706223.jar
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 12.948 secs
Ответы
Ответ 1
Как и все остальные, упомянутые здесь, библиотека поддержки (com.android.support
) включается более одного раза в ваш проект. Попробуйте добавить это в свой build.gradle
на корневом уровне, и он должен исключить возможность экспорта библиотеки поддержки через другие зависимости проекта.
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
}
Если в зависимостях, подобных этому, имеется более одной поддержки libs, вы можете удалить одну из них: ![enter image description here]()
Ответ 2
![enter image description here]()
dependencies {
compile 'com.android.support:support-v4:19.1.+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Это становится конфликтующим, если в вашей папке libs имеется баннер поддержки.
Если у вас есть поддержка jar в папке проекта libs, и у вас есть зависимость модуля, добавленная для компиляции 'com.android.support:support-v4:13.0.+', будет выведено исключение UNEXPECTED_TOPLEVEL_DEPENDANCY.
![conflicting folder structure and build.gradle]()
Ответ 3
Потому что вы можете включить в свой проект две одинаковые библиотеки.
проверьте файл build.gradle.
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile files('libs/android-support-v4.jar')
}
если ваш файл включает компиляцию 'com.android.support:appcompat-v7:+'
и compile files('libs/android-support-v4.jar')
, у него будут проблемы.
удалить это предложение: скомпилировать файлы ('libs/android-support-v4.jar')
Вот как я исправляю эту проблему.
Ответ 4
Ошибка возникает, если у вас есть одна и та же библиотека/каталог, включенная более одного раза в ваши зависимости 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 любого из модулей, чтобы вы могли игнорировать эту строку кода.
Итак, скажем, я раскомментирую//компилирую проект (': libraries: genes_nine_old_androids_library')
В build.gradle для модуля "app". Затем я получу ошибку "НЕОПРЕДЕЛЕННЫЙ ТОП-УРОВЕНЬ: ИСКЛЮЧЕНИЕ:". Почему это?
![enter image description here]()
Ну, записывая//компилируемый проект (': 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')
}
Обратите внимание, как теперь "компилировать" com.android.support:appcompat-v7:21.0.0 "отображается 2x. Вот откуда исходит ошибка.
Ответ 5
Я нашел 2 причины для этой проблемы:
-
Иногда это связано с несколькими включенными библиотеками. Например, вы добавляете
compile 'com.nineoldandroids: library: 2.4.0'
в вашем градиенте и добавьте еще одну библиотеку, в которой он также использует "девяностые" в градиенте!
- Как сказал официальный сайт разработчиков Android:
Если вы создали приложение для Android и получили эту ошибку, то поздравляю, у вас много кода!
Итак, почему?
Спецификация исполняемого файла Dalvik ограничивает общее количество методов, на которые можно ссылаться в одном файле DEX, до 65 536, включая методы каркаса Android, методы библиотеки и методы в вашем собственном коде. Чтобы преодолеть этот предел, необходимо настроить процесс создания приложений для создания более одного файла DEX, известного как многоэлементная конфигурация.
Тогда что вы должны делать?
положил
multiDexEnabled true
в разделах defaultConfig, buildType или productFlavor вашего файла сборки Gradle.
2. В манифесте добавьте класс MultiDexApplication из библиотеки поддержки multidex в элемент приложения.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
Примечание. Если ваше приложение использует расширение класса Application, вы можете переопределить метод attachBaseContext() и вызвать MultiDex.install(this), чтобы включить multidex. Для получения дополнительной информации см. Справочную документацию MultiDexApplication.
Также этот код может помочь вам:
dexOptions {
javaMaxHeapSize "4g"
}
Поместите в свою граду (андроид {...}).
Ответ 6
Привет всем, у меня была такая же проблема, которая была вызвана дублированной версией поддержки версии 4, которую я включил, пытаясь интегрировать синтаксический анализ. Удалено дополнительное включение из каталога libs, и теперь он отлично работает!
Ответ 7
Это происходит, когда библиотека скомпилируется дважды (т.е. добавляется два раза). Это может быть библиотека поддержки или любая другая, это не имеет значения.
Общий случай заключается в том, что вы добавили компиляцию в библиотеку, которая уже находится в вашем каталоге libs/
. Все файлы *.jar
скомпилированы автоматически. Таким образом, добавление оператора компиляции вызывает ошибку. Удаление этой инструкции может решить эту проблему. Если это не применимо, у нас уже есть некоторые удивительные ответы.
Ответ 8
Это может быть самый тупой ответ, но это сработало для меня:
- Я удалил и добавил все библиотеки в свой проект вручную (один за другим). И воила, это сработало.
- Сборка → Проект перестройки
Примечание. Моя библиотека не была скомпилирована дважды.
Ответ 9
Убедитесь, что вы загрузили Support Repository, чтобы использовать зависимость библиотеки поддержки в файле build.gradle.
![enter image description here]()
Если все они уже установлены, синхронизируйте свой проект с помощью gradle один раз с помощью доступной кнопки.
![sync button]()
Ответ 10
В моем случае ТОП-УРОВЕНЬ ИСКЛЮЧЕНИЯ выбрано из-за специального char в пути к проекту. Просто закрыл проект, изменил "á" на "a" и возобновил проект. Работает!
Ответ 11
Внезапно, без каких-либо серьезных изменений в моем проекте, я тоже получил эту ошибку.
Все выше сказанное не сработало для меня, так как мне нужны обе библиотеки поддержки V4 и V7.
В конце, потому что 2 часа назад проект скомпилирован без проблем, я просто сказал Android Studio, чтобы выполнить проект REBUILD, и ошибка исчезла.
Ответ 12
У меня была аналогичная проблема, когда я попытался создать подписанный apk для своего приложения.
Странно, это произошло только тогда, когда я хотел создать release apk, а в debug apk все работало нормально.
Наконец, глядя на эту тему, я проверил дубликаты библиотек поддержки в build.gradle и удалил любые дубликаты, но этого было недостаточно.
Мне нужно было сделать чистый проект, и только тогда, наконец, я получил его на работу.
Ответ 13
Я знаю, что на эту проблему был дан ответ, но это может повториться, и мое решение немного отличается от тех, которые я нашел. В моем случае решение не было связано с включением двух разных библиотек в мой проект. См. Следующий код:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Этот код приводил эту ошибку "Неожиданное исключение высшего уровня".
Я исправляю код, вносящий следующие изменения:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
Ответ 14
Я решил проблему с добавлением в build gradle:
defaultConfig {
multiDexEnabled true
dependencies {
compile 'com.android.support:multidex:1.0.0'
другое решение может удалять ненужные библиотеки