Java завершена с ненулевым значением выхода 2 - Android Gradle


135

Я получаю эту ошибку при выполнении моего приложения для Android (я очистил его, а затем собрал, но ошибка все еще присутствует)

  • Синхронизация: ОК
  • Сделать проект: ОК
  • Чисто: ОК
  • Run: Ошибка

Ошибка: не удалось выполнить задачу ': app: dexDebug' .com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: обработать команду 'C: \ Program Files \ Java \ jdk1.7.0 _25 \ bin \ java.exe '' завершено с ненулевым значением выхода 2

Мой файл Gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
    applicationId "com.rzr.rzevallosr.miappdepruebas"
    minSdkVersion 19
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
}

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

// This library handles authentication and authorization
compile 'com.spotify.sdk:spotify-auth:1.0.0-beta9@aar'
// This library handles music playback
compile 'com.spotify.sdk:spotify-player:1.0.0-beta9@aar'

compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.+'

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'

compile files('libs/spotify-web-api-android-master-0.1.0.jar')
compile files('libs/okio-1.3.0.jar')
}

РЕДАКТИРОВАТЬ: я не видел "compile fileTree (dir: 'libs', include: ['* .jar'])", он компилировал мои библиотеки дважды, поэтому я просто прокомментировал:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

и работает нормально.


2
@JaredBurrows В моем случае проблема заключалась в том, что мое приложение дважды компилировало библиотеки .. одно на «compile fileTree» (компилирует все ваши библиотеки libs) и «compile ****».
Maverick.pe

Можете ли вы опубликовать ответ и пометить его правильно?
Джаред Берроуз

@JaredBurrows сделано. Спасибо
Maverick.pe

пожалуйста, проверьте мой пост здесь stackoverflow.com/a/33387368/740372
Sanjoy Saha

У меня та же ошибка, но в моем файле Gradle не так много компиляций. Пожалуйста помоги. Я разместил этот вопрос: stackoverflow.com/questions/34558251/… Я совершенно новичок в разработке Android.
Аюш

Ответы:


205

Вполне возможно, что эта проблема связана с превышением предела dex 65К, наложенного Android. Эта проблема может быть решена либо путем очистки проекта, а также удаление некоторых неиспользуемых библиотек и методов из зависимостей в build.gradle, или путем добавления multidex поддержки.

Итак, если вам нужно сохранить библиотеки и методы, вы можете включить поддержку multi dex, объявив ее в конфигурации gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Вы можете узнать больше о поддержке multidex и разработке приложений с использованием методов более 65K здесь .


рад, что это помогло тебе. @David
minhazur

2
Большое спасибо, это помогло мне
Ааюши

4
И после этого переопределите метод в классе запуска: @Override protected void attachBaseContext (Context base) {super.attachBaseContext (base); MultiDex.install (это); }
Гент Берани

Вау, это прекрасно работает. Никогда не думал, что это может быть проблемой.
Нила

Если вы хотите увидеть, что именно является причиной ошибки, попробуйте построить свой проект через терминал gradle, как это ./gradlew assembleDebug --stacktrace --debug. Я видел эту ошибку в моем случаеcom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

Для меня проблема заключалась в том, что я поместил ненужный код библиотеки complie в build.gradle

dependencies {
    compile 'com.google.android.gms:play-services:7.5.0'
}

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

compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

Привет люди, я снова столкнулся с этой проблемой, и на этот раз это было из-за изменения версии инструментов сборки, и мне действительно потребовалось включить multidex..так я добавил эти файлы build.gradle моего приложения ..

defaultConfig {
    applicationId "com.am.android"
    minSdkVersion 13
    targetSdkVersion 23
    // Enabling multidex support.
    multiDexEnabled true
}

dexOptions {
    incremental true
    javaMaxHeapSize "2048M"
    jumboMode = true
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:1.0.1'
}

И создайте класс, который расширяет класс Application и включает этот метод в класс.

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

также включить в метод OnCreate тоже

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}

2
Это лучшее решение, вам следует включать только те библиотеки, которые вы на самом деле используете.
Roisgoen

2
работает для меня!! замените «compile» com.google.android.gms: play-services: 7.5.0 «« скомпилировать »com.google.android.gms: play-services-identity: 8.1.0« скомпилируйте »com.google.android. gms: play-services-plus: 8.1.0 "
Оскар Кальдерон

1
Хороший, также обратитесь к: developers.google.com/android/guides/setup - предоставить список различных отдельных библиотек.
Эд Маннерс

@ edsappfactory.com Я упоминал, что использовал и изменил.
Амит Тумкур

32

На всякий случай, если кто-то все еще борется с этим и не имеет ни малейшего представления, почему это происходит и как это исправить. На самом деле это ошибка

Ошибка: не удалось выполнить задачу «: app: dexDebug». > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: обработать команду 'C: \ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe' ', завершив ненулевое значение выхода 2

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

  1. У вас есть одна библиотека или файл jar, включающий несколько мест, и некоторые из них конфликтуют друг с другом.
  2. Вы собираетесь или уже превысили лимит метода 65К

