DexException: impossibile unire il nuovo indice 65536 in un'istruzione non jumbo


84

Per qualche motivo sconosciuto la mia app improvvisamente non verrà creata da Android Studio.

Continuo a ricevere

> 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!

Mentre la stessa applicazione viene creata con successo dalla riga di comando. Ho controllato il conteggio dei riferimenti al metodo ed è molto al di sotto dei temuti 64k.

Sto usando AS 0.8.11 ora.

Risposte:


57

Prova ad aggiungere questa riga al tuo project.properties

dex.force.jumbo = true

Che incrementa il limite per le stringhe in un file dex. E il tuo progetto probabilmente verrà compilato.

Nota: anche con il set jumbo, esiste un altro limite di 64 KB solo per i metodi in un unico dex. Se si ottiene questo limite in futuro, sarà necessario rimuovere alcune dipendenze.

Aggiornamento - Google Play Services 6.5 (12-08-14)

Con la versione 6.5 Google ha finalmente disaggregato i servizi di Google Play. Quindi d'ora in poi sarà possibile compilare selettivamente le API nel tuo eseguibile.

Esempio :

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

Per tutte le altre API individuali di Google Play Services controlla questa pagina su d.android.com.

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


11
Aggiungendo al project.propertiesnon ha funzionato così ho aggiornato il mio script di build Gradle come descritto qui: stackoverflow.com/questions/17320088/...
Martynas Jurkus

1
Ho fatto entrambe le soluzioni: aggiunta della proprietà dex.force.jumbo e dexOptions ma continuo a ricevere lo stesso errore. Un'altra opzione?
Juan Saravia


Grazie @HareshChhelana. Per qualche motivo ha iniziato a funzionare ... ma non ho fatto niente di speciale. Ho alcuni colleghi che stanno compilando il progetto senza queste opzioni, ma ora funziona per me. Grazie!
Juan Saravia

1
invece di compilare l'intero Google Play Services, ho trovato utile utilizzare il bundle "base", per rimanere al di sotto del limite di 65K dex:compile 'com.google.android.gms:play-services-base:7.3.0'
kip2

245

Imposta la proprietà jumboMode in build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

Ho anche trovato utile questo: mostrare il conteggio del metodo dex per pacchetto .


12
Grazie! Funziona anche per me. Ma cosa significa questo "jumboMode"?
yital9

3
@ yital9 puoi saperne di più sulla modalità jumbo qui: stackoverflow.com/a/30517283/4034572
Albert Vila Calvo

spiega il motivo di questo blocco
eC Droid

Ho aggiunto questo tipo di build di debug da solo mentre la build di rilascio va bene, a causa di proguard. La build di debug è andata bene dopo questa modifica. Va bene?
granato

1
Questo funziona per me. Nota che il build.gradle da modificare dovrebbe essere il modulo che lancia com.android.dex.DexException.
Francis Bacon

54

Questo funziona per me. Stavo ottenendocom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

Se questo non funziona, potresti aver raggiunto il limite di riferimento del metodo in dex, il che è un problema diverso. È necessario utilizzare multidex o proGuard.


È lavoro per me. Grazie!!! ma cos'è "jumboMode"? Puoi spiegarmi per favore? @Sayooj
DG

13

Questo è un bug nella fusione quando i file dex che vengono uniti hanno più di 65536 stringhe. Il nuovo indice non può rientrare in un'istruzione const-string e la fusione dex non supporta la modifica delle istruzioni se sono di dimensioni diverse, quindi non può essere ampliato a un'istruzione const-string / jumbo. jb-mr1 aggiungendo una nuova opzione: --force-jumbo. Questo bug può essere risolto aggiungendo "dex.force.jumbo=true"a project.properties.


1
@DeepakSharma Devi pulire il tuo progetto dopo aver abilitato jumboMode
Lilo

-1

Con l'ultimo Android Studio e il flag "force jumbo" selezionato nelle impostazioni del compilatore Android Studio, questo problema scompare.


3
Se è possibile, aggiungi alcuni dettagli nella tua risposta, per favore.
shA. Il
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.