Android Studio: Gradle - сбой сборки - сбой выполнения для задачи ': dexDebug'

82

Ошибка:

Gradle: Execution failed for task ':vertretungsplan:dexDebug'.
> Failed to run command:
    P:\Android-Studio\sdk\build-tools\18.0.1\dx.bat --dex --output P:\Projekte\VertretungsplanProject\vertretungsplan\build\libs\vertretungsplan-debug.dex P:\Projekte\VertretungsplanProject\vertretungsplan\build\classes\debug P:\Projekte\VertretungsplanProject\vertretungsplan\build\dependency-cache\debug P:\Android-Studio\sdk\extras\android\m2repository\com\android\support\support-v4\18.0.0\support-v4-18.0.0.jar P:\Projekte\VertretungsplanProject\vertretungsplan\libs\commons-io-2.4.jar P:\Projekte\VertretungsplanProject\vertretungsplan\build\exploded-bundles\VertretungsplanProjectLibrariesActionbarsherlockUnspecified.aar\classes.jar
Error Code:
    2
Output:
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/LoginActivity$2.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/LoginActivity$2.class
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/MainActivity$1.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/MainActivity$1.class
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/YQL/YqlVplanParser.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/YQL/YqlVplanParser.class
    3 warnings
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
        at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
        at com.android.dx.command.dexer.Main.run(Main.java:232)
        at com.android.dx.command.dexer.Main.main(Main.java:174)
        at com.android.dx.command.Main.main(Main.java:91)

Структура проекта:

введите описание изображения здесь

build.gradle (actionbarsherlock)

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 11
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
        }
    }
}

build.gradle (vertretungsplan)

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/commons-io-2.4.jar')
    compile project(':libraries:actionbarsherlock')
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 11
    }
}

settings.gradle

include ':vertretungsplan', ':libraries:actionbarsherlock'

Как исправить эту ошибку?

Майси
источник

Ответы:

89

Правильный ответ: некоторые из ваших jar-файлов не компилируются. Вам следует зайти в свой файл build.gradle в своем проекте и посмотреть свои зависимости.

Если вы просто импортируете несколько файлов jar, вы можете попытаться удалить их и добавлять по одному. Это поможет вам определить, какой из них вызывает ошибку.

В моем случае я так и сделал, и когда я импортировал последний, приложение скомпилировалось. Поэтому я думаю, что настоящая проблема заключалась в том, что я импортировал слишком много файлов одновременно. Но теперь все работает.

Friis1978
источник
20
Если вы скомпилируете с помощью ./gradlew assembly --stacktrace --info, вы точно узнаете, какой jar плохой,
Нир Хартманн,
@NirHartmann Быстрый вопрос, я бы разместил команду в градиенте сборки? Я не был уверен, где его разместить.
Fallenreaper
2
@Fallenreaper не уверен, что я понимаю ваш вопрос, я имел в виду, что в вашем корневом каталоге проекта у вас есть файл exec gradlew, если вы запустите его с терминала или cmd, как я сказал, вы узнаете, где проблема, и затем вы можете ее исправить .
Нир Хартманн
@ Fallenreaper - перешли к gradle / gradle в терминале и на входе ./gradlew assembly --stacktrace --info, но не получили такой каталог, это то, что вы имели в виду в своем предложении?
dancingbush
Это действительно полная помощь для меня
бхавеш каила
69

У меня внезапно возникла та же проблема, без заметных изменений.

Я решил это, удалив app/buildкаталог и позволив gradle создать новый проект.

железная мышь
источник
2
Та же проблема здесь при добавлении действия для замены основного действия. Я выполнил чистку, но это не сработало. Спасибо за это решение.
Climbatize
1
Также попробуйте очистить папку app / build в проектах библиотеки, которые вы, возможно, включаете в свое приложение
Voy
1
Хорошая попытка, но это не решило мою проблему: /
Maxime T
1
исправь мою проблему. Спасибо
Дайан
1
Удаление папки сборки действительно помогает.
bhavesh kaila
15

Вы должны проверить, не импортируется ли тот же самый JAR снова. В моем случае внутри банки был класс, который импортировался в другую банку. Так что просто проверьте, включен ли какой-либо файл lib / class дважды во весь проект!

user2899493
источник
1
Для меня это было технически правильно, но произошло потому, что в мои зависимости в файле build.gradle была дважды включена библиотека поддержки Android с двумя разными версиями после добавления нового действия в проект.
Джош
Когда проблема была решена, я еще не закончил, но это привело меня к моему пути. Благодарю.
Андреас Рудольф
Решил проблему для меня, но я бы никогда не подумал о проблеме с дублированием JAR из сообщения об ошибке. Я импортировал Volley как модуль на уровне проекта, но поскольку я хотел иметь возможность переключаться между сборкой с AS и сборкой с Cordova, я настроил свою среду, чтобы добавить Volley как плагин Cordova. После регенерации платформы в какой-то момент я получил это сообщение об ошибке. Ваш комментарий о том, что одни и те же библиотеки импортируются дважды, заставил меня понять, что мне следовало удалить настройки «Залп как импортированная библиотека», поэтому спасибо.
Марк Бирбек
4

