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.