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 tools เวอร์ชันล่าสุด: 19.0.0


1
คุณใช้ห้องสมุดหรือไม่ ตรวจสอบการตั้งค่าของพวกเขา
Sherif elKhatib

@SherifelKhatib เพียงห้องสมุดสนับสนุนและ Google Analytics V2
beetstra

10
เนื่องจากดูเหมือนว่าไม่มีใครได้ยื่นเรื่องนี้ฉันจึงส่งเรื่องหนึ่งไปที่: code.google.com/p/android/issues/detail?id=61710
CommonsWare

พยายามโดยลบ android sdk, eclipse และรหัสทั้งหมด
vpathak

การรับข้อผิดพลาด simiar บน 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 = ข้อโต้แย้งเฟรมเวิร์ก: -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)
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 เวอร์ชันล่าสุด โชคดีที่การถอนการติดตั้งเครื่องมือสร้าง 19.0.0 ได้แก้ไขการสร้าง
James Wald

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

ลองสิ่งที่Vanพูด:

คลิกขวาของคุณproject→การ→การandroid toolsandroid support library

หวังว่าจะช่วย :)


19
ขอบคุณสำหรับการแก้ปัญหานี้เพียงแค่คลิกสองครั้งและปัญหาได้รับการแก้ไข !!!!! (แม้ว่าในเมนูของฉันมันคือ "เพิ่มห้องสมุดสนับสนุน")
Christopher

57

ปัญหาเดียวกันที่นี่ เปลี่ยนกลับเป็นเครื่องมือสร้าง 18.1.1 รีสตาร์ท Eclipse และแก้ไข


3
ใช่ว่าแก้ไขแล้ว ต้องลบไดเรกทอรี 19.0.0 เก่าด้วยตนเองว่า
beetstra

นี้คงได้สำหรับเรา แต่ฉันหวนกลับไป 18.0.1
NickT

1
ฉันใช้คำตอบนี้และไม่ต้องเปลี่ยนกลับ: stackoverflow.com/questions/19727915/…
Jon

ฉันตรวจสอบ project.properties และ targetSdk ทั้งหมด ฉันใช้ IntelliJ IDEA 13 Cardea เวอร์ชันล่าสุดและเล่นกับ SDK เวอร์ชันของโครงการด้วยเช่นกัน การถอนการติดตั้งเครื่องมือสร้าง 19.0.0 เป็นวิธีเดียวที่จะแก้ไขงานสร้างสำหรับโครงการของฉัน
James Wald

1
ขอบคุณ การย้อนกลับไปสร้างเครื่องมือ 18.1.1 และการลบ 19 แก้ไขปัญหานี้ให้ฉัน ฉันคิดว่าฉันบ้าไปแล้ว
Darren

50

ฉันสามารถรับโครงการปัญหาของฉันเพื่อสร้างโดยเพิ่มบรรทัดพิเศษนี้:

sdk.build.tools=18.1.1

... ไปยังไฟล์project.propertiesของฉันซึ่งมีอยู่ในรูทของโฟลเดอร์โครงการ วิธีการอื่น ๆ ทั้งหมดดูเหมือนจะล้มเหลวสำหรับฉัน


ฉันคิดว่านี่เป็นหนึ่งในเหตุผลที่อยู่เบื้องหลังปัญหา ฉันไม่เคยใช้เวอร์ชัน 19 ใน sdk เป้าหมายของฉันและยังคงมีปัญหาเกิดขึ้น อาจ SDK เครื่องมือสร้างถูกกำหนดให้ 19 ซึ่งจะต้องมีการเปลี่ยนกลับ
Saurav

เป้าหมายที่ใช้ไม่ได้ระบุรุ่น buildtools ที่ใช้
Flow

ฉันเพิ่มห้องสมุดสนับสนุนล่าสุดและเพิ่มบรรทัดนี้ในคุณสมบัติโครงการและปัญหาของฉันได้รับการแก้ไข ... ขอบคุณ
speedynomads

ฉันประหลาดใจที่งานนี้; มันอยู่ในแหล่ง AOSP เหมือนsdk.buildtoolsไม่ใช่sdk.build.toolsและนั่นคือชื่อที่ใช้งานได้สำหรับฉัน
Yoni Samlan

7

คลิกขวาที่โครงการ >> คุณสมบัติ >> Android >> API ระดับ 18 ทำงานสำหรับฉัน แต่ก่อนที่ผมว่าผมไม่คลิกขวาที่โครงการ >> เครื่องมือ Android >> เพิ่มห้องสมุดสนับสนุนและเริ่มต้นใหม่คราส คุณอาจต้องเล่นกับระดับAPI ที่คุณเลือก


3
ระดับ API ต่ำกว่า 18 มีอะไรบ้าง เราจะเรียกใช้แอปพลิเคชันด้านล่าง API ระดับ 18 ได้อย่างไร
Jayesh

ฉันต้องเพิ่มโครงการ -> เครื่องมือ Android-> เพิ่มห้องสมุดสนับสนุนและติดตั้งไลบรารีสนับสนุน ADT 19.0.1 หลังจากนั้นจะสร้าง apk ที่ดี
user914425

