web-dev-qa-db-fra.com

Android dex donne une exception BufferOverflowException lors de la construction

Lors de la compilation d'un projet Android spécifique, et uniquement sur mon ordinateur Windows, je reçois un Java.nio.BufferOverflowException pendant le traitement de dex. Le problème se produit à la fois lors de l'utilisation d'Eclipse et lors de l'utilisation de Ant.

La sortie en utilisant 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 de Android Build tools: 19.0.0.

174
beetstra

Pas besoin de rétrograder les outils de construction en 18.1.11, ce problème est corrigé avec les outils de compilation 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> dans le projet . .properties . Si ces deux valeurs ne sont pas identiques, la génération avec les outils de génération, version 19.0.0, se terminera par l'exception BufferOverflowException. Source

Certains commentaires sur ce message indiquent également que vous devez cibler au moins 19 (Android-19). S'il vous plaît laissez un commentaire si cette solution fonctionne également si votre cible est <19.

Voici comment se présente le correctif pour mon projet. Le problème lié à l'AOSP est # 61710.

1 Si vous devez vraiment rétrograder, vous n'avez pas besoin de désinstaller les outils de génération 19.0.0, il suffit d'installer 18.1.1 et d'ajouter sdk.buildtools=18.1.1 au fichier local.properties.

230
Flow

Essayez ce que van a dit:

Faites un clic droit sur votre projectAndroid toolsAndroid support library.

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

83
Lolo Me

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

57
Stefano

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

sdk.build.tools=18.1.1

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

50
mrrrk

Faites un clic droit sur le projet >> Propriétés >> Android >> Niveau API 18 a travaillé pour moi. Mais auparavant, je faisais un clic droit sur le projet >> Outils Android >> Ajouter une bibliothèque de support et redémarré Eclipse . Vous devrez peut-être jouer avec votre niveau API sélectionné.

7
learner

Après l'installation du nouveau SDK, un nouveau dossier, "Dépendances Android", se trouve sous votre fichier de projet. Si vous faites un clic droit et le supprimez du chemin de génération, vous pourrez à nouveau construire votre projet.

7
Mahendra Liya

Mise à jour

right click your project > Android tools > Android support library

Nettoyez votre projet et essayez de construire.

5
Harshid

J'ai eu le même problème après la mise à jour vers la révision 19. N'oubliez pas de mettre à jour ADT, https://dl-ssl.google.com/Android/Eclipse/ . Après cela, j'ai pu construire un projet avec la dernière révision.

4
van

J'ai résolu ce problème sans télécharger la bibliothèque de support ni restaurer les outils de génération en 18.1.1. J'ai simplement changé le niveau de l'API à 16+ et le problème a dispar. J'espère que ça va aider.

3
Zsolt Boldizsár

Aucune des autres solutions ici ne fonctionnait 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'
3
Jacob Tabak

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

2
Adí

Avait le même problème avec la version cible 19 sur project.properties et AndroidManifest.xml avec Ant.

Fixé par:

  • Désinstallé Android SDK Build-Tools 19.0.1
  • Installé Android SDK Build-Tools 19.0.2

Je pense que @ Al-Kathiri-Khalid est sur place. Le problème est uniquement dû au manque de prise en charge du niveau API dans les outils de génération.

2
kontinuity

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"
1
Ravi

J'ai eu le même problème, mais mon projet n'a pas utilisé la bibliothèque de support. L'ajout de libs/Android-support-v4.jar au projet a contourné le problème sans qu'il soit nécessaire de rétablir les outils de génération depuis la v19.

1
Jim Vitek

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

OR

Ajoutez google-play-services_lib à votre projet en cliquant avec le bouton droit de la souris sur le projet et en sélectionnant Projet >> Propriétés >> Android >> Ajouter.

0
Junaid

J'ai supprimé le précédent Android SDK et Eclipse . J'ai installé le ADT et cela fonctionne ...

Cela corrigeait le problème de BufferOverflow sur Dex qui commençait après mon installation de API 19. J'utilisais auparavant Eclipse avec Android SDK installé en tant que package complémentaire.

0
vpathak

Voici ce qui a fonctionné pour moi: j’ouvre le fichier project.properties à partir de la racine de mon projet et remplace target=Android-8 par target=Android-17

0
Chinciusan Marian

Java.nio.BufferOverflowException lors d'une erreur dex Cela signifie que vous n'avez pas le API prise en charge pour ce nivea par conséquent, la construction échoue. Vous pouvez y remédier de plusieurs façons. cette.

Vérifiez votre fichier de manifeste utilise-sdk Android: minSdkVersion = "4" et Android: targetSdkVersion = "14"

N'importe lequel des problèmes ci-dessous résoudra le problème: -

  • Téléchargez l'API requise niveau (cela peut prendre du temps) et réexécutez votre application
  • Le correctif rapide modifie votre cible de projet dans project.properties en votre nouvelle cible cible = Android-4
  • Solution de nettoyage rapide, modifiez SdkVersion dans votre manifeste et nettoyez votre projet pour ajouter les modifications à votre projet.properties (Mon favori).
0
Al-Kathiri Khalid

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

Et aussi, parfois, il est nécessaire de mettre à jour Android les outils de compilation du SDK ..

0
harikrishnan