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
Чи використовуєте ви бібліотеки? Перевірте їх налаштування
Шериф elKhatib

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

10
Оскільки, здається, ніхто ще не
писав

намагаючись видалити всі Android sdk, eclipse та код.
vpathak

отримання помилки simiar на Centos x64:! СЕСІЯ 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Константи BootLoader Corporation Oracle Corporation: 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 at java.nio.Buffer.nextPutIndex (Buffer.javajanju19)
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
Це не спрацювало для мене. Перевірено всі проектні властивості та targetSdk. Я використовую останню версію IntelliJ IDEA 13 Cardea. На щастя, видалення збірки-інструментів 19.0.0 виправили збірку.
Джеймс Уолд

3
Щоб я працював, мені також довелося встановити цільовий SDK до останньої версії (19).
RolandK

А також переконайтеся, що цільова версія SDK завантажується у вашого менеджера sdk (це причина моєї проблеми).
mrmoment

1
Я мав націлювати 10 на AndroidManifest.xml та project.properties. Спробував перезапустити Eclipse та очистити, але не допомогло. Потім я встановив ціль на 19 у config.properties, і вона спрацювала. Не пробували знижувати інструменти побудови. (Ціль 15 не спрацювала)
thomasa88

5
Встановлення targetSdkVersion у маніфесті та цілях у властивостях для мене працювало до 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 / ...
Jon

Я перевірив усі проектні властивості та targetSdk. Я використовую останню версію IntelliJ IDEA 13 Cardea і також граю з версією SDK проекту. Видалення збиральних інструментів 19.0.0 було єдиним способом виправити збірку для мого проекту.
Джеймс Уолд

1
Дякую. Повернення до створення інструментів 18.1.1 та видалення 19 виправили це для мене. Я думав, що я зійшов з розуму
Даррен

50

Мені вдалося скласти свій проблемний проект, додавши цю додаткову лінію:

sdk.build.tools=18.1.1

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


Я думаю, що це також одна з причин цієї проблеми. Я ніколи не використовував версію 19 у своєму цільовому SDK, і все-таки проблема виникла. Ймовірно, інструменти для створення sdk були встановлені на 19, які довелося повернути назад
saurav

Використовувана мета не визначає використану версію buildtools.
Потік

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

Я здивований, що це спрацювало; це в джерелі AOSP як sdk.buildtoolsні sdk.build.tools, і це ім'я працювало для мене.
Йоні Самлан

7

Клацніть правою кнопкою миші на проект >> Властивості >> Android >> API рівня 18 працював на мене. Але перш ніж я це зробив, я клацнув правою кнопкою миші на проект >> Інструменти Android >> Додати Бібліотеку підтримки та перезапустив Eclipse . Можливо, вам доведеться пограти з обраним рівнем API .


3
Що щодо рівня API нижче 18? Як ми можемо запустити додаток нижче рівня 18?
Jayesh

Мені довелося додати проект-> Інструменти Android-> Додати бібліотеку підтримки та встановити бібліотеку підтримки ADT 19.0.1. Після цього він генерує apk штрафу.
користувач914425

7

Після встановлення нового SDK під вашим файлом проекту є нова папка "Android Dependunities". Якщо натиснути правою кнопкою миші та видалити її зі шляху збірки, ви знову зможете створити свій проект.


Я помітив, що ця папка може спричинити повторювану проблему JAR. Але видалення не вирішило моєї проблеми.
Salsero69

@ Salsero69 Ви використовуєте бібліотечний проект як орієнтир у своєму фактичному проекті?
Махендра Лія

5

Оновлення

right click your project > android tools > android support library

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


4

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


3

Я вирішив цю проблему, не завантажуючи бібліотеку підтримки чи повертаючи інструменти збирання до 18.1.1. Я просто змінив рівень API на 16+ і проблема зникла . Сподіваюся, це допоможе.


Як ви змінили рівень API на 16?
Пітер Мортенсен

Я просто правою кнопкою миші натиснув свій проект і вибрав Android зі списку. Він повинен відображати список встановлених версій API для Android, вибирати той, який має 16 як рівень API (4.1.2).
Zsolt Boldizsár

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. Також чудово працював з "мурашиною налагодженням".
Роберт

2

Для тих, хто стикається з проблемою IntelliJ IDEA 13, видаліть Build Tools 19.


2

Була однакова проблема з цільовою версією 19на обох project.propertiesтаAndroidManifest.xml для Ant, для Ant.

Виправлено:

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

Я думаю, що @ Al-Kathiri-Khalid вийшов на місце. Проблема виникає лише через відсутність підтримки рівня API в Інструментах побудови.


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 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.properties на нову цільову ціль = android-4
  • Швидке виправлення, змініть SdkVersion у своєму маніфесті та очистіть проект, щоб додати зміни до проекту.properties (Моя улюблена)

0

Я видалив попередній Android SDK і Eclipse . Я встановив ADT пакет і він працює ...

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


Звідки я можу встановити пакет adt?
Jayesh

0

Клацніть правою кнопкою миші на Проект >> Властивості >> Android і виберіть рівень API більше 15

АБО

Додайте google-play-services_lib до свого проекту, клацнувши правою кнопкою миші на проект та вибравши Проект >> Властивості >> Android >> Додати

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.