7

หลังการติดตั้ง SDK ใหม่มีโฟลเดอร์ใหม่ "Android Dependencies" ภายใต้ไฟล์โครงการของคุณ หากคุณคลิกขวาและลบออกจากเส้นทางการสร้างคุณจะสามารถสร้างโครงการของคุณอีกครั้ง


ฉันสังเกตเห็นว่าโฟลเดอร์นี้จะทำให้เกิดปัญหาซ้ำ JAR แต่การลบมันไม่ได้แก้ปัญหาของฉัน
Salsero69

@ Salsero69 คุณใช้โครงการห้องสมุดเป็นข้อมูลอ้างอิงในโครงการจริงของคุณหรือไม่?
Mahendra Liya

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?
Peter Mortensen

ฉันคลิกขวาที่โครงการของฉันและเลือก Android จากรายการ มันควรจะแสดงรายการของ Android API เวอร์ชันที่ติดตั้งเลือกอันที่มี 16 เป็นระดับ API (4.1.2)
Zsolt Boldizsár

3

ไม่มีวิธีแก้ปัญหาอื่นที่นี่ใช้ได้สำหรับฉันหลังจากอัปเกรดเป็น Android Studio 0.4.0 และ Gradle 1.9

ฉันแก้ไขปัญหาด้วยการดาวน์โหลดเครื่องมือสร้าง 19.0.1 และอัปเดตบรรทัดต่อไปนี้ในไฟล์ build.gradle ของฉัน:

buildToolsVersion '19.0.0'

ถึง

buildToolsVersion '19.0.1'

ใช่ดูเหมือนว่าปัญหานี้จะได้รับการแก้ไขใน 19.0.1 ทำงานได้ดีด้วย "ant debug"
Robert

2

สำหรับปัญหาที่เผชิญกับ IntelliJ IDEA 13 ให้ถอนการติดตั้ง Build Tools 19


2

มีปัญหาเดียวกันกับเวอร์ชันเป้าหมาย19ทั้งproject.propertiesและAndroidManifest.xmlAnt

แก้ไขโดย:

  • ถอนการติดตั้ง 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

เพิ่มไฟล์ Library ในโปรเจ็กต์ .. โครงการ -> คลิกขวา -> คุณสมบัติ -> android-> Library-> คลิกเพิ่มและเลือกไลบรารี่โปรเจ็กต์แล้วเลือก Apply และตกลง .. จากนั้นทำความสะอาดโครงการและทำงานอีกครั้ง .. หากคุณ ต้องการรีสตาร์ทคราส ..

และบางครั้งจำเป็นต้องอัปเดตเครื่องมือสร้าง Android SDK


0

สิ่งที่ใช้ได้ผลสำหรับฉันคือ: ฉันเปิดไฟล์ project.properties จากรูทของโครงการและเปลี่ยนtarget=android-8เป็นtarget=android-17


0

java.nio.BufferOverflowException ระหว่างข้อผิดพลาดจาก dex ซึ่งหมายความว่าคุณไม่มีAPI ที่สนับสนุนสำหรับระดับนั้นดังนั้นการบิลด์ล้มเหลวมีหลายวิธีที่คุณสามารถแก้ไขได้

ตรวจสอบไฟล์ Manifest ของคุณ use-sdk android: minSdkVersion = "4" และ android: targetSdkVersion = "14"

ข้อใดข้อหนึ่งต่อไปนี้จะแก้ไขปัญหา: -

  • ดาวน์โหลดระดับAPI ที่ต้องการ (อาจใช้เวลา) และเรียกใช้แอปพลิเคชันของคุณอีกครั้ง
  • โปรแกรมแก้ไขสกปรกด่วนเปลี่ยนเป้าหมายโครงการของคุณในproject.properties เป็นเป้าหมายใหม่= android-4
  • แก้ไขการล้างข้อมูลด่วนเปลี่ยนSdkVersionในรายการของคุณและล้างโครงการของคุณเพื่อเพิ่มการเปลี่ยนแปลงในโครงการของคุณคุณสมบัติ (รายการโปรดของฉัน)

0

ฉันออก SDK Android ก่อนหน้านี้และEclipse ฉันติดตั้งชุดADTและใช้งานได้ ...

สิ่งนี้แก้ไขปัญหาของ BufferOverflow บน Dex ที่เริ่มต้นหลังจากที่ฉันได้รับAPI 19 ก่อนหน้านี้ฉันเคยใช้ Eclipse กับ Android SDK ที่ติดตั้งเป็นแพ็คเกจเสริม


ฉันจะติดตั้งชุด adt ได้จากที่ใด
Jayesh

0

คลิกขวาที่โครงการ >> คุณสมบัติ >> Android และเลือกระดับ API ที่มากกว่า 15

หรือ

เพิ่ม google-play-services_lib ในโครงการของคุณโดยคลิกขวาที่โครงการและเลือกโครงการ >> คุณสมบัติ >> Android >> เพิ่ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.