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

특정 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에 없습니다.



답변

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파일에 추가 하면 됩니다.


답변

반이 말한 것을 보십시오 :

projectandroid tools→을 마우스 오른쪽 버튼으로 클릭하십시오 android support library.

도움이 되었기를 바랍니다 🙂


답변

여기에도 같은 문제가 있습니다. 빌드 도구 18.1.1로 복귀하고 Eclipse를 다시 시작하여 수정했습니다.


답변

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

sdk.build.tools=18.1.1

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


답변

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


답변

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


답변

최신 정보

right click your project > android tools > android support library

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