У меня возникла такая же ошибка, когда я попытался скомпилировать jar библиотеки utils в eclipse, используя Java JRE 1.8, и использовать его в моем / libs / в Android Studio 1.1.0.

Моя Android Studio настроена на использование JDK1.8.0.

Я переключил свой Eclipse на работу с JRE 1.7, и ошибка была исправлена. Eclipse: Window-> Preferences-> вкладка Java-> Compiler-> Compliance level 1.7. Скорее всего, вам будет предложено переключить вашу системную библиотеку JRE на jdk1.7.x_x.

Возможно, вам потребуется снять флажок «Сжать банку» при экспорте. Я не проверял, подействовало это или нет. Я сомневаюсь, что это было связано.

RW4
источник
Благодаря! Это решило мою проблему с Android Studio 1.4 и Gradle experimental-0.2.1;) Мне пришлось вернуться к JDK 1.7.1, хотя, чтобы полностью исправить эту проблему,
Стеф
4

У меня тоже была такая же проблема. В моем случае проблема началась после перезагрузки. Я закрыл свое приложение, затем закрыл Android Studio (в моем случае V1.1.0) и, наконец, нормальное завершение работы. После этого я изменил один файл java, чтобы добавить объект RadioGroup, и тогда возникла проблема.

Я решил свою проблему, только заменив простой «0» на «1» в моем файле конфигурации Gradle, потому что основная причина проблемы была сгенерирована в процессе выполнения Gradle. Раньше у меня была версия 1.0.0, затем я изменил ее на 1.1.0, как показано на рисунках.

Расположение конфигурации Gradle изменено Расположение конфигурации Gradle изменено

Место, откуда я взял нужную версию (Файл -> Настройки -> Gradle -> Экспериментальный Место, откуда я взял нужную версию (Файл -> Настройки -> Gradle -> Экспериментальный

Бегущие колеса
источник
переход на Gradle Toots версии 1.1.0 сработал для меня. благодаря!
Калан Наваратне
4

Проблема НЕ в Execution failed for task ':dexDebug'

если вы посмотрите на ошибку, показанную красным, вы увидите это

введите описание изображения здесь

Чтобы решить эту проблему навсегда, просто добавьте эти строки в свой build.gradleфайл

android {
    dexOptions {
        jumboMode = true
    }
}

Для получения дополнительной информации проверьте этот вопрос: здесь

Сабри Мевиш
источник
3

Убедитесь, что ваш файл AndroidManifest содержит имя пакета в узле манифеста. Установка имени пакета устранила эту проблему для меня.

user1743999
источник
В моем случае имя пакета было продублировано в 2 подпроектах библиотеки.
sasha_trn
3

Пользователи ANDROID STUDIO пробуют это: -

Вам нужно добавить следующее в зависимости вашего файла gradle:

compile 'com.android.support:multidex:1.0.0'

А затем добавьте строку ниже (приложение поддержки multidex) в applicationтег манифеста :

android:name="android.support.multidex.MultiDexApplication"
Кумар Кундан
источник
2

Можно исправить это, добавив

compile 'com.android.support:support-v4:18.0.0'

к зависимостям в vertretungsplan build.gradle, скомпилируйте, а затем удалите эту строку и снова скомпилируйте.

теперь это работает

Майси
источник
Почему v4: 18.0.0? Почему бы не 'v4: +'
Игорь Ганапольский
4
@IgorGanapolsky, потому что динамические версии в целом приводят к непредсказуемым результатам.
aga
1

У меня была такая же проблема, вам следует сделать:

File -> Invalidate Caches / Restart

mac229
источник
1

У меня была эта проблема, потому что я пытался использовать как библиотеку поддержки, так и appcompat:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.google.android.gms:play-services:8.3.0'
}

После того, как я удалил библиотеку поддержки и перешел на старую версию, она скомпилировала:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    /*compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'*/
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:design:22.2.0'
    compile 'com.google.android.gms:play-services:8.3.0'
}
Денис Кутлубаев
источник
1

У меня было две несовместимых зависимости.

Следующие ниже зависимости вызвали ошибку.

compile 'com.google.android.gms:play-services-fitness:8.3.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'

Изменив зависимость от пригодности до версии 8.4.0, я смог запустить приложение.

compile 'com.google.android.gms:play-services-fitness:8.4.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'
bradley4
источник
0

Я обнаружил очень интересную проблему с Android Studio и обновлением mircrosoft до веб-браузера. Я "тупо" обновился до последней версии т.е. Конечно, Microsoft в своей безграничной мудрости точно знает, что делать с безопасностью. Когда я пытался скомпилировать свое приложение, я продолжал получать ошибку Gradle - build fails - Execution failed for task. посмотрев в стек, я увидел, что он не распознает путь к java.exe. Мне это показалось странным, поскольку я смог скомпилировать только накануне. Я добавил JAVA_HOME в env vars для системы, закрыл Android Studio и снова открыл ее. Низкий, и вот, если экран с брандмауэром не появляется, спрашивая, хочу ли я, чтобы весь jave.exe прошел.