Первый случай можно исправить следующим образом: Узнайте, какие зависимости вы включали несколько раз. Для этого выполните следующую команду в Android Studio Terminal

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

это вернет все зависимости, но jar-файлы, которые вы включаете из папки lib, пытаются избавиться от дублирования, помеченного звездочкой (*), это не всегда возможно, но в некоторых случаях вы все еще можете это сделать, после этого попытайтесь исключить модули, которые включены много раз, вы можете сделать это так

compile ('com.facebook.android:facebook-android-sdk:4.0.1'){
    exclude module: 'support-v4'
}

Во втором случае, когда вы превышаете предельное значение метода, попробуйте минимизировать его, удалив включенные библиотеки (обратите внимание, это звучит как первое решение), если нет способа сделать это, добавьте multiDexEnabled true в ваш defaultConfig

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

это увеличивает предел метода, но это не лучшая вещь из-за возможных проблем с производительностью. ВАЖНО! Добавление только multiDexEnabled trueв defaultConfigнедостаточно на всех устройствах под управлением Android <5 Lollipop приведет к неожиданному поведению и NoClassDefFoundError. как решить это описано здесь


18

Я не знал (к тому времени), что "compile fileTree (dir: 'libs', include: ['* .jar'])" компилирует все, что имеет расширение jar в папке libs, поэтому я просто комментирую (или удаляю) это линии:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

и работает нормально. Спасибо, в любом случае! Виноват.


5
или наоборот: комментарий compile fileTree(dir: 'libs', include: ['*.jar'])в градле. Это помогло мне.
Томаш Муларчик

Есть ли другое решение по этому вопросу? я не скомпилировал каждый файл jar, но вместо этого просто использовал эту строку, compile fileTree(dir: 'libs', include: ['*.jar'])но она все еще показывает ту же ошибку.
Кайри Сан

9

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

compile fileTree(dir: 'libs', include: ['*.jar'])

Я удалил эту библиотеку и смог запустить проект без проблем.


Я пытался добавить класс slideMenu, и удаление этого из моего основного gradle помогло мне. Спасибо! :)
Лукас Сенечал

6

Моя проблема была решена путем включения multiDex для отладочных сборок.

defaultConfig {
multiDexEnabled true
}

6

Я отклоняю встроенный JDK (в 32-разрядной версии), потому что встроенный JDK является 64-разрядным

Щелкните правой кнопкой мыши ваш проект -> Открыть настройки модуля -> Расположение SDK -> Снимите флажок Использовать встроенный JDk, затем установите путь JDK, например, в Ubuntu / usr / lib / jvm / java-8-openjdk-i386


1
Я думаю, что это работает, потому что встроенный JDK является 64-битным. У меня была такая же проблема на моей 32-битной машине.
Лукас Новак

Это исправило проблему на моей 32-битной машине. echo $JAVA_HOMEдля пути
SANBI образцы

Да, я знал, что это связано с моей 32-битной машиной. Спасибо, Захария - спас мой день!
Ilonpilaaja

5

Возможная проблема: Вы превысили предел dex 65k методов. Может быть, вы добавили какую-то библиотеку или несколько методов до возникновения проблемы?


1
Не несколько .. просто пара методов.
Maverick.pe

Хм, попробуйте собрать предыдущую версию проекта или удалить неиспользуемую библиотеку (и), если это возможно, и сделайте перестройку
Артем Зиннатуллин

У меня есть только несколько методов
Боуман Хан

3

Если вы уже обновили свой SDK и также используете google-play-services, вам необходимо позаботиться о зависимости, поскольку существуют некоторые конфликты с:

Выполните следующие действия: compile 'com.google.android.gms: play-services: +' Заменить на compile 'com.google.android.gms: play-services: 6.5.87'

Примечание. Здесь «6.5.87» - это версия службы Google Play. Надеюсь, это поможет..


2

Я думаю, что это конфликты файла .jar в вашем проекте.

Я удалил android-support-v4.jar из папки libs и он работает !!!

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

зависимости {

}


2

В моем случае проблема заключалась в том, что новая библиотека (зависимость gradle), которую я добавил, основывалась на некоторых других зависимостях, и две из этих базовых зависимостей конфликтовали / конфликтовали с некоторыми зависимостями других библиотек / зависимостей в моем сценарии сборки. В частности, я добавил Apache Commons Validator(для проверки электронной почты), и две его зависимости (Apache Commons Loggingи Apache Commons Collections) конфликтовали с зависимостями, используемыми Robolectric (поскольку в моем пути сборки присутствовали разные версии одних и тех же библиотек). Поэтому я исключил эти конфликтующие версии зависимостей ( modules) при добавлении новой зависимости ( Validator):

compile ('commons-validator:commons-validator:1.4.1') {
    exclude module: 'commons-logging'
    exclude module: 'commons-collections'
}

Вы можете просмотреть зависимости вашего модуля (ов) gradle (в вашем проекте может быть только один модуль) с помощью следующей команды gradle (я использую упаковщик gradle, который создается для вас, если вы создали свой проект в Android Studio / Intellij Идея). Запустите эту команду в корневом каталоге вашего проекта:

