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.