Android dex дает BufferOverflowException при сборке


174

При компиляции конкретного проекта 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
Вы используете библиотеки? Проверьте их настройку
Шериф эльХатиб

@SherifelKhatib, просто библиотека поддержки и Google Analytics V2
beetstra

10
Поскольку, похоже, никто еще не подал проблему по этому вопросу, я подал ее по адресу: code.google.com/p/android/issues/detail?id=61710
CommonsWare

пытаясь удалить все Android SDK, затмение и код.
впатхак

получение аналогичной ошибки в Centos x64:! SESSION 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = константы BootLoader корпорации Oracle: 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 -продукт com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException at java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl

Ответы:


230

Нет необходимости понижать версию инструментов сборки до 18.1.1 1 , эта проблема исправлена ​​с помощью инструментов сборки 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файл.


5
Это не сработало для меня. Проверено все project.properties и targetSdk. Я использую последнюю версию IntelliJ IDEA 13 Cardea. К счастью, удаление build-tools 19.0.0 исправило сборку.
Джеймс Уолд

3
Чтобы заставить его работать, мне также пришлось установить целевой SDK на последнюю версию (19).
RolandK

А также убедитесь, что целевая версия SDK загружена с вашим менеджером SDK (это причина моей проблемы).
Мрмомент

1
У меня была цель 10 в AndroidManifest.xml и project.properties. Пробовал перезапуск Eclipse и очистку, но не помогло. Затем я установил цель на 19 в config.properties, и это сработало. Не пробовал понизить инструменты сборки. (Цель 15 не сработала)
thomasa88

5
Установка targetSdkVersion в манифесте и target в свойствах, чтобы 19 работал для меня
Jaldip Katre

83

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

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

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


19
Спасибо за это решение, всего два клика и проблема была решена !!!!! (хотя в моем меню это было «добавить поддержку библиотеки»)
Кристофер

57

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


3
Да, это исправило это. Пришлось вручную удалить старый каталог 19.0.0.
beetstra

Это исправило это и для меня, хотя я вернулся к 18.0.1
NickT

1
Я использовал этот ответ, и мне не нужно было возвращаться назад: stackoverflow.com/questions/19727915/…
Джон

Я проверил все project.properties и targetSdk. Я использую последнюю версию IntelliJ IDEA 13 Cardea и поиграл с версией SDK проекта. Удаление build-tools 19.0.0 было единственным способом исправить сборку для моего проекта.
Джеймс Уолд

1
Спасибо. Возврат к сборке инструментов 18.1.1 и удаление 19 исправили это для меня. Я думал, что схожу с ума
Даррен

50

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

sdk.build.tools=18.1.1

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


Я думаю, что это также одна из причин проблемы. Я никогда не использовал версию 19 в моей целевой SDK, и все же проблема приближалась. Вероятно, инструменты сборки SDK были установлены на 19, что пришлось вернуть назад
Саурав

Используемая цель не определяет используемую версию buildtools.
Поток

Я добавил последнюю библиотеку поддержки и добавил эту строку в свойства проекта, и моя проблема была исправлена ​​... спасибо
speedynomads

Я удивлен, что это сработало; это в источнике AOSP как sdk.buildtools, нет sdk.build.tools, и это было имя, которое работало для меня.
Йони Самлан

7

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


3
А как насчет уровня API ниже 18? Как мы можем запустить приложение ниже уровня API 18?
Джаеш

Мне пришлось добавить проект-> Инструменты Android-> Добавить библиотеку поддержки и установить ADT 19.0.1 Support Library. После этого он генерирует apk нормально.
user914425

7

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


Я заметил, что эта папка приведет к дублированию JAR-проблемы. Но удаление не решило мою проблему.
Salsero69

@ Salsero69 Используете ли вы проект библиотеки в качестве ссылки в вашем реальном проекте?
Махендра Лия

5

Обновить

right click your project > android tools > android support library

Очисти свой проект и постарайся построить.



3

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


Как вы изменили уровень API до 16?
Питер Мортенсен

Я просто щелкнул правой кнопкой мыши по своему проекту и выбрал Android из списка. Должен отобразиться список установленных версий API для Android, выберите версию с уровнем API 16 (4.1.2).
Жолт Болдиссар

3

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

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

buildToolsVersion '19.0.0'

в

buildToolsVersion '19.0.1'

Да, эта проблема, кажется, исправлена ​​в 19.0.1. Также отлично работал с "Ant Debug".
Роберт

2

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


2

Была та же проблема с целевой версией 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.


1

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


1

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

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

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

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

0

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

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


0

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


0

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

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

Любое из нижеперечисленного решит проблему: -

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

0

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

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


Откуда я могу установить пакет adt?
Джаеш

0

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

ИЛИ

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.