Java finalizó con un valor de salida distinto de cero 2 - Android Gradle

135

Recibo este error al ejecutar mi aplicación de Android (la limpié y luego la construí, pero el error aún está presente)

  • Sincronización: OK
  • Hacer proyecto: OK
  • Limpio: OK
  • Ejecutar: error

Error: Falló la ejecución de la tarea ': aplicación: dexDebug' .com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Procese 'comando' C: \ Archivos de programa \ Java \ jdk1.7.0 _25 \ bin \ java.exe '' finalizó con un valor de salida distinto de cero 2

Mi archivo 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')
}

EDITAR: No vi "compilar fileTree (dir: 'libs', incluye: ['* .jar'])" estaba compilando dos veces mis bibliotecas, así que solo comento:

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

y funciona bien

Maverick.pe
fuente
2
@JaredBurrows El problema en mi caso fue que mi aplicación estaba compilando dos veces las bibliotecas ... una en "compilar fileTree" (compila todo su directorio de libs) y "compilar ****".
Maverick.pe
¿Puedes publicar una respuesta y marcarla como correcta?
Jared Burrows
@JaredBurrows hecho. Gracias
Maverick.pe
mira
Tengo el mismo error pero mi archivo gradle no tiene tantas compilaciones. Por favor ayuda. Publiqué esta pregunta: stackoverflow.com/questions/34558251/… Soy completamente nuevo en el desarrollo de Android.
Ayusch

Respuestas:

205

Este problema posiblemente se deba a que se excede el límite de dex de 65K métodos impuesto por Android. Este problema se puede resolver limpiando el proyecto y eliminando algunas bibliotecas y métodos no utilizados de las dependencias en build.gradle, O agregando soporte multidex.

Entonces, si tiene que mantener bibliotecas y métodos, entonces puede habilitar el soporte multi-dex declarándolo en la configuración de gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Puede leer más sobre el soporte multidex y el desarrollo de aplicaciones con más de 65,000 métodos aquí .

minhazur
fuente
Me alegro de que te haya ayudado. @David
minhazur
2
Muchas gracias me ayudó
Aayushi
44
Y después de eso, anule el método en la clase de inicio: @Override protected void attachBaseContext (Context base) {super.attachBaseContext (base); MultiDex.install (esto); }
Gent Berani
Wow, funciona muy bien. Nunca pensé que este podría ser el problema.
Neela
Si desea ver exactamente qué está causando el error, intente construir su proyecto a través de la terminal de Gradle, de esta manera ./gradlew assembleDebug --stacktrace --debug. He visto este error en mi casocom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef
93

Para mí, el problema era que había puesto un código de biblioteca complie innecesario en build.gradle

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

que estaba causando más de 65k métodos, por lo que lo eliminé, sincronicé Gradle, limpié el proyecto y luego volví a ejecutar y luego este error se detuvo. Solo necesitaba mapas y gcm, así que puse estas líneas y el proyecto sincronizado

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

Hola gente, nuevamente encontré este problema y esta vez fue por cambiar la versión de las herramientas de compilación y realmente me requería habilitar multidex ... así que agregué el archivo build.gradle de mi aplicación ...

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

Y cree una clase que extienda la clase Aplicación e incluya este método dentro de la clase.

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

también incluir en el método OnCreate también

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}
Amit Tumkur
fuente
2
Esta es la mejor solución, solo debe incluir las bibliotecas que realmente está utilizando.
Roisgoen
2
¡¡funciona para mi!! cambie "compile 'com.google.android.gms: play-services: 7.5.0'" para compilar "com.google.android.gms: play-services-identity: 8.1.0" compile "com.google.android. gms: play-services-plus: 8.1.0 "
Oscar Calderon
1
Agradable, también consulte: developers.google.com/android/guides/setup : proporcione una lista de varias bibliotecas individuales.
Ed Manners
@ edsappfactory.com me referí a eso, usado y modificado.
Amit Tumkur
32

Por si acaso si alguien todavía está luchando con esto y no tiene idea de por qué sucede esto y cómo solucionarlo. De hecho este error

Error: Falló la ejecución de la tarea ': aplicación: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: proceso 'comando' C: \ Archivos de programa \ Java \ jdkx.x.x_xx \ bin \ java.exe '' finalizó con valor de salida distinto de cero 2

puede tener muchas razones para suceder, pero ciertamente no es algo relacionado con su versión JDK, así que no pierda su tiempo en la dirección incorrecta. Estas son dos razones principales para que esto suceda

  1. Tiene la misma biblioteca o archivo jar incluido en varios lugares y algunos de ellos están en conflicto entre sí.
  2. Está a punto o ya excedió el límite de método de 65k

El primer caso se puede solucionar de la siguiente manera: descubra qué dependencias ha incluido varias veces. Para hacer esto, ejecute el siguiente comando en la terminal de Android Studio

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

esto devolverá todas las dependencias, pero los archivos jar que incluya desde la carpeta lib intentan deshacerse de la duplicación marcada con un asterisco (*), esto no siempre es posible, pero en algunos casos aún puede hacerlo, después de esto intente excluir módulos que se incluyen muchas veces, puedes hacerlo así

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

