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'

Як я можу виправити цю помилку?

Відповіді:


90

Правильна відповідь полягає в тому, що деякі ваші файли jar не компілюються. Вам слід зайти у файл build.gradle у своєму проекті та переглянути свої залежності.

Якщо ви просто імпортуєте деякі файли jar, ви можете спробувати їх видалити та додавати по одному. Це допоможе вам визначити, який із них викликає помилку.

У моєму випадку я зробив саме це, і коли я імпортував останній, додаток скомпілювався. Тож я думаю, що справжня проблема полягала в тому, що я імпортував занадто багато відразу. Але зараз це все працює.


20
Якщо ви компілюєте за допомогою ./gradlew assemble --stacktrace --info, це дасть вам точно знати, яка банка погана
Нір Хартманн,

@NirHartmann Швидке запитання, це команда, яку я б розмістив у build gradle? Я не був впевнений, де його слід розмістити.
Fallenreaper

2
@Fallenreaper не впевнений, що я розумію ваше запитання, я мав на увазі, що у вашому кореневому каталозі проекту у вас є файл exec gradlew, якщо ви запустите його з терміналу або cmd, як я вже сказав, ви б знали, де проблема, і тоді ви можете її виправити .
Нір Хартманн,

@ Fallenreaper - перейшли до gradle / gradle в терміналі та введенні ./gradlew assemble --stacktrace --info, але не отримуйте такого каталогу, це ви мали на увазі у своїй пропозиції?
dancingbush

Це справді допомога для мене
bhavesh kaila

68

У мене раптом виникла та сама проблема, не зазнавши змін.

Я вирішив це, видаливши app/buildкаталог і дозволив gradle побудувати весь проект новим.


2
Така сама проблема і тут, коли додається дія, щоб замінити основну. Я зробив чистий, але це не спрацювало. Дякую за це рішення.
Підніміться

1
Крім того, спробуйте очистити папку app / build у бібліотечних проектах, які ви можете включити у свій додаток
Voy

1
Хороша спроба, але це не вирішило моєї проблеми: /
Maxime T

1
виправити мою проблему. Дякую
діан,

1
Видалення папки build дійсно допоможе повною мірою.
bhavesh kaila

16

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


1
Це було технічно правильно для мене, але це сталося, оскільки мої залежності у файлі build.gradle включали бібліотеку підтримки Android двічі з двома різними версіями після додавання нової діяльності до проекту.
Джош

Я не закінчив, коли це було вирішено, але це привело мене до мого шляху. Дякую.
Андреас Рудольф

Вирішив проблему для мене, але я ніколи не замислювався б про те, що проблема дублюється JAR, із повідомлення про помилку. Я імпортував Volley як модуль на рівні проекту, але оскільки я хотів мати можливість перемикатися між побудовою з AS та побудовою з Cordova, я створив своє середовище, щоб запустити Volley як плагін Cordova. Після регенерації платформи в якийсь момент я отримав це повідомлення про помилку. Ваш коментар про те, що двічі імпортуються одні і ті ж бібліотеки, змусив мене зрозуміти, що я повинен був видалити налаштування "Volley as import library", тож дякую.
Марк Бірбек,

4

Я отримав таку саму помилку, коли спробував скомпілювати jar бібліотеки utils в eclipse за допомогою Java JRE 1.8 та використовувати її у своєму / libs / в Android Studio 1.1.0.

У мене була встановлена ​​Android Studio для використання JDK1.8.0.

Я переключив свій Eclipse на роботу з JRE 1.7, і помилку було виправлено. Eclipse: Вікно-> Налаштування-> Вкладка Java-> Компілятор -> Рівень відповідності 1.7. Швидше за все, вам буде запропоновано перемкнути вашу системну бібліотеку JRE на jdk1.7.x_x.

Можливо, вам доведеться зняти прапорець біля пункту "стиснути банку" під час експорту. Я не перевіряв, чи це мало ефект чи ні. Сумніваюсь, що це було пов’язано.


Дякую! Це вирішило мою проблему з Android Studio 1.4 та Gradle Experimental-0.2.1;) Мені довелося повернутися до JDK 1.7.1, хоча повністю вирішити цю проблему
Stef

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 мені спрацював. Дякую!
kalan nawarathne

4

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

