Android dex donne une BufferOverflowException lors de la construction


174

Lors de la compilation d'un projet Android spécifique, et uniquement sur ma machine Windows, j'obtiens un java.nio.BufferOverflowExceptionpendant de dex. Le problème se produit à la fois lors de l'utilisation d'Eclipse et lors de l'utilisation d'Ant.

La sortie lors de l'utilisation d'Ant est:

...
  [dex] Pre-Dexing C:\MyProject\libs\android-support-v4.jar -> android-support-v4-5f5341d3c1b10a79d7d93f9c1e64421e.jar
  [dex] Converting compiled files and external libraries into C:\MyProject\bin\classes.dex...
   [dx]
   [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
   [dx] java.nio.BufferOverflowException
   [dx]     at java.nio.Buffer.nextPutIndex(Buffer.java:499)
   [dx]     at java.nio.HeapByteBuffer.putShort(HeapByteBuffer.java:296)
   [dx]     at com.android.dex.Dex$Section.writeShort(Dex.java:818)
   [dx]     at com.android.dex.Dex$Section.writeTypeList(Dex.java:870)
   [dx]     at com.android.dx.merge.DexMerger$3.write(DexMerger.java:437)
   [dx]     at com.android.dx.merge.DexMerger$3.write(DexMerger.java:423)
   [dx]     at com.android.dx.merge.DexMerger$IdMerger.mergeUnsorted(DexMerger.java:317)
   [dx]     at com.android.dx.merge.DexMerger.mergeTypeLists(DexMerger.java:423)
   [dx]     at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:163)
   [dx]     at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
   [dx]     at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
   [dx]     at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
   [dx]     at com.android.dx.command.dexer.Main.run(Main.java:230)
   [dx]     at com.android.dx.command.dexer.Main.main(Main.java:199)
   [dx]     at com.android.dx.command.Main.main(Main.java:103)

BUILD FAILED
C:\Users\Jaap\android-sdks\tools\ant\build.xml:892: The following error occurred while executing this line:
C:\Users\Jaap\android-sdks\tools\ant\build.xml:894: The following error occurred while executing this line:
C:\Users\Jaap\android-sdks\tools\ant\build.xml:906: The following error occurred while executing this line:
C:\Users\Jaap\android-sdks\tools\ant\build.xml:284: null returned: 2

Lorsque vous utilisez Eclipse, le message est plus court mais similaire:

[2013-11-01 14:29:44] APK file is not created for Project: 
[2013-11-01 14:29:46 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
[2013-11-01 14:29:46 - MyProject] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

Comme je l'ai dit, je n'ai pas ce problème sur mon MacBook, même s'ils sont tous deux mis à niveau vers les dernières versions des outils Android Build: 19.0.0.


1
Utilisez-vous des bibliothèques? Vérifiez leur configuration
Sherif elKhatib

@SherifelKhatib, juste la bibliothèque de support et Google Analytics V2
beetstra

10
Puisque personne ne semblait avoir déposé une question sur ce encore, je l' ai déposé un à: code.google.com/p/android/issues/detail?id=61710
CommonsWare

essayer en supprimant tous les sdk, éclipse et code Android.
vpathak

obtention d'une erreur similaire sur Centos x64:! SESSION 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Constantes Oracle Corporation BootLoader: OS = linux, ARCH = x86_64, WS = gtk, NL = en_US Arguments du framework: -product com.android.ide.eclipse.adt.package.product Arguments de ligne de commande: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException à java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl

Réponses:


230

Pas besoin de rétrograder les outils de build vers 18.1.1 1 , ce problème est résolu avec les outils de build 19.0.1 .

Si vous ne pouvez pas utiliser 19.0.1 pour une raison quelconque, alors:

Assurez-vous que la valeur de android:targetSdkVersion dans AndroidManifest.xml correspond target=android-<value>à project.properties . Si ces deux valeurs ne sont pas les mêmes, la création avec la version 19.0.0 des outils de génération se terminera par BufferOverflowException. La source

Les commentaires sur ce post indiquent également que vous devez cibler au moins 19 (android-19). Veuillez laisser un commentaire si cette solution fonctionne également si votre cible est <19.

Voici à quoi ressemble le correctif pour mon projet. Le problème AOSP associé est # 61710.

1 Si vous avez vraiment besoin de rétrograder, vous n'avez pas besoin de désinstaller les outils de compilation 19.0.0, installez simplement 18.1.1 et ajoutez sdk.buildtools=18.1.1 au local.propertiesfichier.


5
Cela n'a pas fonctionné pour moi. Vérifié tous les project.properties et targetSdk. J'utilise la dernière version d'IntelliJ IDEA 13 Cardea. Heureusement, la désinstallation de build-tools 19.0.0 a corrigé la construction.
James Wald

3
Pour que cela fonctionne, j'ai également dû définir le SDK cible sur la dernière version (19).
RolandK

Et assurez-vous également que la version SDK cible est téléchargée avec votre gestionnaire SDK (c'est la cause de mon problème).
mrmoment

1
J'avais la cible 10 dans AndroidManifest.xml et project.properties. J'ai essayé de redémarrer Eclipse et de nettoyer, mais n'a pas aidé. Ensuite, j'ai défini la cible sur 19 dans config.properties et cela a fonctionné. Je n'ai pas essayé de rétrograder les outils de construction. (La cible 15 n'a pas fonctionné)
thomasa88

5
Définir targetSdkVersion dans le manifeste et la cible dans les propriétés à 19 a fonctionné pour moi
Jaldip Katre

83

Essayez ce que van a dit:

Faites un clic droit sur projectandroid toolsandroid support library.

J'espère que cela t'aides :)


