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

Я получаю эту ошибку при выполнении моего приложения для 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')

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

23 ответа

Решение

Я не знал (к тому времени), что "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')

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

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

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

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

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

Для меня проблема заключалась в том, что я поместил ненужный код библиотеки 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();
}

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

Ошибка: не удалось выполнить задачу ':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, как решить это описано здесь

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

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

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

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

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

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

defaultConfig {
multiDexEnabled true
}

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

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

Следуйте ниже: компилировать "com.google.android.gms: играть-услуги:+" Заменить на компиляции "com.google.android.gms: играть-услуги:6.5.87"

Примечание: Здесь "6.5.87" является версия Google-игра-сервис. Надеюсь, это поможет..

В моем случае проблема заключалась в том, что новая библиотека (зависимость 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'
}

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

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

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

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

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

}

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

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

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

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

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

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

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

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 из одной из библиотек, проект запустится правильно

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

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

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

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

    defaultConfig {   
    
    multiDexEnabled true
    
    }
    

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

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

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

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

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

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

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

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

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

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

File > Project Structure > SDK Location 

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

/home/my_user/jdk1.8.0_101

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

Если вы хотите увидеть, что именно вызывает ошибку, попробуйте собрать свой проект с помощью терминала 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'

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

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

Другие вопросы по тегам