Android dex memberikan BufferOverflowException saat membangun

174

Ketika mengkompilasi proyek Android tertentu, dan hanya pada mesin Windows saya, saya mendapat waktu java.nio.BufferOverflowExceptiondari dex. Masalahnya terjadi saat menggunakan Eclipse dan saat menggunakan Ant.

Output saat menggunakan Ant adalah:

...
  [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

Saat menggunakan Eclipse pesannya lebih pendek tetapi serupa:

[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.

Seperti yang saya katakan, saya tidak memiliki masalah ini di MacBook saya, meskipun keduanya ditingkatkan ke versi terbaru dari alat Android Build: 19.0.0.

beetstra
sumber
1
Apakah Anda menggunakan perpustakaan? Periksa pengaturannya
Sherif elKhatib
@ SherifelKhatib, hanya perpustakaan dukungan dan Google Analytics V2
beetstra
10
Karena belum ada yang mengajukan masalah ini, saya telah mengajukannya di: code.google.com/p/android/issues/detail?id=61710
CommonsWare
mencoba dengan menghapus semua sdk, gerhana, dan kode android.
vpathak
mendapatkan kesalahan yang mirip pada Centos x64:! SESSION 2013-11-07 17: 07: 35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Konstanta BootLoader Oracle Corporation: OS = linux, ARCH = x86_64, WS = gtk, NL = en_US Argumen kerangka kerja: -product com.android.ide.eclipse.adt.package.product Argumen baris perintah: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException di java.nio.Buffer.nextPutIndex (Buffer.java-0519)
isti_spl

Jawaban:

230

Tidak perlu menurunkan versi alat membangun kembali ke 18.1.1 1 , masalah ini diperbaiki dengan alat membangun 19.0.1 .

Jika Anda tidak dapat menggunakan 19.0.1 karena beberapa alasan, maka:

Pastikan nilai android:targetSdkVersiondalam AndroidManifest.xml cocok target=android-<value>dengan project.properties . Jika kedua nilai ini tidak sama, membangun dengan alat membangun versi 19.0.0 akan berakhir dengan BufferOverflowException. Sumber

Ada juga beberapa indikasi dari komentar pada posting ini bahwa Anda perlu menargetkan setidaknya 19 (android-19). Silakan tinggalkan komentar jika solusi ini juga berfungsi jika target Anda <19.

Beginilah cara perbaikan terlihat untuk proyek saya. Masalah AOSP terkait adalah # 61710.

1 Jika Anda benar-benar perlu menurunkan versi, Anda tidak perlu menghapus instalasi alat 19.0.0, cukup instal 18.1.1 dan tambahkan sdk.buildtools=18.1.1ke local.propertiesfile.

Mengalir
sumber
5
Ini tidak berhasil untuk saya. Terverifikasi semua properti.properti dan targetSdk. Saya menggunakan versi terbaru dari IntelliJ IDEA 13 Cardea. Untungnya, menghapus instalan alat-alat 19.0.0 memang memperbaiki bangunan.
James Wald
3
Agar saya berfungsi, saya juga harus menetapkan target SDK ke versi terbaru (19).
RolandK
Dan juga pastikan versi target SDK diunduh dengan manajer SDK Anda (ini adalah penyebab masalah saya).
mrmoment
1
Saya memiliki target 10 di AndroidManifest.xml dan project.properties. Sudah mencoba memulai ulang Eclipse dan pembersihan, tetapi tidak membantu. Lalu saya menetapkan target ke 19 di config.properties dan berhasil. Belum mencoba menurunkan versi alat pembuatan. (Target 15 tidak bekerja)
thomasa88
5
Menetapkan targetSdkVersion dalam manifes dan target di properti, ke 19 bekerja untuk saya
Jaldip Katre
83

Coba apa kata van :

Klik kanan projectandroid tools→ → Anda android support library.

Semoga ini membantu :)

Lolo Me
sumber
19
Terima kasih atas solusi ini, hanya dua klik dan masalahnya selesai !!!!! (walaupun di menu saya, itu "tambahkan dukungan perpustakaan")
Christopher
57

Masalah yang sama disini. Dikembalikan untuk membuat alat 18.1.1, memulai kembali Eclipse dan memperbaikinya.

Stefano
sumber
3
Ya, itu memperbaikinya. Harus secara manual menghapus direktori 19.0.0 lama.
beetstra
Ini memperbaikinya untuk saya juga, meskipun saya kembali ke 18.0.1
NickT
1
Saya menggunakan jawaban ini dan saya tidak harus kembali lagi: stackoverflow.com/questions/19727915/…
Jon
Saya memverifikasi semua project.properties dan targetSdk. Saya menggunakan versi terbaru dari IntelliJ IDEA 13 Cardea dan bermain dengan versi SDK proyek juga. Menghapus instalan build-tools 19.0.0 adalah satu-satunya cara untuk memperbaiki build untuk proyek saya.
James Wald
1
Terima kasih. Kembali ke membangun alat 18.1.1 dan menghapus 19 memperbaiki ini untuk saya. Saya pikir saya akan menjadi gila
Darren
50

Saya dapat membangun proyek masalah saya dengan menambahkan baris tambahan ini:

sdk.build.tools=18.1.1

... ke file project.properties saya , yang ada di root folder proyek. Semua pendekatan lain tampaknya gagal bagi saya.

mrrrk
sumber
Saya pikir ini juga salah satu alasan di balik masalah ini. Saya tidak pernah menggunakan versi 19 di sdk target saya dan masih ada masalah. Mungkin alat membangun SDK diatur ke 19 yang harus dikembalikan kembali
Saurav
Target yang digunakan tidak menentukan versi buildtools yang digunakan.
Aliran
Saya menambahkan perpustakaan dukungan terbaru dan menambahkan baris ini ke properti proyek dan masalah saya telah diperbaiki ... terima kasih
speedynomads
Saya terkejut ini berhasil; itu dalam sumber AOSP sebagai sdk.buildtools, bukan sdk.build.tools, dan itu adalah nama yang cocok untuk saya.
Yoni Samlan
7

Klik kanan pada proyek >> Properties >> Android >> API Level 18 bekerja untuk saya. Tetapi sebelum saya melakukannya saya melakukan klik kanan pada project >> Android Tools >> Tambah Support Library dan restart Eclipse . Anda mungkin harus bermain-main dengan level API yang Anda pilih .

pelajar
sumber
3
Bagaimana dengan level API di bawah 18? Bagaimana kita menjalankan aplikasi di bawah API level 18?
Jayesh
Saya harus menambahkan project-> Android Tools-> Add Support Library dan menginstal ADT 19.0.1 Support Library. Setelah itu menghasilkan apk baik-baik saja.
user914425
7

Setelah pemasangan SDK baru, ada folder baru, "Android Dependencies", di bawah file proyek Anda. Jika Anda mengklik kanan dan menghapusnya dari jalur build, Anda akan dapat membangun kembali proyek Anda.

Mahendra Liya
sumber
Saya perhatikan bahwa folder ini akan menyebabkan masalah JAR duplikat. Tetapi menghapusnya tidak menyelesaikan masalah saya.
Salsero69
@ Salsero69 Apakah Anda menggunakan proyek perpustakaan sebagai referensi dalam proyek Anda yang sebenarnya?
Mahendra Liya
5

Memperbarui

right click your project > android tools > android support library

Bersihkan proyek Anda dan cobalah untuk membangun.

Harshid
sumber
4

Saya memiliki masalah yang sama setelah memperbarui ke Revisi 19. Jangan lupa untuk memperbarui ADT, https://dl-ssl.google.com/android/eclipse/ . Setelah ini, saya dapat membangun proyek dengan revisi terbaru.

mobil van
sumber
3

Saya memperbaiki masalah ini tanpa mengunduh perpustakaan dukungan atau mengembalikan alat pembuatan ke 18.1.1. Saya hanya mengubah level API ke 16+ dan masalahnya hilang . Semoga ini bisa membantu.

Zsolt Boldizsár
sumber
Bagaimana Anda mengubah level API ke 16?
Peter Mortensen
Saya cukup mengeklik proyek saya, dan memilih Android dari daftar. Itu akan muncul daftar versi API Android yang diinstal, pilih salah satu yang memiliki 16 sebagai tingkat API (4.1.2).
Zsolt Boldizsár
3

Tidak ada solusi lain di sini yang berfungsi untuk saya setelah meningkatkan ke Android Studio 0.4.0 dan Gradle 1.9.

Saya menyelesaikan masalah dengan mengunduh Build Tools 19.0.1 dan memperbarui baris berikut di file build.gradle saya:

buildToolsVersion '19.0.0'

untuk

buildToolsVersion '19.0.1'
Yakub Tabak
sumber
Ya, masalah ini tampaknya diperbaiki di 19.0.1. Juga bekerja dengan baik dengan "semut debug".
Robert
2

Untuk yang menghadapi masalah dengan IntelliJ IDEA 13, hapus instalan Alat Bangun 19.

Adí
sumber
2

Punya masalah yang sama dengan versi target 19pada keduanya project.propertiesdan AndroidManifest.xmldengan Ant.

Memperbaikinya dengan:

  • Tidak terinstal Android SDK Build-Tools 19.0.1
  • Diinstal Android SDK Build-Tools 19.0.2

Saya pikir @ Al-Kathiri-Khalid tepat. Masalah ini hanya karena tidak adanya dukungan untuk level API di Alat Bangun.

kontinuitas
sumber
1

Saya memiliki masalah yang sama, meskipun proyek saya tidak menggunakan perpustakaan dukungan. Menambahkan libs / android-support-v4.jar ke proyek mengatasi masalah tanpa perlu mengembalikan alat membangun kembali dari v19.

Jim Vitek
sumber
1

Saya memecahkan masalah ini. Buat saja perubahan ini di file properti proyek:

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

Dan dalam file manifes:

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"
Ravi
sumber
0

Tambahkan file Library dalam proyek .. Project-> klik kanan-> Properties-> android-> Library-> klik Tambah dan pilih Proyek Perpustakaan dan berikan berlaku dan ok .. lalu, bersihkan proyek dan jalankan lagi .. jika Anda ingin memulai kembali gerhana ..

Dan juga, kadang-kadang, perlu memperbarui alat membangun Android SDK ..

harikrishnan
sumber
0

Apa yang berhasil bagi saya adalah ini: Saya membuka file project.properties dari root proyek saya dan mengubahnya target=android-8menjaditarget=android-17

Chinciusan Marian
sumber
0

java.nio.BufferOverflowException selama dari dex error Ini berarti Anda tidak memiliki API pendukung untuk level itu itu maka build gagal, ada sejumlah cara untuk memperbaikinya.

Periksa file manifes Anda menggunakan-sdk android: minSdkVersion = "4" dan android: targetSdkVersion = "14"

Salah satu di bawah ini akan memperbaiki masalah: -

  • Unduh level API yang diperlukan (Ini mungkin membutuhkan waktu) dan jalankan aplikasi Anda lagi
  • Perbaikan kotor cepat mengubah target Proyek Anda di project.properties menjadi target target baru Anda = android-4
  • Perbaikan cepat, ubah SdkVersion di manifes Anda dan Bersihkan proyek Anda untuk menambahkan perubahan ke project.properties (Favorit saya)
Al-Kathiri Khalid
sumber
0

Saya menghapus Android SDK dan Eclipse sebelumnya . Saya menginstal bundel ADT dan berfungsi ...

Ini memperbaiki masalah BufferOverflow pada Dex yang dimulai setelah saya mendapatkan API 19. Saya sebelumnya menggunakan Eclipse dengan Android SDK diinstal sebagai paket tambahan.

vpathak
sumber
Dari mana saya dapat menginstal bundel adt?
Jayesh
0

Klik kanan pada Project >> Properties >> Android dan pilih API Level lebih besar dari 15

ATAU

Tambahkan google-play-services_lib ke proyek Anda dengan mengklik kanan pada proyek dan memilih Project >> Properties >> Android >> Add

Junaid
sumber