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 сказал:
Щелкните правой кнопкой мыши свой project
→ android tools
→ android 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 → Добавить