빌드 할 때 Android dex에서 BufferOverflowException이 발생합니다.


174

특정 Android 프로젝트를 컴파일 할 때 Windows 컴퓨터에서만 컴파일 할 때 java.nio.BufferOverflowExceptiondex 에서 시간을 얻습니다 . 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 빌드 도구 (19.0.0)로 업그레이드되었지만이 문제는 MacBook에 없습니다.


1
도서관을 사용하십니까? 설정 확인
Sherif elKhatib

@SherifelKhatib, 지원 라이브러리 및 Google Analytics V2
beetstra

10
아무도 이것에 대해 아직 문제를 제기하지 않은 것
같으므로

모든 안드로이드 SDK, 이클립스 및 코드를 제거하여 시도하십시오.
vpathak

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 = en_US 프레임 워크 인수 : -product com.android.ide.eclipse.adt.package.product 명령 줄 인수 : -os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse java.nio.Buffer.nextPutIndex (Buffer.java:519)의 .adt.package.product java.nio.BufferOverflowException
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를 사용하고 있습니다. 다행히도 build-tools 19.0.0을 제거하면 빌드가 수정되었습니다.
James Wald

3
내가 작동하게하려면 대상 SDK를 최신 버전 (19)으로 설정해야했습니다.
RolandK

또한 대상 SDK 버전이 SDK 관리자와 함께 다운로드되었는지 확인하십시오 (이것이 내 문제의 원인입니다).
mrmoment

1
AndroidManifest.xml과 project.properties 모두에서 10을 대상으로했습니다. Eclipse를 다시 시작하고 정리하려고했지만 도움이되지 않았습니다. 그런 다음 config.properties에서 target을 19로 설정하고 작동했습니다. 빌드 도구를 다운 그레이드하지 않았습니다. (대상 15가 작동하지 않음)
thomasa88

5
19, 속성에서 매니페스트 targetSdkVersion을 및 목표 설정은 나를 위해 일한
Jaldip Katre에게

83

반이 말한 것을 보십시오 :

projectandroid tools→을 마우스 오른쪽 버튼으로 클릭하십시오 android 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 버전도 사용했습니다. build-tools 19.0.0 제거는 내 프로젝트의 빌드를 수정하는 유일한 방법입니다.
James Wald

1
감사. 도구 18.1.1로 되돌리고 19를 삭제하면이 문제가 해결되었습니다. 나는 내가 미쳐 가고 있다고 생각했다
대런

50

이 추가 라인을 추가하여 문제 프로젝트를 빌드 할 수있었습니다.

sdk.build.tools=18.1.1

... 프로젝트 폴더의 루트에있는 내 project.properties 파일에. 다른 모든 접근법은 저에게 실패한 것처럼 보였습니다.


나는 이것이 또한 문제의 원인 중 하나라고 생각합니다. 대상 SDK에서 버전 19를 사용하지 않았지만 여전히 문제가 발생했습니다. 아마도 SDK 빌드 도구는 19로 설정되어 다시 되돌려
져야합니다.

사용 된 대상은 사용 된 buildtools 버전을 결정하지 않습니다.
흐름

최신 지원 라이브러리를 추가하고이 속성을 프로젝트 속성에 추가
했는데

이것이 효과가 있다는 것이 놀랍습니다. AOSP 소스에 sdk.buildtools, not sdk.build.tools으로 표시되어 저에게 도움이되는 이름이었습니다.
Yoni Samlan

7

프로젝트 >> 속성 >> Android >> API 레벨 18을 마우스 오른쪽 버튼으로 클릭하십시오 . 그러나 그 전에 프로젝트 >> Android 도구 >> 지원 라이브러리 추가를 마우스 오른쪽 버튼으로 클릭 하고 Eclipse를 다시 시작했습니다 . 선택한 API 수준 으로 놀아야 할 수도 있습니다 .


3
18 이하의 API 레벨은 어떻습니까? API 레벨 18 이하로 애플리케이션을 어떻게 실행할 수 있습니까?
Jayesh

프로젝트-> Android 도구-> 지원 라이브러리 추가를 추가하고 ADT 19.0.1 지원 라이브러리를 설치해야했습니다. 그 후 apk fine을 생성합니다.
user914425

7

새 SDK를 설치하면 프로젝트 파일 아래에 "Android Dependencies"라는 새 폴더가 있습니다. 빌드 경로에서 마우스 오른쪽 단추를 클릭하여 제거하면 프로젝트를 다시 빌드 할 수 있습니다.


이 폴더가 중복 JAR 문제를 유발하는 것으로 나타났습니다. 그러나 삭제해도 문제가 해결되지 않았습니다.
Salsero69

@ Salsero69 실제 프로젝트에서 라이브러리 프로젝트를 참조로 사용하고 있습니까?
Mahendra Liya

5

최신 정보

right click your project > android tools > android support library

프로젝트를 정리하고 빌드하십시오.



3

지원 라이브러리를 다운로드하거나 빌드 도구를 18.1.1로 되 돌리지 않고이 문제를 해결했습니다. API 레벨을 16+로 변경하고 문제가 사라졌습니다 . 그것이 도움이되기를 바랍니다.


어떻게 당신은 16의 API 레벨을 변경 했습니까?
Peter Mortensen

프로젝트를 마우스 오른쪽 버튼으로 클릭하고 목록에서 Android를 선택했습니다. 설치된 Android API 버전 목록이 표시되면 API 레벨 (4.1.2)이 16 인 버전을 선택하십시오.
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에서 해결 된 것으로 보입니다. "ant debug"에서도 잘 작동했습니다.
Robert

2

IntelliJ IDEA 13에 문제가있는 경우 Build Tools 19를 제거하십시오.


2

및 대상 버전 19에서 동일한 문제가 발생했습니다.project.propertiesAndroidManifest.xml 개미와 함께.

다음과 같이 수정했습니다.

  • 제거됨 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 이는 해당 레벨에 대한 지원 API가 없음을 의미합니다. 빌드가 실패 문제를 해결할 수있는 여러 가지 방법이 있습니다.

매니페스트 파일 uses-sdk android : minSdkVersion = "4"및 android : targetSdkVersion = "14"를 확인하십시오.

아래 중 하나가 문제를 해결합니다.

  • 필요한 API 다운로드 레벨을 (시간이 걸릴 수 있음) 애플리케이션을 다시 실행하십시오.
  • project.properties 의 프로젝트 대상을 새 대상으로 신속하게 수정 target = android-4로
  • 빠른 정리 수정, 매니페스트 에서 SdkVersion 변경 및 프로젝트 정리를 사용하여 프로젝트에 변경 사항을 추가하십시오.

0

이전 Android SDK 및 Eclipse를 제거했습니다 . ADT 번들을 설치 했는데 작동합니다 ...

API 19를 얻은 후 시작된 Dex의 BufferOverflow 문제를 해결했습니다. 이전에는 애드온 패키지로 설치된 Android SDK와 함께 Eclipse를 사용하고있었습니다.


어디에서 adt 번들을 설치할 수 있습니까?
Jayesh

0

프로젝트 >> 속성 >> Android를 마우스 오른쪽 버튼으로 클릭하고 15보다 큰 API 레벨을 선택하십시오

또는

프로젝트를 마우스 오른쪽 버튼으로 클릭하고 프로젝트 >> 속성 >> 안드로이드 >> 추가를 선택하여 프로젝트에 google-play-services_lib를 추가하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.