DexException: impossible de fusionner le nouvel index 65536 dans une instruction non jumbo


84

Pour une raison inconnue, mon application ne sera soudainement pas créée à partir d'Android Studio.

Je continue à avoir

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

Alors que la même application est créée avec succès à partir de la ligne de commande. J'ai vérifié le nombre de références de méthode et c'est bien en dessous des 64k redoutés.

J'utilise AS 0.8.11 maintenant.

Réponses:


57

Essayez d'ajouter cette ligne sur votre projet.

dex.force.jumbo = vrai

Qui incrémente la limite pour les chaînes dans un fichier dex. Et votre projet sera probablement compilé.

Remarque: également avec le jeu jumbo, il existe une autre limite de 64 Ko uniquement pour les méthodes d'un seul dex. Si vous obtenez cette limite à l'avenir, vous devrez supprimer certaines dépendances.

Mise à jour - Services Google Play 6.5 (12-08-14)

Avec la version 6.5, Google a finalement dégroupé les services Google Play. Ainsi, à partir de maintenant, il sera possible de compiler sélectivement les API dans votre exécutable.

Exemple :

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

Pour toutes les autres API des services Google Play, consultez cette page sur d.android.com.

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


11
L'ajout à project.propertiesn'a pas fonctionné, j'ai donc mis à jour mon script de construction gradle comme décrit ici: stackoverflow.com/questions/17320088/…
Martynas Jurkus

1
J'ai fait les deux solutions: ajouter la propriété dex.force.jumbo et dexOptions mais je reçois toujours la même erreur. Une autre option?
Juan Saravia


Merci @HareshChhelana. Pour une raison quelconque, cela a commencé à fonctionner ... mais je n'ai vraiment rien fait de spécial. J'ai des collègues qui compilent le projet sans cette option, mais maintenant cela fonctionne pour moi. Merci!
Juan Saravia

1
au lieu de compiler l'intégralité des services Google Play, j'ai trouvé utile d'utiliser le bundle `` de base '' pour rester en dessous de la limite de dex de 65K:compile 'com.google.android.gms:play-services-base:7.3.0'
kip2

245

Définissez la propriété jumboMode dans build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

J'ai également trouvé cela utile: Affichage du nombre de méthodes dex par package .


12
Merci! Ça marche pour moi aussi. Mais que signifie ce "jumboMode"?
yital9

3
@ yital9, vous pouvez en savoir plus sur le mode jumbo ici: stackoverflow.com/a/30517283/4034572
Albert Vila Calvo

veuillez expliquer la raison de ce blocage
eC Droid

J'ai ajouté ce type de construction de débogage interne seul car la version de version se déroule bien, à cause de proguard. La version de débogage s'est bien déroulée après cette modification. Est-ce bien?
grenat du

1
Cela fonctionne pour moi. Notez que le build.gradle à modifier doit être le module qui lance com.android.dex.DexException.
Francis Bacon

54

Cela fonctionne pour moi. Je recevaiscom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

Si cela ne fonctionne pas, vous avez peut-être atteint la limite de référence de méthode dans dex, ce qui est un problème différent. Vous devez utiliser multidex ou proGuard.


C'est du travail pour moi. Merci!!! mais qu'est-ce que «jumboMode»? Pouvez-vous m'expliquer? @Sayooj
DG

13

Il s'agit d'un bogue dans la fusion lorsque les fichiers dex qui sont fusionnés ont plus de 65536 chaînes. Le nouvel index ne peut pas tenir dans une instruction const-string, et la fusion dex ne prend pas en charge la modification des instructions si elles sont de tailles différentes, il ne peut donc pas être élargi à une instruction const-string / jumbo. jb-mr1 en ajoutant une nouvelle option: --force-jumbo. Ce bogue peut être corrigé en ajoutant "dex.force.jumbo=true"à project.properties.


1
@DeepakSharma Vous devez nettoyer votre projet après avoir activé jumboMode
Lilo

-1

Avec le dernier Android Studio et le drapeau "force jumbo" coché dans les paramètres du compilateur Android Studio, ce problème disparaît.


3
Si c'est possible, ajoutez quelques détails dans votre réponse, plz.
shA.t
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.