Android dexはビルド時にBufferOverflowExceptionを出します


174

特定のAndroidプロジェクトをコンパイルするとき、私のWindowsマシンでのみjava.nio.BufferOverflowException、dexからaを取得します。この問題は、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.

私が言ったように、どちらもAndroidビルドツールの最新バージョン19.0.0にアップグレードされていますが、MacBookではこの問題は発生しません。


1
ライブラリを使用していますか?セットアップを確認する
Sherif elKhatib 2013年

@SherifelKhatib、サポートライブラリとGoogleアナリティクスV2のみ
beetstra 2013年

10
誰もこれについてまだ問題を報告
CommonsWare

すべてのandroid sdk、eclipse、およびコードを削除してみてください。
vpathak 2013年

Centos x64で同様のエラーが発生:!SESSION 2013-11-07 17:07:35.305 eclipse.buildId = v22.3.0-887826 java.version = 1.7.0_40 java.vendor = Oracle Corporation BootLoader constants:OS = linux、ARCH = x86_64、WS = gtk、NL = en_USフレームワーク引数:-product com.android.ide.eclipse.adt.package.productコマンドライン引数:-os linux -ws gtk -arch x86_64 -product com.android.ide.eclipse .adt.package.product java.nio.BufferOverflowException at java.nio.Buffer.nextPutIndex(Buffer.java:519)
isti_spl

回答:


230

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

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

値があることを確認してくださいandroid:targetSdkVersionのAndroidManifest.xmlが一致するtarget=android-<value>project.properties。これら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ファイルに追加するだけです。


5
これは私にはうまくいきませんでした。すべてのproject.propertiesとtargetSdkを確認しました。IntelliJ IDEA 13 Cardeaの最新バージョンを使用しています。さいわい、build-tools 19.0.0をアンインストールしてもビルドは修正されました。
James Wald、

3
それを機能させるために、ターゲットSDKを最新バージョン(19)に設定する必要もありました。
RolandK 2013年

また、ターゲットSDKバージョンがSDKマネージャーでダウンロードされていることも確認してください(これが私の問題の原因です)。
mrmoment 2013

1
AndroidManifest.xmlとproject.propertiesの両方にターゲット10がありました。Eclipseの再起動とクリーニングを試みましたが、助けにはなりませんでした。次に、config.propertiesでターゲットを19に設定し、それが機能しました。ビルドツールのダウングレードを試みていません。(ターゲット15は機能しませんでした)
thomasa88 2013

5
マニフェストでtargetSdkVersionを、プロパティでtargetを19に設定すると、
うまくいき

83

どのバンを試す言った:

右クリックしてprojectandroid toolsandroid support library

お役に立てれば :)


19
この解決策をありがとう、2回クリックするだけで問題が解決しました!!!!! (私のメニューでは、「サポートライブラリの追加」でしたが)
Christopher

57

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


3
うん、それはそれを修正しました。ただし、古い19.0.0ディレクトリを手動で削除する必要がありました。
beetstra 2013年

私も18.0.1に戻しましたが、これで問題が解決しました
NickT

1
私はこの回答を使用しましたが、元に戻す必要はありませんでした。stackoverflow.com
Jon

すべてのproject.propertiesとtargetSdkを確認しました。IntelliJ IDEA 13 Cardeaの最新バージョンを使用しており、プロジェクトのSDKバージョンも使用しています。build-tools 19.0.0をアンインストールすることが、私のプロジェクトのビルドを修正する唯一の方法でした。
James Wald

1
ありがとう。ビルドツール18.1.1に戻し、19を削除すると、これが修正されました。私は夢中になると思っていました
ダレン

50

この追加の行を追加することで、問題のプロジェクトをビルドすることができました。

sdk.build.tools=18.1.1

... プロジェクトフォルダのルートにあるproject.propertiesファイルに。他のすべてのアプローチは私にとって失敗するように見えました。


これも問題の原因のひとつだと思います。ターゲットSDKでバージョン19を使用したことがないのに、まだ問題が発生していました。おそらく、sdkビルドツールが19に設定されていたため、元に戻す必要がありました
saurav '19 / 11/13

使用されるターゲットは、使用されるbuildtoolsバージョンを決定しません。
フロー

私は、最新のサポートライブラリを追加し、プロジェクトのプロパティに次の行を追加し、私の問題を修正しました...ありがとう
speedynomads

これがうまくいったことに驚いています。AOSPのソースにはsdk.buildtoolsでなくsdk.build.toolsであり、それが私に役立つ名前でした。
Yoni Samlan

7

プロジェクト>> プロパティ >> Android >> APIレベル18を右クリックするとうまくいきました。しかし、その前に、プロジェクト>> Androidツール >> サポートライブラリの追加を右クリックしてEclipseを再起動しました。選択したAPIレベルをいじる必要があるかもしれません。


3
18未満のAPIレベルはどうですか?APIレベル18未満でアプリケーションを実行するにはどうすればよいですか?
Jayesh 2013年

プロジェクト-> Androidツール->サポートライブラリの追加を追加する必要があり、ADT 19.0.1サポートライブラリがインストールされます。その後、apkファインを生成します。
user914425 2015

7

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


このフォルダが原因でJARの重複問題が発生することに気付きました。しかし、それを削除しても問題は解決しませんでした。
Salsero69 2013年

@ Salsero69実際のプロジェクトで参照としてライブラリプロジェクトを使用していますか?
Mahendra Liya 2013年

5

更新

right click your project > android tools > android support library

プロジェクトをクリーンアップし、ビルドしてみます。



3

サポートライブラリをダウンロードしたり、ビルドツールを18.1.1に戻したりせずに、この問題を修正しました。 APIレベルを16+に変更しただけで、問題は解消しました。お役に立てば幸いです。


どのようにしてAPIレベルを16に変更しましたか?
Peter Mortensen

プロジェクトを右クリックして、リストからAndroidを選択しました。インストールされているAndroid APIバージョンのリストが表示されます。APIレベル(4.1.2)が16のバージョンを選択します。
ZsoltBoldizsár2013

3

Android Studio 0.4.0とGradle 1.9にアップグレードした後、他のソリューションはどれも私にとってはうまくいきませんでした。

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

buildToolsVersion '19.0.0'

buildToolsVersion '19.0.1'

はい、この問題は19.0.1で修正されたようです。「ant debug」でも問題なく動作しました。
Robert

2

IntelliJ IDEA 13で問題が発生している場合は、ビルドツール19をアンインストールします。


2

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

修正:

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

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


1

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


1

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

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

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

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"

0

プロジェクトにライブラリファイルを追加します。プロジェクト->右クリック->プロパティ->アンドロイド->ライブラリ-> [追加]をクリックし、ライブラリプロジェクトを選択して、applyとokを選択します。次に、プロジェクトをクリーンアップして、もう一度実行します。日食を再開したい

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


0

どのような私のために働いたことは、このでした:私は私のプロジェクトのルートからproject.propertiesファイルを開いて、変更target=android-8target=android-17


0

java.nio.BufferOverflowException from from dex error これは、そのレベルのサポートAPIがないことを意味しますためにビルドが失敗することを意味します。これを修正する方法はいくつかあります。

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

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

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

0

以前のAndroid SDKとEclipseを削除しました。私はADTバンドルをインストールし、それは動作します...

これにより、API 19を取得した後に開始されたDexのBufferOverflowの問題が修正されました。以前は、Android SDKがアドオンパッケージとしてインストールされているEclipseを使用していました。


adtバンドルをインストールできる場所から?
Jayesh 2013年

0

Project >> Properties >> Androidを右クリックし、15より大きいAPIレベルを選択します

または

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.