якщо ви подивитеся на помилку, показану червоним, ви побачите це

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

Щоб назавжди вирішити цю проблему, просто додайте ці рядки у свій build.gradleфайл

android {
    dexOptions {
        jumboMode = true
    }
}

Для отримання додаткової інформації перевірте це питання: тут


3

Переконайтеся, що ваш файл AndroidManifest містить ім’я пакета у вузлі маніфесту. Встановлення імені пакета вирішило цю проблему для мене.


У моєму випадку ім'я пакета було продубльовано у 2 бібліотечних підпроектах.
sasha_trn

3

Користувачі ANDROID STUDIO пробують це: -

Вам потрібно додати наступне до залежностей вашого файлу gradle:

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

А потім додайте нижній рядок (програма підтримки мультидексу) до 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


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'

0

Я знайшов дуже цікаву проблему з Android Studio та оновленням mircrosoft до веб-браузера. Я модернізував "тупо" до останньої версії ie. звичайно, Microsoft у своїй нескінченній мудрості точно знає, що робити з безпекою. Коли я намагався скомпілювати свій додаток, я постійно отримував помилку Gradle - збірка не вдалася - не вдалося виконати завдання. заглянувши в стек, я побачив, що він не розпізнав шлях до java.exe. Я виявив це дивним, оскільки я просто зміг скласти його напередодні. Я додав JAVA_HOME до env vars для системи, закрив Android Studio і знову відкрив його. Низько і ось, якщо на екрані пожежної стіни не з’явився запит, чи хочу я пройти все через jave.exe.

Яке скупчення!


0

(Це може бути неправильний ланцюжок, оскільки ваша проблема здається більш конкретною, але саме цю тему я знайшов під час пошуку за ключовими словами проблеми)

Незважаючи на всі добрі підказки, єдине, що мені допомогло, і про що я хотів би поділитися про всяк випадок, якщо все інше не спрацює:

Видаліть каталог .gradle у своєму домашньому каталозі і попросіть його відновити / повторно завантажити для вас Android Studio.

Виправлені всілякі дивні для мене помилки, які не можна було виправити за допомогою повторної інсталяції Android Studio або SDK.


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')

Додаток не отримує помилок.


Вам слід видалити локальні банки з папки libs і залежати від центральних сховищ.
WonderCsabo

0

Я зіткнувся з такою ж проблемою. Вирішено цим. Перейдіть до actionbarsherlock -> налаштування модуля -> залежності. Видаліть бібліотеку підтримки v4. Внизу ліворуч є кнопка плюс, звідти додайте 1 Залежність бібліотеки (Виберіть підтримку-v4). Дозвольте градації повторно синхронізувати та очистити проект після закінчення.


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, але я б також перевірив, щоб ваші пакунки були написані правильно.


0

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

компілюйте 'com.parse.bolts: bolts-android: 1. +'

компілювати 'com.parse: parse-android: 1.11.0'

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


0

Якщо ви також використовуєте Daggerабо Butterknifeвам потрібно додати гуаву як залежність до вашого build.gradleосновного файлу, наприклад, classpath:

com.google.guava:guava:20.0

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

 dexOptions {
        javaMaxHeapSize "4g"
    } 


-1

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


Чи є у вас інформація щодо того, чому це може вирішити цю проблему?
Грег Баїр,

1
Тому що будь-якими способами ви не можете виключити бібліотеки в build.gradle, і прийняте рішення також говорить нам видалити та додати файли jar, які не вдалося скомпілювати .. Отже, не ті файли jar викликали проблеми , вони працювали до появи проблеми, і працюють досі після того, як я її вирішив за допомогою згаданого методу, тому проблема зі збіркою та код не скомпілювались. Отже, який найкращий спосіб, коли збірка не вдається, ви очищаєте проект і відновлюєте. Дякую!
code4salvation

для більшості людей це повідомлення з’являється, якщо вони збираються будувати свій проект. так що це точно не рішення
maysi

1
Сподіваюся, ви прочитали відповідь про її помилку збірки через некомпіляцію залежностей, і тому вона з’являється лише при «побудові проекту». Щоб залишатися в синхронізації з вашим Android Studio, також переконайтеся, що ви оновили Java до останньої доступної версії coz це інша історія до і після неї.
code4salvation
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.