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.


person beetstra    schedule 01.11.2013    source источник
comment
Вы пользуетесь библиотеками? Проверьте их настройку   -  person Sherif elKhatib    schedule 01.11.2013
comment
@SherifelKhatib, только библиотека поддержки и Google Analytics V2   -  person beetstra    schedule 01.11.2013
comment
Поскольку никто еще не сообщал о проблеме по этому поводу, я отправил ее по адресу: code.google.com/p/android/issues/detail?id=61710   -  person CommonsWare    schedule 02.11.2013
comment
пытаясь удалить все android sdk, eclipse и code.   -  person vpathak    schedule 06.11.2013
comment
получение аналогичной ошибки на Centos x64:! SESSION 2013-11-07 17:07:35.305 eclipse.buildId=v22.3.0-887826 java.version=1.7.0_40 java.vendor=Oracle Corporation Константы BootLoader: OS=linux, ARCH= x86_64, WS=gtk, NL=en_US Аргументы платформы: -product com.android.ide.eclipse.adt.package.product Аргументы командной строки: -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)   -  person isti_spl    schedule 07.11.2013


Ответы (19)


Не нужно понижать версию инструментов сборки до версии 18.1.11, эта проблема исправлено с помощью инструментов сборки 19.0.1.

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

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

В комментариях к этому сообщению также есть указание на то, что вам нужно настроить таргетинг как минимум на 19 (android-19). Пожалуйста, оставьте комментарий, если это решение также работает, если ваша цель ‹ 19.

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

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

person Flow    schedule 13.11.2013
comment
Это не сработало для меня. Проверены все свойства проекта и targetSdk. Я использую последнюю версию IntelliJ IDEA 13 Cardea. К счастью, удаление инструментов сборки 19.0.0 исправило сборку. - person James Wald; 22.11.2013
comment
Чтобы заставить его работать, мне также пришлось установить последнюю версию целевого SDK (19). - person RolandK; 27.11.2013
comment
А также убедитесь, что целевая версия SDK загружена вашим менеджером SDK (это причина моей проблемы). - person mrmoment; 02.12.2013
comment
У меня была цель 10 как в AndroidManifest.xml, так и в project.properties. Пробовал перезапускать Eclipse и чистить, но не помогло. Затем я установил цель на 19 в config.properties, и это сработало. Не пробовал понижать версию инструментов сборки. (Цель 15 не сработала) - person thomasa88; 11.12.2013
comment
Установка targetSdkVersion в манифесте и target в свойствах на 19 сработала для меня - person Jaldip Katre; 13.12.2013
comment
Мой целевой уровень API был установлен на 10 как в манифесте, так и в свойствах проекта, для меня сработало только понижение до SDK Build-tools 17 (поскольку у меня не было установлено 18). (Кстати, я использую Intellij 13) - person PiersyP; 18.12.2013
comment
Спасибо. Целевой SDK в манифесте и целевой в файле .properties должны совпадать. Работал на меня. - person Ahmed Khalaf; 30.12.2013
comment
@JD.com у меня сработало, но почему мы должны изменить это на 19? - person twlkyao; 06.01.2014
comment
@twlkyao Ну, само название цели указывает на требование. Вероятно, это не требовалось в инструментах SDK версии ниже 22.3. - person Jaldip Katre; 06.01.2014
comment
@JD.com Означает ли это, что мы должны обновить targetSDK до последней версии? - person twlkyao; 06.01.2014
comment
@twlkyao Нет, только targetSdkVersion в манифесте и target в project.propeeties должны иметь одинаковое значение. - person Jaldip Katre; 06.01.2014
comment
@ JD.com Но почему я должен установить их только на 16 и выше, что может решить проблему. - person twlkyao; 06.01.2014
comment
target=android-17 должно быть равно android:targetSdkVersion="17" - person Pratik Butani; 17.01.2014
comment
Можно ли заставить это работать при использовании target=android-15? - person AfromanJ; 28.03.2014

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

Щелкните правой кнопкой мыши project android tools android support library.

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

person Lolo Me    schedule 06.11.2013
comment
Спасибо за это решение, всего два клика и проблема решена!!!!! (хотя в моем меню это было добавить библиотеку поддержки) - person Christopher; 12.11.2013

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

