Android dex дает исключение BufferOverflowException при создании

При компиляции определенного Android-проекта и только на моем компьютере с Windows я получаю java.nio.BufferOverflowException во время dex. Проблема возникает как при использовании Eclipse, так и при использовании Ant.

Выход при использовании Ant:

...
  [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

При использовании Eclipse сообщение короче, но похожее:

[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.

Как я уже сказал, у меня нет этой проблемы на моем MacBook, хотя они оба обновлены до последних версий инструментов Android Build: 19.0.0.

Ответ 1

Не нужно понижать инструменты сборки до 18.1.1 1 эта проблема исправлена ​​с помощью инструментов построения 19.0.1.

Если вы не можете использовать 19.0.1 по какой-либо причине:

Убедитесь, что значение android:targetSdkVersion в AndroidManifest.xml соответствует target=android-<value> в project.properties. Если эти два значения не совпадают, создание с помощью инструментов сборки версии 19.0.0 закончится в BufferOverflowException. Источник

Есть также некоторые указания по комментариям к этому сообщению, что вам нужно настроить не менее 19 (андроид-19). Пожалуйста, оставьте комментарий, если это решение также работает, если ваша цель равна < 19.

Вот как выглядит исправление для моего проекта. Связанная проблема AOSP: # 61710.

1 Если вам действительно нужно понизить, вам не нужно удалять инструменты сборки 19.0.0, просто установите 18.1.1 и добавьте sdk.buildtools=18.1.1 в файл local.properties.

Ответ 2

Попробуйте, что van сказал:

Щелкните правой кнопкой мыши свой projectandroid toolsandroid support library.

Надеюсь, что это поможет:)

Ответ 3

Такая же проблема. Вернулся для создания инструментов 18.1.1, перезапустил Eclipse и исправил его.

Ответ 4

Мне удалось создать свой проблемный проект, добавив эту дополнительную строку:

sdk.build.tools=18.1.1

... в файл project.properties, который присутствует в корне папки проекта. Все другие подходы, казалось, не помогли мне.

Ответ 5

Щелкните правой кнопкой мыши по проекту → Свойства → Android → Уровень API 18 работал у меня. Но прежде чем я сделал это, я щелкнул правой кнопкой мыши по проекту → Инструменты Android → Добавить библиотеку поддержки и перезапустил Eclipse. Возможно, вам придется поиграть с выбранным уровнем API.

Ответ 6

После установки нового SDK в вашем файле проекта есть новая папка "Android Dependencies". Если вы щелкните правой кнопкой мыши и удалите его из пути сборки, вы снова сможете создать свой проект.

Ответ 7

Обновление

right click your project > android tools > android support library

Очистите проект и попытайтесь создать.

Ответ 8

У меня была такая же проблема после обновления до версии 19. Просто не забудьте обновить ADT, https://dl-ssl.google.com/android/eclipse/. После этого мне удалось создать проект с последней версией.

Ответ 9

Я исправил эту проблему, не загрузив библиотеку поддержки или не вернув инструменты построения в 18.1.1. Я просто изменил уровень API до 16+, и проблема исчезла. Надеюсь, это поможет.

Ответ 10

Никакие другие решения здесь не работали для меня после обновления до Android Studio 0.4.0 и Gradle 1.9.

Я решил проблему, загрузив Build Tools 19.0.1 и обновив следующую строку в файлах build.gradle:

buildToolsVersion '19.0.0'

к

buildToolsVersion '19.0.1'

Ответ 11

Для тех, кто сталкивается с проблемой с IntelliJ IDEA 13, удалите Build Tools 19.

Ответ 12

Имела ту же проблему с целевой версией 19 на project.properties и AndroidManifest.xml с Ant.

Исправлено:

  • Uninstalled Android SDK Build-Tools 19.0.1
  • Установлен Android SDK Build-Tools 19.0.2

Я думаю, что @Аль-Катири-Халид - это место. Проблема связана только с отсутствием поддержки уровня API в Build Tools.

Ответ 13

У меня была такая же проблема, хотя в моем проекте не использовалась библиотека поддержки. Добавление libs/android-support-v4.jar в проект работало над проблемой без необходимости возвращать инструменты сборки обратно из v19.

Ответ 14

Я решил эту проблему. Просто внесите это изменение в файл свойств проекта:

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

И в файле манифеста:

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

Ответ 15

Я удалил предыдущий Android SDK и Eclipse. Я установил пакет ADT, и он работает...

Это фиксировало проблему BufferOverflow на Dex, которая началась после того, как я получил API. Я ранее использовал Eclipse с Android SDK, установленным как дополнение -он.

Ответ 16

Добавить файл библиотеки в проект..   Project- > щелкните правой кнопкой мыши- > Свойства- > android- > Library- > нажмите "Добавить" и выберите "Проект библиотеки" и примените его и нажмите "ОК".  затем очистите проект и снова запустите. Если вы хотите перезапустить затмение..

А также иногда нужно обновлять инструменты для создания SDK для Android.

Ответ 17

Что для меня работало: Я открыл файл project.properties из корня моего проекта и изменил target=android-8 на target=android-17

Ответ 18

java.nio.BufferOverflowException во время ошибки dex Это означает, что у вас нет поддерживающего API для этого уровня, поэтому сборка не выполняется, есть несколько способов исправить это.

Проверьте, использует ли ваш файл манифеста -sdk android: minSdkVersion = "4" и android: targetSdkVersion = "14"

Любая из нижеперечисленных проблем устранит проблему: -

  • Загрузите требуемый уровень API (это может занять время) и снова запустите приложение
  • Быстрое загрязнение исправляет изменение цели проекта в project.properties. к вашей новой цели target = android-4
  • Быстрое исправление, измените SdkVersion в своем манифесте и очистите ваш проект, чтобы добавить изменения в ваш project.properties(Мой любимый)

Ответ 19

Щелкните правой кнопкой мыши Project → Properties → Android и выберите уровень API более 15

ИЛИ

Добавьте google-play-services_lib в свой проект, щелкнув правой кнопкой мыши по проекту и выбрав "Проект" → "Свойства" → Android → Добавить