Android dex cung cấp BufferOverflowException khi xây dựng


174

Khi biên dịch một dự án Android cụ thể và chỉ trên máy Windows của tôi, tôi nhận được một java.nio.BufferOverflowExceptionkhoảng thời gian từ dex. Vấn đề xảy ra cả khi sử dụng Eclipse và khi sử dụng Ant.

Đầu ra khi sử dụng Ant là:

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

Khi sử dụng Eclipse, thông báo ngắn hơn nhưng tương tự nhau:

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

Như tôi đã nói, tôi không gặp vấn đề này trên MacBook, mặc dù cả hai đều được nâng cấp lên các phiên bản mới nhất của công cụ Android Build: 19.0.0.


1
Bạn có sử dụng thư viện? Kiểm tra thiết lập của họ
Sherif elKhatib

@SherifelKhatib, chỉ thư viện hỗ trợ và Google Analytics V2
beetstra

10
Vì dường như chưa có ai gửi vấn đề về vấn đề này, tôi đã gửi một vấn đề tại: code.google.com/p/android/issues/detail?id=61710
CommonsWare

cố gắng bằng cách loại bỏ tất cả sdk, nhật thực và mã android.
vpathak

gặp lỗi simiar trên 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 hằng: OS = linux, ARCH = x86_64, WS = gtk, NL = en_US Đối số khung: -product com.android.ide.eclipse.adt.package.product Đối số dòng lệnh: -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException tại java.nio.Buffer.nextPutIndex (Buffer.java:519)
isti_spl

Câu trả lời:


230

Không cần hạ cấp các công cụ xây dựng trở lại 18.1.1 1 , vấn đề này được khắc phục với các công cụ xây dựng 19.0.1 .

Nếu bạn không thể sử dụng 19.0.1 vì một số lý do thì:

Hãy chắc chắn rằng giá trị của android:targetSdkVersiontrong AndroidManifest.xml phù hợp target=android-<value>trong project.properties . Nếu hai giá trị này không giống nhau, việc xây dựng với công cụ xây dựng phiên bản 19.0.0 sẽ kết thúc trong BufferOverflowException. Nguồn

Ngoài ra còn có một số dấu hiệu từ các bình luận về bài đăng này rằng bạn cần nhắm mục tiêu ít nhất là 19 (android-19). Vui lòng để lại nhận xét nếu giải pháp này cũng hoạt động nếu mục tiêu của bạn <19.

Đây là cách sửa chữa cho dự án của tôi. Vấn đề AOSP liên quan là # 61710.

1 Nếu bạn thực sự cần hạ cấp, bạn không cần gỡ cài đặt công cụ xây dựng 19.0.0, chỉ cần cài đặt 18.1.1 và thêm sdk.buildtools=18.1.1vào local.propertiestệp.


5
Điều này đã không làm việc cho tôi. Đã xác minh tất cả các dự án.properies và targetSdk. Tôi đang sử dụng phiên bản mới nhất của IntelliJ IDEA 13 Cardea. May mắn thay, gỡ cài đặt công cụ xây dựng 19.0.0 đã sửa lỗi bản dựng.
James Wald

3
Để tôi làm cho nó hoạt động, tôi cũng phải đặt SDK mục tiêu thành phiên bản mới nhất (19).
RolandK

Và cũng đảm bảo rằng phiên bản sdk đích được tải xuống với trình quản lý sdk của bạn (đây là nguyên nhân của vấn đề của tôi).
mrmoment

1
Tôi đã có mục tiêu 10 trong cả AndroidManifest.xml và project.properations. Đã thử khởi động lại Eclipse và làm sạch, nhưng không giúp được gì. Sau đó, tôi đặt mục tiêu thành 19 trong config.properies và nó đã hoạt động. Chưa thử hạ cấp công cụ xây dựng. (Mục tiêu 15 không hoạt động)
thomasa88

5
Đặt targetSdkVersion trong bảng kê khai và mục tiêu trong các thuộc tính, thành 19 làm việc cho tôi
Jaldip Katre

83

Hãy thử những gì van nói:

Nhấp chuột phải vào projectandroid toolsandroid support library.

Hi vọng điêu nay co ich :)


19
Cảm ơn bạn cho giải pháp này, chỉ cần hai lần nhấp và vấn đề đã được giải quyết !!!!! (mặc dù trong menu của tôi, đó là "thêm thư viện hỗ trợ")
Christopher

