Я создал новый проект в 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
android
android-studio
BENBUN Coder
источник
источник
Ответы:
Как все здесь говорили, библиотека поддержки (
com.android.support
) включается в ваш проект более одного раза. Попробуйте добавить это в свойbuild.gradle
на корневом уровне, и это должно исключить экспорт библиотеки поддержки через другие зависимости проекта.configurations { all*.exclude group: 'com.android.support', module: 'support-v4' }
Если у вас есть несколько поддерживаемых библиотек, включенных в подобные зависимости, вы можете удалить одну из них:
источник
build.gradle
файл мне нужно добавить ? файл вModule
илиProject
(есть эта строкаclasspath 'com.android.tools.build:gradle:0.9.+'
)? Подскажите пожалуйста, я не могу это исправить.dependencies { compile 'com.android.support:support-v4:19.1.+' compile fileTree(dir: 'libs', include: ['*.jar']) }
Это конфликтует, если у вас есть поддержка jar в папке libs. Если у вас есть поддержка jar в папке libs вашего проекта и у вас есть зависимость модуля, добавленная для компиляции com.android.support:support-v4:13.0.+, будет выброшено исключение UNEXPECTED_TOPLEVEL_DEPENDANCY.
источник
compile fileTree(dir: 'libs', include: ['*.jar'])
частью вашего скриншота. Закомментировал все отдельные зависимости, подключил их и решил мою проблему.Потому что вы можете включить в свой проект две одинаковые библиотеки. проверьте свой файл 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')Вот как я исправляю эту проблему.
источник
Ошибка возникает, когда у вас есть одна и та же библиотека / каталог, включенный более одного раза в ваши зависимости build.gradle. Хорошо, допустим, у вас есть структура приложения, которая выглядит так:
Итак, у вас есть основное «приложение», а затем у вас есть несколько дополнительных приложений / модулей / библиотек. Это следующие библиотеки: 1) gene_test_library, 2) genes_nine_old_androids_library и 3) swipe_list_view_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 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». Тогда я получал бы ошибку «НЕОЖИДАННОЕ ИСКЛЮЧЕНИЕ ВЕРХНЕГО УРОВНЯ:». Это почему?
Ну, написание // компиляции проекта (': библиотеки: 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'» отображается вдвое. Вот откуда взялась ошибка.
источник
app
youcompile project(':libraries:swipe_list_view_library')
, и swipe_list_view_library также включает appcompat-v7. Итак, в итоге у вас скомпилировано 2 appcompat-v7app
. Почему эта одна ошибка не выдает?Я нашел 2 причины этой проблемы:
Иногда это из-за нескольких включенных библиотек. Например, вы добавляете
скомпилировать 'com.nineoldandroids: library: 2.4.0'
в вашем gradle и добавьте еще одну библиотеку, которая также использует "nineoldandroids" в своем gradle!
Итак, почему?
Тогда что делать?
Как обойти ограничение в 65 КБ ?
положить
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" }
Добавьте свой gradle (android {...}).
источник
Привет всем, у меня была та же проблема, которая была вызвана дублированием файла поддержки версии 4, который я включил при попытке интегрировать синтаксический анализ. Удалено лишнее включение из каталога libs, и теперь все работает нормально!
источник
Это происходит, когда библиотека компилируется дважды (т. Е. Добавляется дважды). Это может быть библиотека поддержки или любая другая, неважно.
Как правило, вы добавили оператор компиляции библиотеки, которая уже находится в вашем
libs/
каталоге. Все*.jar
файлы компилируются автоматически. Таким образом, добавление оператора компиляции вызывает ошибку. Удаление этого утверждения может решить эту проблему. Если это неприменимо, то у нас уже есть отличные ответы.источник
Это может быть самый глупый ответ, но у меня это сработало:
Примечание: ни одна из моих библиотек не компилировалась дважды.
источник
Убедитесь, что вы скачали репозиторий поддержки, чтобы использовать зависимость библиотеки поддержки в build.gradle.
Если все они уже установлены, синхронизируйте свой проект с gradle один раз, используя доступную кнопку.
источник
В моем случае исключение TOP LEVEL EXCEPTION было выбрано из-за специального символа в пути к проекту. Просто закрыл проект, изменил «á» на «a» и снова открыл проект. Работает!
источник
Внезапно, без каких-либо серьезных изменений в моем проекте, я тоже получил эту ошибку.
Все вышеперечисленное у меня не сработало, так как мне были нужны обе библиотеки поддержки V4 и V7.
В конце, поскольку 2 часа назад проект скомпилировался без проблем, я просто сказал Android Studio ПЕРЕСТРОИТЬ проект, и ошибка исчезла.
источник
У меня была аналогичная проблема, когда я пытался создать подписанный apk для своего приложения.
Странно, это случилось только тогда, когда я хотел собрать релизный apk, а на отладочном apk все работало нормально.
Наконец, просмотрев эту ветку, я проверил наличие дубликатов библиотеки поддержки в build.gradle и удалил все дубликаты, но этого было недостаточно ..
Мне нужно было сделать чистый проект, и только тогда он наконец заработал.
источник
Я знаю, что проблема была решена, но это могло произойти снова, и мое решение немного отличалось от тех, которые я нашел. В моем случае решение не было связано с включением в мой проект двух разных библиотек. Смотрите код ниже:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
Этот код выдавал ошибку «Неожиданное исключение верхнего уровня». Исправляю код, внося следующие изменения:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 }
источник
Я решил свою проблему, добавив их в Gradle сборки:
defaultConfig { multiDexEnabled true dependencies { compile 'com.android.support:multidex:1.0.0'
другим решением может быть удаление ненужных библиотек
источник