Java ha terminato con un valore di uscita diverso da zero 2 - Grado Android


135

Ricevo questo errore durante l'esecuzione della mia app per Android (l'ho pulita e quindi costruita, ma l'errore è ancora presente)

  • Sincronizzazione: OK
  • Crea progetto: OK
  • Pulito: OK
  • Esegui: errore

Errore: Esecuzione non riuscita per l'attività ': app: dexDebug' .com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Elaborazione 'comando' C: \ Programmi \ Java \ jdk1.7.0 _25 \ bin \ java.exe '' terminato con valore di uscita diverso da zero 2

Il mio file 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: Non ho visto "compilare fileTree (dir: 'libs', include: ['* .jar'])" stava compilando due volte le mie librerie, quindi ho solo commentato:

//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')

e funziona benissimo.


2
@JaredBurrows Il problema nel mio caso era che la mia app stava compilando due volte le librerie .. una su "compila fileTree" (compila tutte le tue directory libs) e "compila ****".
Maverick.pe,

Puoi inviare una risposta e contrassegnarla come corretta?
Jared Burrows,

@JaredBurrows done. Grazie
Maverick.pe

si prega di consultare il mio post qui stackoverflow.com/a/33387368/740372
Sanjoy Saha

Sto riscontrando lo stesso errore ma il mio file gradle non ha così tante compilazioni. Per favore aiuto. Ho pubblicato questa domanda: stackoverflow.com/questions/34558251/… Sono completamente nuovo nello sviluppo Android.
Ayusch,

Risposte:


205

Questo problema è probabilmente dovuto al superamento del limite di dex dei metodi 65K imposto da Android. Questo problema può essere risolto pulendo il progetto e rimuovendo alcune librerie e metodi inutilizzati dalle dipendenze in build.gradle, O aggiungendo il supporto multidex.

Quindi, se devi conservare librerie e metodi, puoi abilitare il supporto multi-dex dichiarandolo nella configurazione gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Puoi leggere ulteriori informazioni sul supporto multidex e sullo sviluppo di app con oltre 65.000 metodi qui .


felice che ti abbia aiutato. @ David
minhazur

2
Grazie mille mi ha aiutato
Aayushi,

4
E successivamente sovrascrive il metodo nella classe di avvio: @Override protetto void attachBaseContext (Context base) {super.attachBaseContext (base); MultiDex.install (questo); }
Gent Berani,

Wow, funziona benissimo. Non avrei mai pensato che questo potesse essere il problema.
Neela,

Se vuoi vedere cosa causa esattamente l'errore, prova a costruire il tuo progetto tramite un terminale gradle, in questo modo ./gradlew assembleDebug --stacktrace --debug. Ho visto questo errore nel mio casocom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

Per me il problema era che avevo inserito un codice di libreria complie non necessario in build.gradle

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

che causava oltre 65.000 metodi, quindi rimosso, sincronizzazione graduale, progetto pulito, quindi eseguito di nuovo e quindi l'errore si è interrotto. Avevo bisogno solo di mappe e gcm quindi ho messo queste linee e il progetto sincronizzato

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

Salve, ho riscontrato di nuovo questo problema e questa volta è stato a causa della modifica della versione degli strumenti di compilazione e mi ha davvero richiesto di abilitare multidex ... quindi ho aggiunto questi file build.gradle della mia app ..

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

E crea una classe che estende la classe Application e includa questo metodo all'interno della classe.

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

includere anche nel metodo OnCreate

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

2
Questa è la soluzione migliore, dovresti includere solo le librerie che stai effettivamente utilizzando.
Roisgoen,

2
per me va bene!! cambia "compila" com.google.android.gms: play-services: 7.5.0 "" per compilare "com.google.android.gms: play-services-identità: 8.1.0" compila "com.google.android. gms: play-services-plus: 8.1.0 "
Oscar Calderon,

1
Bello, fai riferimento anche a: developers.google.com/android/guides/setup - fornisci un elenco di varie singole librerie.
Ed Manners,

@ edsappfactory.com l'ho riferito, usato e modificato.
Amit Tumkur,

32

Nel caso in cui qualcuno stia ancora lottando con questo e non abbia idea del perché questo accada e come risolverlo. In realtà questo errore

Errore: esecuzione non riuscita per l'attività ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: processo 'comando' C: \ Programmi \ Java \ jdkx.x.x_xx \ bin \ java.exe '' terminato con valore di uscita diverso da zero 2

può avere molte ragioni per accadere, ma sicuramente non qualcosa legato alla tua versione JDK, quindi non perdere tempo nella direzione sbagliata. Questi sono due motivi principali perché ciò accada

  1. Hai lo stesso file di libreria o jar incluso in più punti e alcuni di essi sono in conflitto tra loro.
  2. Stai per superare o hai già superato il limite del metodo 65k

Il primo caso può essere risolto come segue: Scopri quali dipendenze hai incluso più volte. Per fare questo eseguire il comando seguente nel terminale Android Studio

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

