1. ホーム
  2. android

[解決済み] Androidのdexでビルド時にBufferOverflowExceptionが発生する

2022-04-22 02:05:07

質問

特定のAndroidプロジェクトをコンパイルする際、Windowsマシンでのみ java.nio.BufferOverflowException の間にdex. この問題は、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 Buildツールの最新版にアップグレードしているにもかかわらず、この問題は発生していません。19.0.0.

解決方法は?

ビルドツールを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.1local.properties ファイルを作成します。