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, так что не тратьте свое время в неправильном направлении. Это две основные причины для этого
- У вас есть одна библиотека или файл jar, включающий несколько мест, и некоторые из них конфликтуют друг с другом.
- Вы собираетесь или уже превысили лимит метода 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 из одной из библиотек, проект запустится правильно
Есть две альтернативы, которые будут работать наверняка:
- Очистите свой проект и затем соберите.
Если вышеуказанный метод не сработал, попробуйте следующий.
Добавьте следующее в файл 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'
и проблема исчезла
Возможно, вы используете некачественный кабель / неисправный кабель для подключения вашего устройства к ПК, я заменил кабель, и он мне помог.