questo restituirà tutte le dipendenze ma i file jar che includi dalla cartella lib provano a sbarazzarsi della duplicazione contrassegnata con asterisco (*), questo non è sempre possibile ma in alcuni casi puoi ancora farlo, dopo questo tentativo di escludere moduli che sono inclusi molte volte, puoi farlo in questo modo

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

Nel secondo caso, quando si supera il limite di metodo, il suggerimento è quello di provare a minimizzarlo rimuovendo le librerie incluse (la nota suona come la prima soluzione) se non è possibile aggiungere multiDexEnabled true al defaultConfig

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

questo aumenta il limite del metodo ma non è la cosa migliore da fare a causa di possibili problemi di prestazioni IMPORTANTE l' aggiunta solo multiDexEnabled truea defaultConfignon è sufficiente infatti su tutti i dispositivi con Android <5 Lollipop si tradurrà in un comportamento imprevisto e NoClassDefFoundError. come risolverlo è descritto qui


18

Non sapevo (ormai) che "compila fileTree (dir: 'libs', include: ['* .jar'])" compila tutto ciò che ha l'estensione jar sulla cartella libs, quindi devo solo commentare (o eliminare) questo Linee:

//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')

e funziona benissimo. Grazie comunque! Colpa mia.


5
o viceversa: commenta compile fileTree(dir: 'libs', include: ['*.jar'])in gradi. Mi ha aiutato
Tomasz Mularczyk,

c'è qualche altra soluzione riguardo a questo problema? non ho compilato tutti i file jar ma ho semplicemente usato questa riga compile fileTree(dir: 'libs', include: ['*.jar'])ma mostra ancora lo stesso errore.
Kairi San

9

Ho avuto lo stesso problema e ho risolto la rimozione della libreria non necessaria

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

Ho rimosso quella libreria e ho potuto eseguire il progetto senza alcun problema.


Stavo cercando di aggiungere la classe scorrevoleMenu e rimuoverlo dal mio livello principale ha funzionato per me. Grazie! :)
Lucas Senechal,

6

Il mio è stato risolto abilitando multiDex per build di debug.

defaultConfig {
multiDexEnabled true
}

6

Rifiuto JDK incorporato (a 32 bit) perché JDK incorporato è a 64 bit

Fai clic con il pulsante destro del mouse sul tuo progetto -> Apri impostazione modulo -> Posizione SDK -> Deseleziona Usa JDk incorporato quindi imposta il tuo percorso JDK, ad esempio in Ubuntu / usr / lib / jvm / java-8-openjdk-i386


1
Penso che funzioni perché JDK incorporato è a 64 bit. Ho avuto lo stesso problema sulla mia macchina a 32 bit.
Lukas Novak,

Questo risolto il problema sul mio computer a 32 bit. echo $JAVA_HOMEper il percorso
SANBI campiona il

Sì, sapevo che aveva a che fare con la mia macchina a 32 bit. Grazie, Zaccaria, mi hai salvato la giornata!
Ilonpilaaja,

5

Possibile problema: hai superato il limite dei metodi dex 65k, potresti aver aggiunto qualche libreria o diversi metodi prima che si verificasse il problema?


1
Non diversi .. solo un paio di metodi.
Maverick.pe,

Hm, prova a costruire la versione precedente del progetto o rimuovi le librerie non utilizzate se è possibile e ricostruiscilo
Artem Zinnatullin,

Ho anche solo alcuni metodi
bowman han,

3

Se hai già aggiornato il tuo SDK e stai utilizzando anche google-play-services, devi occuparti della dipendenza perché ci sono alcuni tipi di conflitti con:

Segui quanto segue: compila "com.google.android.gms: play-services: +" Sostituisci per compila "com.google.android.gms: play-services: 6.5.87"

Nota: qui '6.5.87' è la versione di Google Play-Service. Spero che questo possa aiutare..


2

Penso che siano conflitti di file .jar nel tuo progetto.

Ho rimosso android-support-v4.jar dalla cartella libs e funziona !!!

se il tuo progetto dà errori, controlla il tuo file build.gradle

dipendenze {

}


2

Nel mio caso, il problema era che la nuova libreria (dipendenza graduale) che avevo aggiunto si basava su alcune altre dipendenze e due di quelle dipendenze sottostanti erano in conflitto / scontro con alcune dipendenze di altre librerie / dipendenze nel mio script build. In particolare, ho aggiunto Apache Commons Validator(per la convalida della posta elettronica) e due delle sue dipendenze (Apache Commons Logginge Apache Commons Collections) erano in conflitto con quelle utilizzate da Robolectric (perché nel mio percorso di costruzione erano presenti versioni diverse delle stesse librerie). Quindi ho escluso quelle versioni in conflitto di dipendenze ( modules) quando ho aggiunto la nuova dipendenza (il Validator):

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

Puoi vedere le dipendenze dei tuoi moduli gradle (potresti avere un solo modulo nel tuo progetto) usando il seguente comando gradle (io uso il wrapper gradle che viene creato per te se hai creato il tuo progetto in Android Studio / Intellij Idea). Esegui questo comando nella directory principale del tuo progetto:

./gradlew: YOUR-MODULE-NAME: dipendenze