Para el segundo caso, cuando se excede el límite del método, la sugerencia es tratar de minimizarlo eliminando las bibliotecas incluidas (la nota suena como la primera solución) si no hay forma de hacerlo, agregue multiDexEnabled verdadero a su configuración predeterminada

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

este límite método aumenta pero no es lo mejor que puede hacer debido a posibles problemas de rendimiento IMPORTANTE adición única multiDexEnabled truea defaultConfigno es suficiente, de hecho, en todos los dispositivos con Android <5 Lollipop que dará lugar a un comportamiento inesperado y NoClassDefFoundError. cómo resolverlo se describe aquí

Vilen
fuente
18

No sabía (para entonces) que "compilar fileTree (dir: 'libs', incluye: ['* .jar'])" compila todo lo que tiene la extensión jar en la carpeta libs, así que solo comento (o elimino) esto líneas:

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

y funciona bien ¡Gracias de cualquier manera! Culpa mía.

Maverick.pe
fuente
55
o al revés: comentar compile fileTree(dir: 'libs', include: ['*.jar'])en gradle. Me ha ayudado
Tomasz Mularczyk
¿Hay alguna otra solución con respecto a este problema? No compilé cada archivo jar, sino que simplemente utilicé esta línea compile fileTree(dir: 'libs', include: ['*.jar'])pero todavía muestra el mismo error.
Kairi San
9

Tuve el mismo problema y arreglé la eliminación de la biblioteca que era innecesaria

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

Eliminé esa biblioteca y pude ejecutar el proyecto sin ningún problema.

Alexiscanny
fuente
Intenté agregar la clase slideMenu y eliminar esto de mi gradle principal funcionó para mí. ¡Gracias! :)
Lucas Senechal
6

El mío se resolvió habilitando multiDex para compilaciones de depuración.

defaultConfig {
multiDexEnabled true
}
Armin
fuente
6

Rechazo JDK incrustado (en 32 bits) porque incrustado JDK es de 64 bits

Haga clic con el botón derecho en su Proyecto -> Configuración del módulo abierto -> Ubicación del SDK -> Desmarque Usar JDk incorporado y luego configure su Ruta JDK, por ejemplo, en Ubuntu / usr / lib / jvm / java-8-openjdk-i386

ugali suave
fuente
1
Creo que esto funciona porque el JDK incrustado es de 64 bits. Tuve el mismo problema en mi máquina de 32 bits.
Lukas Novak
Esto solucionó el problema en mi máquina de 32 bits. echo $JAVA_HOMEpara el camino
SANBI muestra el
Sí, sabía que tenía que ver con que mi máquina tuviera 32 bits. Gracias, Zacharia, ¡me salvó el día!
Ilonpilaaja
5

Posible problema: ha excedido el límite de métodos dex 65k, ¿puede agregar alguna biblioteca o varios métodos antes de que ocurra el problema?

Artem Zinnatullin
fuente
1
No varios ... solo un par de métodos.
Maverick.pe
Hm, intente construir una versión anterior del proyecto o elimine las bibliotecas no utilizadas si es posible y reconstruya
Artem Zinnatullin
También tengo algunos métodos
Bowman Han
3

Si ya has actualizado tu SDK y también estás usando google-play-services, entonces debes ocuparte de la dependencia porque hay algún tipo de conflicto con:

Siga lo siguiente: compile 'com.google.android.gms: play-services: +' Reemplazar por compilar 'com.google.android.gms: play-services: 6.5.87'

Nota: Aquí '6.5.87' es la versión de google-play-service. Espero que ayude ...

Maddy
fuente
2

Creo que son conflictos de archivos .jar en su proyecto.

He eliminado android-support-v4.jar de la carpeta libs y está funcionando.

Si su proyecto da error, verifique su archivo build.gradle

dependencias {

}

Samir Mangroliya
fuente
2

En mi caso, el problema era que la nueva biblioteca (dependencia de gradle) que había agregado dependía de algunas otras dependencias y dos de esas dependencias subyacentes estaban en conflicto / chocando con algunas dependencias de otras bibliotecas / dependencias en mi script de compilación. Específicamente, agregué Apache Commons Validator(para la validación del correo electrónico), y dos de sus dependencias (Apache Commons Loggingy Apache Commons Collections) estaban en conflicto con las utilizadas por Robolectric (porque diferentes versiones de las mismas bibliotecas estaban presentes en mi ruta de compilación). Así que excluí esas versiones conflictivas de dependencias ( modules) al agregar la nueva dependencia (the Validator):

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

Puede ver las dependencias de su (s) módulo (s) gradle (es posible que solo tenga un módulo en su proyecto) usando el siguiente comando gradle (uso el envoltorio gradle que se crea para usted si ha creado su proyecto en Android Studio / Intellij Idea). Ejecute este comando en el directorio raíz de su proyecto:

./gradlew: SU-NOMBRE-MÓDULO: dependencias

Después de agregar esas excludedirectivas y volver a intentar ejecutarlas, recibí un duplicate fileerror NOTICE.txtque usan algunas bibliotecas comunes de Apache como Logging and Collections. Tuve que excluir ese archivo de texto al empaquetar. En mi build.gradle, agregué:

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

