web-dev-qa-db-fra.com

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

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

Je continue à obtenir

> 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 construite avec succès à partir de la ligne de commande. J'ai vérifié le nombre de références de méthodes et c'est bien en dessous du 64k redouté.

J'utilise AS 0.8.11 maintenant.

83
Martynas Jurkus

Essayez d'ajouter cette ligne sur votre project.properties

dex.force.jumbo = true

Quel incrémente la limite pour les chaînes dans un fichier dex. Et votre projet va probablement se compiler.

Remarque: Également avec le jeu Jumbo, le est une autre limite de 64 Ko uniquement pour les méthodes dans un seul dex. Si vous atteignez 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. Donc, à 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 de services Google Play, vérifiez ceci page sur d.Android.com.

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

55
Haresh Chhelana

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

Android {
    ...
    dexOptions {
        jumboMode true
    }

}

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

244
lydia_schiff

Cela fonctionne pour moi. Je devenais com.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 la méthode dans dex, ce qui pose un problème différent. Vous devez utiliser multidex ou proGuard.

54
Sayooj

Il s'agit d'un bogue dans la fusion lorsque les fichiers dex qui sont fusionnés ont plus de 65 536 chaînes. Le nouvel index ne peut pas tenir dans une instruction const-string, et la fusion de dex ne prend pas en charge les instructions de changement 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 bug peut être corrigé en ajoutant "dex.force.jumbo=true" au fichier project.properties.

13
goonerDroid