57

Cùng một vấn đề ở đây. Hoàn nguyên để xây dựng các công cụ 18.1.1, khởi động lại Eclipse và đã sửa nó.


3
Đúng, đã sửa nó. Phải xóa thủ công thư mục 19.0.0 cũ.
beetstra

Đây cố định nó cho tôi cũng vậy, mặc dù tôi trở lại là 18.0.1
NickT

1
Tôi đã sử dụng câu trả lời này và tôi không phải quay lại: stackoverflow.com/questions/19727915/ mẹo
Jon

Tôi đã xác minh tất cả các dự án.properies và targetSdk. Tôi đang sử dụng phiên bản mới nhất của IntelliJ IDEA 13 Cardea và cũng chơi với phiên bản SDK của dự án. Gỡ cài đặt công cụ xây dựng 19.0.0 là cách duy nhất để sửa lỗi bản dựng cho dự án của tôi.
James Wald

1
Cảm ơn. Hoàn nguyên để xây dựng các công cụ 18.1.1 và xóa 19 đã sửa lỗi này cho tôi. Tôi nghĩ rằng tôi đang phát điên
Darren

50

Tôi đã có thể xây dựng dự án vấn đề của mình bằng cách thêm dòng bổ sung này:

sdk.build.tools=18.1.1

... Đến tệp project.properIES của tôi , hiện diện trong thư mục gốc của thư mục dự án. Tất cả các phương pháp khác dường như thất bại đối với tôi.


Tôi nghĩ rằng đây cũng là một trong những lý do đằng sau vấn đề. Tôi chưa bao giờ sử dụng phiên bản 19 trong sdk mục tiêu của mình và vấn đề vẫn đang đến. Có lẽ các công cụ xây dựng sdk đã được đặt thành 19, phải được hoàn nguyên trở lại
saurav

Mục tiêu được sử dụng không xác định phiên bản buildtools đã sử dụng.
Lưu lượng

Tôi đã thêm thư viện hỗ trợ mới nhất và thêm dòng này vào thuộc tính dự án và vấn đề của tôi đã được khắc phục ... cảm ơn
speedynomads

Tôi ngạc nhiên khi điều này làm việc; Đó là trong nguồn AOSP sdk.buildtools, không phải sdk.build.tools, và đó là tên làm việc cho tôi.
Yoni Samlan

7

Nhấp chuột phải vào dự án >> Thuộc tính >> Android >> API cấp 18 hoạt động với tôi. Nhưng trước khi làm điều đó, tôi đã nhấp chuột phải vào dự án >> Công cụ Android >> Thêm Thư viện hỗ trợ và khởi động lại Eclipse . Bạn có thể phải chơi xung quanh với cấp API đã chọn .


3
Còn cấp API dưới 18 thì sao? Làm cách nào chúng tôi có thể chạy ứng dụng dưới API cấp 18?
Jayesh

Tôi đã phải thêm dự án-> Công cụ Android-> Thêm Thư viện hỗ trợ và nó cài đặt Thư viện hỗ trợ ADT 19.0.1. Sau đó, nó tạo ra apk tốt.
dùng914425

7

Sau khi cài đặt SDK mới, có một thư mục mới, "Phụ thuộc Android", trong tệp dự án của bạn. Nếu bạn nhấp chuột phải và xóa nó khỏi đường dẫn xây dựng, bạn sẽ lại có thể xây dựng dự án của mình.


Tôi nhận thấy rằng thư mục này sẽ gây ra vấn đề JAR trùng lặp. Nhưng xóa nó không giải quyết được vấn đề của tôi.
Salsero69

@ Salsero69 Bạn có đang sử dụng một dự án thư viện làm tài liệu tham khảo trong dự án thực tế của mình không?
Mahendra Liya

5

Cập nhật

right click your project > android tools > android support library

Làm sạch dự án của bạn và cố gắng xây dựng.



3

Tôi đã khắc phục sự cố này mà không tải xuống thư viện hỗ trợ hoặc hoàn nguyên các công cụ xây dựng thành 18.1.1. Tôi chỉ đơn giản là thay đổi cấp API thành 16+ và vấn đề đã biến mất . Hy vọng nó sẽ giúp.


