Android dex はビルド時に BufferOverflowException を発生させます 質問する

Android dex はビルド時に BufferOverflowException を発生させます 質問する

特定の Android プロジェクトをコンパイルすると、Windows マシンでのみ、java.nio.BufferOverflowExceptiondex から during が発生します。この問題は、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 にアップグレードしても、この問題は発生しません。

ベストアンサー1

ビルドツールを18.1.1 1にダウングレードする必要はありません。この問題はビルドツール19.0.1で修正されました

何らかの理由で 19.0.1 を使用できない場合は、次の手順に従ってください。

android:targetSdkVersionの値がAndroidManifest.xml一致target=android-<value>するプロジェクトのプロパティこれら 2 つの値が同じでない場合、ビルド ツール バージョン 19.0.0 を使用したビルドは BufferOverflowException で終了します。ソース

この投稿のコメントには、少なくとも 19 (android-19) をターゲットにする必要があるという指摘もあります。ターゲットが 19 未満の場合にもこの解決策が機能する場合は、コメントを残してください。

修正後の状態は次のようになります私のプロジェクトのために。関連する AOSP の問題は #61710 です。

1 本当にダウングレードする必要がある場合は、ビルド ツール 19.0.0 をアンインストールする必要はなく、18.1.1 をインストールしてファイルsdk.buildtools=18.1.1に追加するだけですlocal.properties

おすすめ記事