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.
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
.
Essayez ce que van a dit:
Faites un clic droit sur votre project
→ Android tools
→ Android support library
.
J'espère que cela t'aides :)
Même problème ici. Revenu pour construire des outils 18.1.1, Eclipse a redémarré et qui l'a corrigé.
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.
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.
Mise à jour
right click your project > Android tools > Android support library
Nettoyez votre projet et essayez de construire.
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.
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.
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'
Pour ceux qui rencontrent un problème avec IntelliJ IDEA 13, désinstallez Build Tools 19.
Avait le même problème avec la version cible 19
sur project.properties
et AndroidManifest.xml
avec Ant.
Fixé par:
Android SDK Build-Tools 19.0.1
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.
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"
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.
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.
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
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: -
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 ..