Làm thế nào bạn thay đổi cấp độ API thành 16?
Peter Mortensen

Tôi chỉ cần nhấp chuột phải vào dự án của mình và chọn Android từ danh sách. Nó sẽ hiển thị danh sách các phiên bản API Android đã cài đặt, chọn phiên bản có 16 cấp độ API (4.1.2).
Zsolt Boldizsár

3

Không có giải pháp nào khác ở đây hoạt động với tôi sau khi nâng cấp lên Android Studio 0.4.0 và Gradle 1.9.

Tôi đã giải quyết vấn đề bằng cách tải xuống Build Tools 19.0.1 và cập nhật dòng sau trong tệp build.gradle của tôi:

buildToolsVersion '19.0.0'

đến

buildToolsVersion '19.0.1'

Có, vấn đề này dường như đã được khắc phục trong 19.0.1. Cũng hoạt động tốt với "gỡ lỗi kiến".
Robert

2

Đối với những vấn đề gặp phải với IntelliJ IDEA 13, hãy gỡ cài đặt Build Tools 19.


2

Có cùng một vấn đề với phiên bản đích 19trên cả hai project.propertiesAndroidManifest.xmlvới Ant.

Đã sửa nó bằng cách:

  • Đã gỡ cài đặt Android SDK Build-Tools 19.0.1
  • Cài đặt Android SDK Build-Tools 19.0.2

Tôi nghĩ rằng @ Al-Kathiri-Khalid là tại chỗ. Vấn đề chỉ là do thiếu hỗ trợ cho cấp API trong Công cụ xây dựng.


1

Tôi gặp vấn đề tương tự, mặc dù dự án của tôi không sử dụng thư viện hỗ trợ. Thêm libs / android-support-v4.jar vào dự án đã khắc phục sự cố mà không cần hoàn nguyên các công cụ xây dựng trở lại từ v19.


1

Tôi đã giải quyết vấn đề này. Chỉ cần thực hiện thay đổi này trong tệp thuộc tính dự án:

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

Và trong tệp kê khai:

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"

0

Thêm tệp Thư viện trong dự án .. Dự án-> nhấp chuột phải-> Thuộc tính-> android-> Thư viện-> nhấp vào Thêm và chọn Dự án Thư viện và áp dụng và ok .. sau đó, làm sạch dự án và chạy lại .. nếu bạn muốn khởi động lại nhật thực ..

Và đôi khi, cần phải cập nhật các công cụ xây dựng SDK Android ..


0

Điều làm việc cho tôi là thế này: Tôi đã mở tệp project.properIES từ thư mục gốc của dự án và đổi target=android-8thànhtarget=android-17


0

java.nio.BufferOverflowException trong khi từ lỗi dex Điều này có nghĩa là bạn không có API hỗ trợ cho cấp độ đó do đó quá trình xây dựng không thành công, có một số cách bạn có thể khắc phục điều này.

Kiểm tra tệp kê khai của bạn bằng cách sử dụng-sdk android: minSdkVersion = "4" và android: targetSdkVersion = "14"

Bất kỳ điều nào dưới đây sẽ khắc phục vấn đề: -

  • Tải xuống API yêu cầu cấp (Việc này có thể mất thời gian) và chạy lại ứng dụng của bạn
  • Khắc phục sự cố nhanh chóng thay đổi mục tiêu Dự án của bạn trong project.properies thành mục tiêu mới của bạn = android-4
  • Nhanh chóng sửa chữa, thay đổi SdkVersion trong bảng kê khai của bạn và Làm sạch dự án của bạn để thêm các thay đổi vào dự án của bạn.

0

Tôi đã xóa SDK Android và Eclipse trước đó . Tôi đã cài đặt gói ADT và nó hoạt động ...

Điều này đã khắc phục sự cố BufferOverflow trên Dex bắt đầu sau khi tôi có API 19. Trước đây tôi đã sử dụng Eclipse với SDK Android được cài đặt dưới dạng gói bổ trợ.


Tôi có thể cài đặt gói adt từ đâu?
Jayesh

0

Nhấp chuột phải vào Project >> Properties >> Android và chọn Cấp API lớn hơn 15

HOẶC LÀ

Thêm google-play-services_lib vào dự án của bạn bằng cách nhấp chuột phải vào dự án và chọn Dự án >> Thuộc tính >> Android >> Thêm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.