DexException: no se puede fusionar el nuevo índice 65536 en una instrucción no jumbo


84

Por alguna razón desconocida, mi aplicación de repente no se compilará desde Android Studio.

Sigo recibiendo

> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /home/martynas/android-sdk/build-tools/19.1.0/dx --dex --num-threads=4 --output
...
...
...
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Cannot merge new index 65536 into a non-jumbo instruction!

Mientras que la misma aplicación se construye con éxito desde la línea de comandos. He comprobado el recuento de referencias de métodos y está muy por debajo del temido 64k.

Estoy usando AS 0.8.11 ahora.

Respuestas:


57

Intente agregar esta línea en su proyecto.

dex.force.jumbo = verdadero

Lo que incrementa el límite de cadenas en archivos dex. Y su proyecto probablemente se compilará.

Nota: También con jumbo set, el es otro límite de 64K solo para métodos en un solo dex. Si obtiene este límite en el futuro, deberá eliminar algunas dependencias.

Actualización - Servicios de Google Play 6.5 (12-08-14)

Con la versión 6.5, Google finalmente separó los servicios de Google Play. Entonces, de ahora en adelante, será posible compilar selectivamente las API en su ejecutable.

Ejemplo:

compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'

Para todas las demás API individuales de Google Play Services, consulte esta página en d.android.com.

Actualización (21-04-2015): https://developer.android.com/tools/building/multidex.html


11
Agregar project.propertiesno funcionó, así que actualicé mi script de compilación de Gradle como se describe aquí: stackoverflow.com/questions/17320088/…
— Martynas Jurkus

1
Hice ambas soluciones: agregando la propiedad dex.force.jumbo y dexOptions pero sigo recibiendo el mismo error. ¿Otra opción?
— Juan Saravia


Gracias @HareshChhelana. Por alguna razón empezó a funcionar ... pero realmente no hice nada especial. Tengo algunos compañeros de trabajo que están compilando el proyecto sin estas opciones, pero ahora me está funcionando. ¡Gracias!
— Juan Saravia

1
en lugar de compilar todos los servicios de Google Play, encontré que usar el paquete 'base' es útil, para permanecer por debajo del límite de 65K dex:compile 'com.google.android.gms:play-services-base:7.3.0'
— kip2

245

Establezca la propiedad jumboMode en build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

También encontré esto útil: Mostrar el recuento de métodos dex por paquete .


12
¡Gracias! También me funciona. Pero, ¿qué significa este "jumboMode"?
— yital9

3
@ yital9 puede obtener más información sobre el modo jumbo aquí: stackoverflow.com/a/30517283/4034572
— Albert Vila Calvo

explique el motivo de este bloqueo
— eC Droid

Agregué este tipo de compilación de depuración interna solo ya que la compilación de lanzamiento funciona bien, debido a proguard. La compilación de depuración salió bien después de esta modificación. ¿Está bien esto?
— granate

1
Esto funciona para mi. Tenga en cuenta que el build.gradle que se cambiará debe ser el módulo que arroja com.android.dex.DexException.
— Francis Bacon

54

Esto funciona para mi. Yo estaba consiguiendocom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

Si esto no funciona, es posible que haya alcanzado el límite de referencia del método en dex, que es un problema diferente. Debe utilizar multidex o proGuard.


Es trabajo para mi. ¡¡¡Gracias!!! pero ¿qué es 'jumboMode'? ¿Me puedes explicar por favor? @Sayooj
— DG

13

Este es un error en la fusión cuando los archivos dex que se fusionan tienen más de 65536 cadenas. El nuevo índice no puede caber en una instrucción const-string, y la fusión dex no admite el cambio de instrucciones si son de diferentes tamaños, por lo que no se puede ampliar a una instrucción const-string / jumbo. jb-mr1 agregando una nueva opción: --force-jumbo. Este error se puede corregir agregando "dex.force.jumbo=true"a project.properties.


1
@DeepakSharma Tienes que limpiar tu proyecto después de habilitar jumboMode
— Lilo

-1

Con la última versión de Android Studio y la marca "force jumbo" marcadas en la configuración del compilador de Android Studio, este problema desaparece.


3
Si es posible, agregue algunos detalles en su respuesta, por favor.
— shA.t
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.