./gradlew: ВАШЕ ИМЯ МОДУЛЯ: зависимости

После добавления этих excludeдиректив и повторного запуска я получил сообщение duplicate fileоб ошибке NOTICE.txt, которое используется некоторыми библиотеками Apache Commons, такими как Logging и Collections. Мне пришлось исключить этот текстовый файл при упаковке. В моем build.gradle я добавил:

packagingOptions {
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/NOTICE.txt'
}

Оказалось, что новая библиотека (the Validator) может работать с более старыми версиями своих зависимостей / модулей (которые уже импортированы в мой путь сборки другой библиотекой (Robolectric)). Это имело место с этой конкретной библиотекой, но другие библиотеки могли бы использовать самый последний API базовых зависимостей (в этом случае вы должны попытаться проверить, могут ли другие библиотеки, которые полагаются на конфликтующий модуль / зависимость, работать с более новая версия (исключая более старую версию модуля / зависимости в записях этих библиотек)).


1

В моем случае я получил эту ошибку, когда конфликтуют 2 или более библиотек (одна и та же библиотека, но разные версии). Проверьте ваше приложение build.gradle в блоке зависимостей.


1

Есть две альтернативы, которые будут работать наверняка:

  1. Очистите ваш проект, а затем соберите.

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

  1. Добавьте следующее в файл build.gradle на уровне приложения

    defaultConfig {   
    
    multiDexEnabled true
    
    }

Я пробовал оба, но у меня новая ошибка Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, что мне делать дальше?
Кайри Сан


эта ошибка возникает из-за дублирования / одинаковых пакетов в вашем проекте
Udit Kapahi

1

Обновление Java SDK до последней версии 1.7.0_79и обновление SDK Locationпод Project Structureнеполной версии решили проблему для меня.


1

Моя проблема была в том, что помимо

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: обработать «команду» /Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Contents / Home / bin / java '' завершено с ненулевым значением выхода 2

У меня был и этот след:

Неперехваченная ошибка перевода: java.lang.IllegalArgumentException: уже добавлено: Lcom / mypackage / ClassX;

Проблема заключалась в том, что я добавлял один и тот же класс в две разные библиотеки. Удалив файл class / jar из одной из библиотек, проект запустится правильно


Точно, у меня та же проблема, та же подпись класса, к счастью, это был мой класс, поэтому я реорганизовал его. Я написал ответ здесь: stackoverflow.com/a/35045501/3397345
Davideas

1

Для меня я добавил целые зависимости PlayStore

скомпилируйте com.google.android.gms: play-services: 8.4.0

Но мне нужна была только карта Google, поэтому я уточнил ее, и ошибка была устранена.

скомпилируйте 'com.google.android.gms: play-services-maps: 8.4.0'


0

В моем случае проблема была в версии инструментов сборки, которая была 23.0.0 RC3, и я изменил на 22.0.1, и моя проблема исправлена.


0

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


0

Эта ошибка происходит из-за использования большего количества библиотек. В моем случае эта ошибка вызвана "compile" com.google.android.gms: play-services-9.4.0 '. Чтобы избежать этой ошибки, используйте необходимые библиотеки. Например, если вы хотите использовать Карты в вашем приложении. Затем используйте compile 'com.google.android.gms: play-services-maps: 9.4.0'. При добавлении зависимости от сервисов Google Play укажите только необходимые библиотеки. По умолчанию он включает все библиотеки.


0

В вашем gradle.buildфайле используйте это

"compile fileTree(dir: 'libs', include: ['*.jar'])"

И это прекрасно работает.


0

Если вы хотите увидеть, что именно является причиной ошибки, попробуйте построить свой проект через терминал gradle, как это ./gradlew assembleDebug --stacktrace --debug. Я видел следующую ошибку в моем случаеcom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Это произошло, когда я пытался включить Google Maps в свой проект. Чтобы это исправить, я просто проверил библиотеки, которые я включал

compile 'com.google.android.gms:play-services:9.8.0'

Я просто изменил это на

compile 'com.google.android.gms:play-services-maps:9.8.0'

и проблема исчезла


0

У меня была та же ошибка после преобразования моего проекта в Kotlin. Моя проблема состояла в том, что мое местоположение jre было изменено на неверный путь во время процесса (интересно, почему это могло случиться ... заставило меня терять время). Исправил это, выполнив это:

File > Project Structure > SDK Location 

Снимите Use embedded JDKфлажок с опции, которая указывала на старую установку JDK, и выбрал правильную:

/home/my_user/jdk1.8.0_101

После изменения ошибка исчезла


0

Работал для меня :)

я обновил Java до последней версии 8, ранее было 7, а затем перешел в OPEN MODULE SETTING, щелкнув правой кнопкой мыши по проекту, и изменил путь JDK на / usr / lib / jvm / java-8-oracle новый java 8 установлен. И перезапустите студию

проверьте / usr / lib / jvm для имени папки Java 8

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.