person Stefano    schedule 01.11.2013
comment
Да, это исправлено. Однако пришлось вручную удалить старый каталог 19.0.0. - person beetstra; 01.11.2013
comment
Это исправило это и для меня, хотя я вернулся к 18.0.1. - person NickT; 02.11.2013
comment
Я использовал этот ответ, и мне не пришлось возвращаться обратно: stackoverflow.com/questions/19727915/ - person Jon; 15.11.2013
comment
Я проверил все project.properties и targetSdk. Я использую последнюю версию IntelliJ IDEA 13 Cardea, а также играю с версией SDK проекта. Удаление инструментов сборки 19.0.0 было единственным способом исправить сборку для моего проекта. - person James Wald; 22.11.2013
comment
Спасибо. Возврат к инструментам сборки 18.1.1 и удаление 19 исправили это для меня. Я думал, что схожу с ума - person Darren; 23.11.2013
comment
@Stefano: мне интересно узнать, как вы пришли к выводу, что это то, что вам нужно было сделать? - person Swanand; 29.11.2013
comment
Просто чтобы другие знали: не нужно переходить на более раннюю версию, ответ от Flow лучше. - person Javier Sedano; 06.12.2013

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

sdk.build.tools=18.1.1

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

person mrrrk    schedule 18.11.2013
comment
Я думаю, что это также одна из причин проблемы. Я никогда не использовал версию 19 в своем целевом SDK, и проблема все еще не исчезла. Вероятно, для инструментов сборки sdk было установлено значение 19, которое нужно было вернуть обратно. - person saurav; 19.11.2013
comment
Используемая цель не определяет используемую версию buildtools. - person Flow; 27.11.2013
comment
Я добавил последнюю библиотеку поддержки и добавил эту строку в свойства проекта, и моя проблема была исправлена... спасибо - person speedynomads; 03.12.2013
comment
Я удивлен, что это сработало; в исходниках AOSP оно указано как sdk.buildtools, а не sdk.build.tools, и это имя мне подошло. - person Yoni Samlan; 12.12.2013

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

person learner    schedule 10.11.2013
comment
Как насчет уровня API ниже 18? Как мы можем запустить приложение ниже уровня API 18? - person Jayesh; 14.11.2013
comment
Мне пришлось добавить проект->Инструменты Android->Добавить библиотеку поддержки и установить библиотеку поддержки ADT 19.0.1. После этого он генерирует apk нормально. - person user914425; 23.07.2015

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

person Mahendra Liya    schedule 12.11.2013
comment
Я заметил, что эта папка вызовет дублирование проблемы с JAR. Но удаление не решило мою проблему. - person Salsero69; 29.11.2013
comment
@ Salsero69 Salsero69 Используете ли вы проект библиотеки в качестве эталона в своем реальном проекте? - person Mahendra Liya; 30.11.2013

Обновить

right click your project > android tools > android support library

Очистите свой проект и попробуйте собрать его.

person Harshid    schedule 03.12.2013

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

person van    schedule 04.11.2013

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

person Zsolt Boldizsár    schedule 06.12.2013
comment
Как вы изменили уровень API на 16? - person Peter Mortensen; 21.12.2013
comment
Я просто щелкнул правой кнопкой мыши свой проект и выбрал Android из списка. Он должен отобразить список установленных версий Android API, выберите ту, у которой 16 в качестве уровня API (4.1.2). - person Zsolt Boldizsár; 21.12.2013

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

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

buildToolsVersion '19.0.0'

to

buildToolsVersion '19.0.1'
person Jacob Tabak    schedule 20.12.2013
comment
Да, эта проблема исправлена ​​в 19.0.1. Также отлично работал с ant debug. - person Robert; 02.01.2014

Если у вас возникли проблемы с IntelliJ IDEA 13, удалите Build Tools 19.

person Adí    schedule 10.12.2013

Была такая же проблема с целевой версией 19 как на project.properties, так и на AndroidManifest.xml с Ant.

Исправил это:

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

Я думаю, что @Al-Kathiri-Khalid на высоте. Проблема возникает только из-за отсутствия поддержки уровня API в Build Tools.

person kontinuity    schedule 02.03.2014

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

person Jim Vitek    schedule 04.11.2013

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

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

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

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"
person Ravi    schedule 24.12.2013

Добавьте файл библиотеки в проект.. Проект-> щелкните правой кнопкой мыши-> Свойства-> android-> Библиотека-> нажмите «Добавить» и выберите «Проект библиотеки», дайте применить и «ОК».. затем очистите проект и запустите снова.. если вы хочу перезапустить затмение..

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

person harikrishnan    schedule 13.11.2013

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

person Chinciusan Marian    schedule 10.12.2013

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

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

Любой из приведенных ниже решит проблему: -

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

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

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

person vpathak    schedule 06.11.2013
comment
Откуда я могу установить пакет объявлений? - person Jayesh; 14.11.2013

Щелкните правой кнопкой мыши «Проект» >> «Свойства» >> «Android» и выберите «Уровень API больше 15».

OR

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

person Junaid    schedule 21.06.2014