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.

beetstra
источник
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 , который находится в корне папки проекта. Все остальные подходы, казалось, потерпели неудачу

mrrrk
источник
Я думаю, что это также одна из причин проблемы. Я никогда не использовал версию 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

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

Harshid
источник
4

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

фургон
источник
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.

ADI
источник
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.

kontinuity
источник
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"
Ravi
источник
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, установленным в качестве дополнительного пакета.

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

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

ИЛИ

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

Junaid
источник