特定の Android プロジェクトをコンパイルすると、Windows マシンでのみ、java.nio.BufferOverflowException
dex から 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
。