19
Merci pour cette solution, juste deux clics et le problème a été résolu !!!!! (bien que dans mon menu, c'était "ajouter une bibliothèque de support")
Christopher

57

Même problème ici. Revenu pour construire les outils 18.1.1, redémarré Eclipse et cela l'a corrigé.


3
Oui, cela a réglé le problème. J'ai dû supprimer manuellement l'ancien répertoire 19.0.0.
beetstra

Cela a résolu le
problème

1
J'ai utilisé cette réponse et je n'ai pas eu à revenir en arrière: stackoverflow.com/questions/19727915/...
Jon

J'ai vérifié tous les project.properties et targetSdk. J'utilise la dernière version d'IntelliJ IDEA 13 Cardea et j'ai également joué avec la version SDK du projet. La désinstallation de build-tools 19.0.0 était le seul moyen de corriger la build de mon projet.
James Wald

1
Merci. Revenir aux outils de construction 18.1.1 et supprimer 19 a résolu ce problème pour moi. Je pensais que je devenais fou
Darren

50

J'ai pu construire mon projet problématique en ajoutant cette ligne supplémentaire:

sdk.build.tools=18.1.1

... à mon fichier project.properties , qui est présent à la racine du dossier du projet. Toutes les autres approches semblaient échouer pour moi.


je pense que c'est aussi l'une des raisons du problème. Je n'ai jamais utilisé la version 19 dans mon sdk cible et le problème venait toujours. Les outils de construction SDK ont probablement été réglés sur 19, ce qui a dû être
rétabli

La cible utilisée ne détermine pas la version des outils de construction utilisée.
Débit

J'ai ajouté la dernière bibliothèque de support et ajouté cette ligne aux propriétés du projet et mon problème a été corrigé ... merci
speedynomads

Je suis surpris que cela a fonctionné; c'est dans la source AOSP sdk.buildtools, non sdk.build.tools, et c'est le nom qui a fonctionné pour moi.
Yoni Samlan

7

Faites un clic droit sur le projet >> Propriétés >> Android >> Le niveau d'API 18 a fonctionné pour moi. Mais avant cela, j'ai fait un clic droit sur le projet >> Outils Android >> Ajouter une bibliothèque de support et redémarré Eclipse . Vous devrez peut-être jouer avec le niveau d' API sélectionné .


3
Qu'en est-il du niveau d'API inférieur à 18? Comment pouvons-nous exécuter une application en dessous du niveau d'API 18?
Jayesh

J'ai dû ajouter un projet-> Outils Android-> Ajouter une bibliothèque de support et installer la bibliothèque de support ADT 19.0.1. Après cela, il génère une amende apk.
user914425

7

Après l'installation du nouveau SDK, il y a un nouveau dossier, "Android Dependencies", sous votre fichier de projet. Si vous cliquez avec le bouton droit de la souris et que vous le supprimez du chemin de génération, vous pourrez à nouveau générer votre projet.


J'ai remarqué que ce dossier provoquerait un problème de JAR en double. Mais sa suppression n'a pas résolu mon problème.
Salsero69

@ Salsero69 Utilisez-vous un projet de bibliothèque comme référence dans votre projet actuel?
Mahendra Liya

5

Mettre à jour

right click your project > android tools > android support library

Nettoyez votre projet et essayez de construire.



3

J'ai résolu ce problème sans télécharger la bibliothèque de support ou restaurer les outils de construction à 18.1.1. J'ai simplement changé le niveau d'API à 16+ et le problème a disparu . J'espère que cela aidera.


Comment avez-vous changé le niveau d'API à 16?
Peter Mortensen

J'ai simplement fait un clic droit sur mon projet et sélectionné Android dans la liste. Il devrait afficher une liste des versions d'API Android installées, sélectionnez celle qui a 16 comme niveau d'API (4.1.2).
Zsolt Boldizsár

3

Aucune des autres solutions présentées ici n'a fonctionné pour moi après la mise à niveau vers Android Studio 0.4.0 et Gradle 1.9.

J'ai résolu le problème en téléchargeant Build Tools 19.0.1 et en mettant à jour la ligne suivante dans mes fichiers build.gradle:

buildToolsVersion '19.0.0'

à

buildToolsVersion '19.0.1'

Oui, ce problème semble résolu dans 19.0.1. A également bien fonctionné avec "ant debug".
Robert

2

Pour ceux qui rencontrent des problèmes avec IntelliJ IDEA 13, désinstallez Build Tools 19.


2

Eu le même problème avec la version cible 19sur les deux project.propertieset AndroidManifest.xmlavec Ant.

Corrigé par:

  • Désinstallé Android SDK Build-Tools 19.0.1
  • installée Android SDK Build-Tools 19.0.2

Je pense que @ Al-Kathiri-Khalid est parfait. Le problème est uniquement dû à l'absence de prise en charge du niveau API dans les outils de construction.


1

J'ai eu le même problème, bien que mon projet n'utilise pas la bibliothèque de support. L'ajout de libs / android-support-v4.jar au projet a permis de contourner le problème sans avoir besoin de rétablir les outils de compilation de la v19.


1

J'ai résolu ce problème. Effectuez simplement cette modification dans le fichier de propriétés du projet:

target=android-18
sdk.build.tools=18.1.1

Et dans le fichier manifeste:

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"

0

Ajoutez le fichier de bibliothèque dans le projet .. Projet-> clic droit-> Propriétés-> android-> Bibliothèque-> cliquez sur Ajouter et sélectionnez le projet de bibliothèque et donnez appliquer et ok .. puis, nettoyez le projet et exécutez à nouveau .. si vous veux redémarrer l'éclipse ..

Et aussi, parfois, besoin de mettre à jour les outils de création du SDK Android.


0

Voici ce qui a fonctionné pour moi: j'ai ouvert le fichier project.properties à la racine de mon projet et je l'ai changé target=android-8entarget=android-17


0

java.nio.BufferOverflowException pendant une erreur de dex Cela signifie que vous ne disposez pas de l' API de support pour ce niveau et que la construction échoue, il existe plusieurs façons de résoudre ce problème.

Vérifiez votre fichier manifeste uses-sdk android: minSdkVersion = "4" et android: targetSdkVersion = "14"

L'un des éléments ci-dessous résoudra le problème: -

  • Téléchargez le niveau d' API requis (cela peut prendre du temps) et réexécutez votre application
  • Correction rapide de modification de la cible de votre projet dans project.properties en votre nouvelle cible cible = android-4
  • Correctif de nettoyage rapide, modifiez la SdkVersion dans votre manifeste et nettoyez votre projet pour ajouter les modifications à votre project.properties (Mon préféré)

0

J'ai supprimé le SDK Android précédent et Eclipse . J'ai installé le bundle ADT et ça marche ...

Cela a résolu le problème de BufferOverflow sur Dex qui a commencé après avoir obtenu l' API 19. J'utilisais auparavant Eclipse avec Android SDK installé en tant que package complémentaire.


D'où puis-je installer le bundle adt?
Jayesh

0

Faites un clic droit sur Projet >> Propriétés >> Android et sélectionnez Niveau d'API supérieur à 15

OU

Ajoutez google-play-services_lib à votre projet en faisant un clic droit sur le projet et en sélectionnant Projet >> Propriétés >> Android >> Ajouter

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.