web-dev-qa-db-ja.com

Android dexがビルド時にBufferOverflowExceptionを発生させる

特定のAndroidプロジェクトをコンパイルするとき、そして私のWindowsマシン上でのみ、私はdexからの間にJava.nio.BufferOverflowExceptionを得ます。この問題は、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にアップグレードされている。

173
beetstra

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

何らかの理由で19.0.1を使用できない場合は、

AndroidManifest.xmlAndroid:targetSdkVersionの値がproject.propertiestarget=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を追加します。

230
Flow

試してみてください van の言ったこと:

projectAndroid toolsAndroid support libraryを右クリックします。

お役に立てれば :)

83
Lolo Me

ここでも同じ問題です。ビルドツール18.1.1に戻り、Eclipseを再起動して修正しました。

57
Stefano

私はこの余分な行を追加することによって私の問題のプロジェクトを構築することができました:

sdk.build.tools=18.1.1

...プロジェクトフォルダのルートにあるmyproject.propertiesファイルへ。他のすべてのアプローチは私には失敗したようです。

50
mrrrk

プロジェクトを右クリックします>>プロパティ>>Android>> API Level 18が私のために働きました。しかしそれをする前に私はプロジェクト>>Android Tools>>をサポートライブラリを追加して再起動しました Eclipse 。選択した API レベルで遊ばなければならないかもしれません。

7
learner

新しいSDKをインストールした後、プロジェクトファイルの下に「Android Dependencies」という新しいフォルダがあります。右クリックしてビルドパスから削除すると、再びプロジェクトをビルドできるようになります。

7
Mahendra Liya

更新

right click your project > Android tools > Android support library

あなたのプロジェクトをきれいにして、構築しようとしてください。

5
Harshid

私はリビジョン19にアップデートした後に同じ問題を抱えていました。ちょうどADTをアップデートすることを忘れないでください、 https://dl-ssl.google.com/Android/Eclipse/ その後、最新のリビジョンでプロジェクトをビルドすることができました。

4
van

サポートライブラリをダウンロードしたり、ビルドツールを18.1.1に戻したりすることなく、この問題を解決しました。 私は単純にAPIレベルを16+に変更し、問題は消えました。それが役立つことを願っています。

3

Android Studio 0.4.0とGradle 1.9にアップグレードした後、ここで他の解決策のどれも私のために働きませんでした。

Build Tools 19.0.1をダウンロードし、build.gradleファイルの次の行を更新することで問題を解決しました。

buildToolsVersion '19.0.0'

buildToolsVersion '19.0.1'
3
Jacob Tabak

IntelliJ IDEA 13で問題が発生している方は、Build Tools 19をアンインストールしてください。

2
Adí

Antの19project.propertiesの両方で、ターゲットバージョンAndroidManifest.xmlに同じ問題がありました。

それを修正しました:

  • アンインストールされたAndroid SDK Build-Tools 19.0.1
  • インストール済みのAndroid SDK Build-Tools 19.0.2

@ Al-Kathiri-Khalidが注目されていると思います。この問題は、ビルドツールでAPIレベルのサポートが欠けていることが原因です。

2
kontinuity

私はこの問題を解決しました。プロジェクトのプロパティファイルでこの変更を行います。

target=Android-18
sdk.build.tools=18.1.1

そしてマニフェストファイルで:

uses-sdk Android:minSdkVersion="8"
Android:targetSdkVersion="18"
1
Ravi

私のプロジェクトはサポートライブラリを使用していませんでしたが、私は同じ問題を抱えていました。プロジェクトにlibs/Android-support-v4.jarを追加すると、ビルドツールをv19から元に戻す必要なく、問題を回避できました。

1
Jim Vitek

プロジェクト>>プロパティ>> Androidを右クリックして15を超えるAPIレベルを選択します。

OR

プロジェクトを右クリックし、[プロジェクト] - [プロパティ] - [Android] - [追加]を選択して、google-play-services_libをプロジェクトに追加します。

0
Junaid

以前のAndroid SDKを削除して EclipseADT バンドルをインストールしましたが、うまくいきました...

これは私が API 19を得た後に始まったDexのBufferOverflowの問題を解決しました。

0
vpathak

私にとってうまくいったのは、プロジェクトのルートからproject.propertiesファイルを開き、target=Android-8target=Android-17に変更したことです。

0

dexエラーからのJava.nio.BufferOverflowExceptionこれはそのレベルのサポートAPIがないことを意味しますしたがってビルドは失敗します。これを修正する方法はいくつかあります。

マニフェストファイルuses-sdk Android:minSdkVersion = "4"およびAndroid:targetSdkVersion = "14"を確認してください。

以下のいずれかが問題を解決します: -

  • 必要なAPIレベルをダウンロードし(これには時間がかかる場合があります)、もう一度アプリケーションを実行します。
  • クイックダーティフィックスは、project.propertiesのプロジェクトターゲットを新しいターゲットに変更します。target = Android-4
  • クイッククリーンフィックス、マニフェストのSdkVersionを変更し、プロジェクトをクリーンアップしてproject.propertiesに変更を追加する(私のお気に入り)
0

プロジェクトにライブラリファイルを追加します。プロジェクト - >右クリック - >プロパティ - > Android->ライブラリ - >追加をクリックしてライブラリプロジェクトを選択し、適用してOKをクリックします。 Eclipseを再起動したいです。

また、時々、Android SDKビルドツールを更新する必要があります。

0
harikrishnan