Dopo aver aggiunto quelle excludedirettive e riprovare a eseguire, ho ricevuto un duplicate fileerrore NOTICE.txtche viene utilizzato da alcune librerie comuni di Apache come Logging e Collections. Ho dovuto escludere quel file di testo durante l'imballaggio. Nel mio build.gradle ho aggiunto:

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

Si è scoperto che la nuova libreria (the Validator) può funzionare con versioni leggermente più vecchie delle sue dipendenze / moduli (che sono già importate nel mio percorso di build da un'altra libreria (Robolectric)). Questo è stato il caso di questa libreria specifica, ma altre librerie potrebbero utilizzare l'API più recente delle dipendenze sottostanti (nel qual caso devi provare a vedere se le altre librerie che si basano sul modulo / dipendenza in conflitto sono in grado di lavorare con il versione più recente (escludendo la versione precedente del modulo / dipendenza tra le voci di quelle librerie)).


1

Nel mio caso, ho riscontrato questo errore in caso di conflitto tra 2 o più librerie (stessa libreria ma versioni diverse). Controlla la tua app build.gradle nel blocco dipendenze.


1

Esistono due alternative che funzioneranno sicuramente:

  1. Pulisci il tuo progetto e poi crea.

Se il metodo sopra non ha funzionato, prova il successivo.

  1. Aggiungi quanto segue al file build.gradle a livello di app

    defaultConfig {   
    
    multiDexEnabled true
    
    }

ho provato entrambi, ma ho un nuovo errore Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, cosa devo fare dopo?
Kairi San


questo errore si verifica a causa di duplicati / stessi pacchetti nel progetto
Udit Kapahi

1

L'aggiornamento del mio SDK Java all'ultima versione 1.7.0_79e l'aggiornamento di SDK Locationunder hanno Project Structurerisolto il problema per me.


1

Il mio problema era che a parte l'avere

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' /Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Sommario / Home / bin / java '' terminato con valore di uscita diverso da zero 2

Ho avuto anche questa traccia:

Errore di traduzione non rilevata: java.lang.IllegalArgumentException: già aggiunto: Lcom / mypackage / ClassX;

Il problema era che stavo aggiungendo la stessa classe in due diverse librerie. Rimuovendo il file class / jar da una delle librerie, il progetto viene eseguito correttamente


Esattamente, ho avuto lo stesso problema, la stessa firma di classe, fortunatamente era la mia classe, quindi l'ho riformattato. Ho scritto risposta qui: stackoverflow.com/a/35045501/3397345
Davideas

1

Per me stavo aggiungendo le dipendenze dell'intero playstore

compilare "com.google.android.gms: play-services: 8.4.0"

Ma avevo solo bisogno di google map, quindi l'ho reso più specifico e l'errore è stato risolto.

compilare "com.google.android.gms: play-services-maps: 8.4.0"


0

nel mio caso il problema era la versione degli strumenti di build che era 23.0.0 rc3 e ho cambiato in 22.0.1 e il mio problema è stato risolto.


0

Potresti utilizzare un cavo di bassa qualità / cavo difettoso per collegare il tuo dispositivo al PC, ho sostituito il cavo e ha funzionato per me.


0

Questo errore è dovuto all'utilizzo di un numero maggiore di librerie. Nel mio caso "compile" com.google.android.gms: play-services-9.4.0 "ha causato questo errore. Per evitare questo errore, utilizzare le librerie necessarie, ad esempio se si desidera per utilizzare Maps nella tua app. Quindi, compila 'com.google.android.gms: play-services-maps: 9.4.0'. mentre aggiungi la dipendenza servizi google play specifica solo le librerie necessarie. Di default include tutte le librerie.


0

Nel tuo gradle.buildfile, usa questo

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

E funziona benissimo.


0

Se vuoi vedere cosa causa esattamente l'errore, prova a costruire il tuo progetto tramite un terminale gradle, in questo modo ./gradlew assembleDebug --stacktrace --debug. Ho visto il seguente errore nel mio casocom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Questo è successo quando stavo provando a inserire in Google Maps il mio progetto. Per risolverlo, ho semplicemente controllato le librerie che stavo includendo

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

L'ho semplicemente cambiato in

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

e il problema era sparito


0

Ho avuto lo stesso errore dopo aver convertito il mio progetto in Kotlin. Il mio problema era che la mia posizione jre era cambiata in un percorso non valido durante il processo (mi chiedo perché ciò potesse accadere ... mi ha fatto perdere tempo). Risolto il problema facendo questo:

File > Project Structure > SDK Location 

Deselezionate l' Use embedded JDKopzione, che puntava a una vecchia installazione JDK, e selezionò quella corretta:

/home/my_user/jdk1.8.0_101

Dopo averlo modificato, l'errore è scomparso


0

LAVORATO PER ME :)

ho aggiornato java all'ultima versione 8 precedentemente era 7 e poi andavo a OPEN MODULE SETTING facendo clic con il tasto destro del mouse sul progetto e ho cambiato il percorso jdk in / usr / lib / jvm / java-8-oracle il nuovo java 8 installato. E riavvia lo studio

controlla / usr / lib / jvm per il nome della cartella java 8

Sto usando Ubuntuinserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.