Resultó que la nueva biblioteca (the Validator) puede funcionar con versiones ligeramente más antiguas de sus dependencias / módulos (que ya están importados en mi ruta de compilación por otra biblioteca (Robolectric)). Este fue el caso con esta biblioteca específica, pero otras bibliotecas podrían estar utilizando la última API de las dependencias subyacentes (en cuyo caso debe intentar ver si las otras bibliotecas que dependen del módulo / dependencia en conflicto pueden funcionar con el versión más reciente (al excluir la versión anterior del módulo / dependencia bajo las entradas de esas bibliotecas)).

Javad Sadeqzadeh
fuente
1

En mi caso, recibí este error cuando hay 2 o más bibliotecas en conflicto (misma biblioteca pero diferentes versiones). Verifique su aplicación build.gradle en el bloque de dependencias.

Phuc Tran
fuente
1

Hay dos alternativas que funcionarán con seguridad:

  1. Limpia tu proyecto y luego construye.

Si el método anterior no funcionó, intente con el siguiente.

  1. Agregue lo siguiente al archivo build.gradle en el nivel de aplicación

    defaultConfig {   
    
    multiDexEnabled true
    
    }
Udit Kapahi
fuente
probé ambos, pero tengo un nuevo error Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, ¿qué debo hacer a continuación?
Kairi San
pruebe este stackoverflow.com/questions/28168063/…
Udit Kapahi el
este error ocurre debido a paquetes duplicados / mismos en su proyecto
Udit Kapahi
1

La actualización de mi SDK de Java a la última versión 1.7.0_79y la actualización de la versión SDK Locationinferior me Project Structureresolvió el problema.

La cosa
fuente
1

Mi problema era que aparte de tener

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 / Contenido / Inicio / bin / java '' terminado con un valor de salida distinto de cero 2

También tuve este rastro:

Error de traducción no capturado: java.lang.IllegalArgumentException: ya agregado: Lcom / mypackage / ClassX;

El problema era que estaba agregando la misma clase en dos bibliotecas diferentes. Al eliminar el archivo de clase / jar de una de las bibliotecas, el proyecto se ejecuta correctamente

mromer
fuente
Exactamente, obtuve el mismo problema, la misma firma de clase, afortunadamente era mi clase, así que la refacté. Escribí la respuesta aquí: stackoverflow.com/a/35045501/3397345
Davideas
1

Para mí, estaba agregando todas las dependencias de PlayStore

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

Pero solo necesitaba google map, así que lo hice más específico y el error se resolvió.

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

Ajji
fuente
0

en mi caso, el problema era la versión de herramientas de compilación que era 23.0.0 rc3 y cambié a 22.0.1 y mi problema se solucionó.

max
fuente
0

Es posible que esté utilizando un cable de baja calidad / cable defectuoso para conectar su dispositivo a la PC, reemplacé el cable y funcionó para mí.

Mushtaq Jameel
fuente
0

Este error se debe al uso de más bibliotecas. En mi caso, 'compilar' com.google.android.gms: play-services-9.4.0 'causó este error. Para evitar este error, use las bibliotecas necesarias. Por ejemplo, si desea para usar Maps en su aplicación. Luego use la compilación 'com.google.android.gms: play-services-maps: 9.4.0'. Mientras agrega la dependencia de los servicios de Google Play, especifique solo las bibliotecas necesarias. Por defecto, incluye todas las bibliotecas.

Rajesh.k
fuente
0

En su gradle.buildarchivo, use esto

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

Y funciona bien.

Rishabh Mahatha
fuente
0

Si desea ver exactamente qué está causando el error, intente construir su proyecto a través de la terminal de Gradle, de esta manera ./gradlew assembleDebug --stacktrace --debug. He visto el siguiente error en mi casocom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Esto sucedió cuando estaba tratando de integrar Google Maps en mi proyecto. Para solucionarlo, simplemente verifiqué las bibliotecas que estaba incluyendo

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

Simplemente lo cambié a

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

y el problema se fue

NecipAllef
fuente
0

Tuve el mismo error después de convertir mi proyecto a Kotlin. Mi problema fue que mi ubicación de jre se cambió a una ruta no válida durante el proceso (me pregunto por qué podría suceder esto ... me hizo perder el tiempo). Lo solucionó haciendo esto:

File > Project Structure > SDK Location 

Desmarcó la Use embedded JDKopción, que apuntaba a una instalación JDK antigua, y seleccionó la correcta:

/home/my_user/jdk1.8.0_101

Después de cambiar esto, el error desapareció

voghDev
fuente
0

TRABAJÓ PARA MI :)

Actualicé el java a la última versión 8 anteriormente era 7 y luego vaya a OPEN MODULE SETTING haciendo clic derecho en el proyecto y cambié la ruta jdk a / usr / lib / jvm / java-8-oracle el nuevo java 8 instalado. Y reiniciar el estudio

ingrese / usr / lib / jvm para el nombre de la carpeta java 8

Estoy usando ubuntuingrese la descripción de la imagen aquí

jayant singh
fuente