Java закінчила ненульовим значенням виходу 2 - Android Gradle


135

Я отримую цю помилку під час виконання свого додатка для Android (я очистив її, а потім створив її, але помилка все ще присутня)

  • Синхронізація: Гаразд
  • Зробіть проект: Гаразд
  • Чистота: Гаразд
  • Запуск: помилка

Помилка: Не вдалося виконати завдання ": app: dexDebug '.com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Процес" команда "C: \ Програмні файли \ 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')
}

EDIT: я не бачив "компілювати fileTree (dir:" libs ", включати: ['* .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 Проблема в моєму випадку полягала в тому, що моя програма двічі збирала бібліотеки .. одна на "компілювати fileTree" (збирає всі ваші каталоги libs) і "compile ****".
Maverick.pe

Чи можете ви надіслати відповідь і позначити її правильною?
Джаред Берроуз

@JaredBurrows зроблено. Спасибі
Maverick.pe

Будь ласка , перевірте мій пост тут stackoverflow.com/a/33387368/740372
Санджой саха

У мене така ж помилка, але мій файл gradle не має стільки компіляцій. Будь ласка, допоможіть. Я розмістив це запитання: stackoverflow.com/questions/34558251/… Я абсолютно новачок у розробці андроїдів.
Аюш

Відповіді:


205

Ця проблема цілком можлива через перевищення ліміту 65K методу dex, накладеного Android. Цю проблему можна вирішити або за допомогою очищення проекту та видалення деяких невикористаних бібліотек та методів із залежностей у build.gradle, АБО , додавши підтримку multidex.

Отже, якщо вам доведеться зберігати бібліотеки та методи, ви можете включити підтримку мультидекса, оголосивши його в config gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Тут ви можете прочитати більше про підтримку мультидекса та розробку додатків із більш ніж 65 Кб методами .


рад, що це вам допомогло. @David
minhazur

2
Дякую тобі, що мені це допомогло
Aayushi,

4
А після цього перезазначте метод у класі запуску: @Override захищено від непридатності attachBaseContext (Context base) {super.attachBaseContext (base); MultiDex.install (це); }
Gent Berani

Нічого собі, це чудово працює. Ніколи не думав, що це може бути проблемою.
Ніла

Якщо ви хочете побачити, що саме викликає помилку, спробуйте створити свій проект через термінал 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, очистили проект, а потім запустили знову, а потім ця помилка припинилася. Мені потрібні були лише карти та гсм, тому я поставив ці рядки та синхронізований проект

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
працює для мене !! змінити "компілювати" com.google.android.gms: play-services: 7.5.0 '"на компілювати" com.google.android.gms: play-services-ідентичність: 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: \ Програмні файли \ Java \ jdkx.x.x_xx \ bin \ java.exe' 'завершено ненульове значення виходу 2

це може мати багато причин, але, звичайно, не те, що стосується вашої версії JDK, тому не витрачайте час у неправильному напрямку. Це дві основні причини цього

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

Перший випадок можна виправити наступним чином: з’ясуйте, які залежності ви включили кілька разів. Для цього виконайте наступну команду в терміналі андроїд-студії

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

У другому випадку, коли ви перевищуєте обмеження методу, пропонуйте спробувати звести його до мінімуму, видаляючи бібліотеки, що включені (відзначте це як перше рішення), якщо жодного способу це зробити, щоб додати до свого замовчуванняConfig multiDexEnabled true

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

це збільшує ліміт методу, але це не найкраще, що можна зробити через можливі проблеми з роботою ВАЖЛИВО додавання лише multiDexEnabled trueдо defaultConfigцього недостатньо насправді на всіх пристроях, на яких працює андроїд <5 Lollipop, це призведе до несподіваної поведінки та NoClassDefFoundError. як її вирішити описано тут


18

Я не знав (до того часу), що "компілювати fileTree (dir:" libs ", включати: ['* .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'])у gradle. Це мені допомогло.
Томаш Муларчик

чи є якесь інше рішення щодо цього питання? Я не компілював кожен jar файл, а натомість просто використав цей рядок, compile fileTree(dir: 'libs', include: ['*.jar'])але він все ще показує ту саму помилку.
Kairi San

9

У мене була така ж проблема, і я виправив видалення бібліотеки, яка була непотрібною

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

Я видалив цю бібліотеку, і я міг без проблем запустити проект.


Я намагався додати клас slidingMenu і видалення цього з мого основного 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-розрядної машини. Дякую, Захарія - врятував мені день!
Ілонпілая

5

Можлива проблема: Ви перевищили ліміт методів dex 65k, можливо, ви додали якусь бібліотеку або кілька методів до виникнення проблеми?


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

Гм, спробуйте створити попередню версію проекту або видаліть невикористану бібліотеку, якщо це можливо, і переобладнайте
Артем Зіннатуллін

У мене є також декілька методів
боуман Хан

3

Якщо ви вже оновили свій SDK і ви також використовуєте google-play-сервіси, вам потрібно подбати про залежність, оскільки існують певні конфлікти з:

Дотримуйтесь наведеного нижче: компілювати 'com.google.android.gms: play-services: +' Замінити компіляцією '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 CommonsValidator (для перевірки електронної пошти), і дві його залежності (Apache Commons Loggingі Apache Commons Collections) суперечили тим, які використовує Robolectric (оскільки в моєму шляху побудови були різні версії одних і тих же бібліотек). Тому я виключав ці конфліктні версії залежності ( modules) при додаванні нової залежності (the 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 and 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, що мені робити далі?
Kairi San


ця помилка виникає через повторювані / однакові пакети у вашому проекті
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 / Зміст / Головна / bin / java '' закінчено з нульовим значенням виходу 2

У мене був і цей слід:

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

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


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

1

Для мене я додав цілі залежності від ігор

компілювати '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

Ця помилка пояснюється тим, що використовується більша кількість бібліотек. У моєму випадку "компілювати" com.google.android.gms: play-services-9.4.0 'спричинила помилку. Щоб уникнути цієї помилки, використовуйте необхідні бібліотеки. Наприклад, якщо ви хочете використовувати Карти у вашій програмі. Потім використовуйте компіляцію 'com.google.android.gms: play-services-maps: 9.4.0'. Додаючи залежність від служб Google Play, вкажіть лише потрібні бібліотеки. За замовчуванням вона включає всі бібліотеки.



0

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

Це сталося, коли я намагався долучити Карти Google до свого проекту. Щоб виправити це, я просто перевірив бібліотеки, до яких я входив

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, а потім перейдіть до НАВЧАЛЬНОГО НАСТРОЮВАННЯ МОДУЛЯ, клацнувши правою кнопкою миші на проект і змінивши шлях jdk на / usr / lib / jvm / java-8-oracle на встановлений новий java 8. І перезавантажте студію

зареєструйтесь у / usr / lib / jvm для назви папки java 8

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.