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.

Martynas Jurkus
fuente

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

Haresh Chhelana
fuente
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
@ juancho, Verifique: developer.android.com/google/play-services/setup.html#split
Haresh Chhelana
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 .

lydia_schiff
fuente
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.

Sayooj
fuente
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.

goonerDroid
fuente
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.

SamuraiCanción
fuente
3
Si es posible, agregue algunos detalles en su respuesta, por favor.
shA.t