Что за кластер!

user3763372
источник
0

(Это может быть неправильный поток, поскольку ваша проблема кажется более конкретной, но это поток, который я нашел при поиске ключевых слов проблемы)

Несмотря на все хорошие подсказки, единственное, что мне помогло, и чем я хотел бы поделиться на всякий случай, если все остальное не сработает:

Удалите каталог .gradle в домашнем каталоге и попросите его перекомпилировать / повторно загрузить с помощью Android Studio.

Для меня исправлены всевозможные странные ошибки, которые нельзя было исправить переустановкой самой Android Studio или SDK.

user2400553
источник
0

Причиной может быть дублирование библиотек после импорта из Eclipse IDE.

dependencies {
compile 'com.github.japgolly.android:svg-android:2.0.5'
compile 'com.google.android.gms:play-services:+'
compile 'com.android.support:appcompat-v7:21.0.3'
compile files('libs/androidannotations-api-2.7.1.jar')
compile files('libs/androidasync-2.1.2.jar')
//compile files('libs/google-play-services.jar')
compile files('libs/universal-image-loader-1.8.2.jar')}

У меня была такая же проблема после комментария:

//compile files('libs/google-play-services.jar')

В приложении нет ошибок.

бисквит
источник
Вы должны удалить локальные jar-файлы из папки libs и зависеть от центральных репозиториев.
WonderCsabo 08
0

Я столкнулся с той же проблемой. Решено этим. Зайдите в actionbarsherlock -> module settings -> dependencies. Удалите библиотеку поддержки v4. В левом нижнем углу есть кнопка с плюсом, оттуда добавьте 1 зависимость библиотеки (выберите support-v4). Позвольте Gradle повторно синхронизировать и очистить проект после завершения.

Старкский
источник
0

Многие из ответов здесь являются методом проб и ошибок, чтобы найти повторяющиеся зависимости, но если вы прокрутите немного вверх от Execution failed for task ':app:dexDebug'.строки, она даст вам подсказку о дублированиях.

ошибка с подсказкой.

В моем случае у меня была следующая ошибка:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define L/com/parse/AbstractQueryController$1;
...
...
...
Execution failed for task ':app:dexDebug'.

Итак, я знал, что для исправления этой ошибки мне нужно найти повторяющиеся зависимости, которые определяют parse.AbstractQueryController

В моем случае у меня было два импортированных модуля, которые загружались в две разные библиотеки Parse. Когда мой проект загружал только один, моя проблема была решена.

Макс Ворг
источник
0

Я также столкнулся с этой ошибкой, когда пакет в одном из моих файлов классов был неправильно написан. Многие из этих ответов сразу же переходят в файлы Jar, но я бы также проверил, правильно ли написаны ваши пакеты.

nbroeking
источник
0

просто добавьте build.gradle

скомпилировать com.parse.bolts: bolts-android: 1. +

скомпилировать com.parse: parse-android: 1.11.0 '

и синхронизируйте проект с файлами Gradle, введите описание изображения здесь но не добавляйте Jar анализа в библиотеки :) OKK

Мурад МАМАССИ
источник
0

Если вы также используете Daggerили Butterknifeдолжны добавить гуаву в качестве зависимости к вашему build.gradleосновному файлу, например пути к классам:

com.google.guava:guava:20.0

С другой стороны, если у вас возникли проблемы с большей кучей для демона Gradle, вы можете увеличить добавление в свой radleфайл:

 dexOptions {
        javaMaxHeapSize "4g"
    } 
Франсиско Дурдин Гарсия
источник
0

В моем случае я это сделал, Build > Clean Projectи это сработало!

Чинтан Шах
источник
-1

Очистка проекта с помощью сборки в строке меню работает для многих сценариев ошибок в Android Studio, и в этом случае она работает.

code4salvation
источник
У вас есть какая-либо информация о том, почему это решит эту проблему?
Грег Бэр,
1
Coz каким бы то ни было образом вы не можете исключить библиотеки в build.gradle, и принятое решение также говорит нам об удалении и добавлении файлов jar, которые не могли быть скомпилированы ... Так что это были не те файлы jar, которые вызывали проблемы , они работали до появления проблемы и продолжают работать после того, как я решил ее с помощью упомянутого метода, так что это проблема сборки, и код не был скомпилирован. Итак, как лучше всего в случае сбоя сборки очистить проект и перестроить. Спасибо!
code4salvation
для большинства людей это сообщение появляется, если они собираются создать свой проект. так что это точно не решение
майси
1
Надеюсь, вы прочитали ответ о сбое сборки из-за того, что зависимости не компилируются, и поэтому он появится только тогда, когда вы «создаете проект». Чтобы оставаться в синхронизации с Android Studio, также убедитесь, что вы обновили Java до последней доступной версии, потому что это отдельная история до и после него.
code4salvation