特定の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にアップグレードされている。
ビルドツールを18.1.1にダウングレードする必要はありません。1この問題は ビルドツール19.0.1で修正されました 。
何らかの理由で19.0.1を使用できない場合は、
AndroidManifest.xmlのAndroid:targetSdkVersion
の値がproject.propertiesの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
を追加します。
ここでも同じ問題です。ビルドツール18.1.1に戻り、Eclipseを再起動して修正しました。
私はこの余分な行を追加することによって私の問題のプロジェクトを構築することができました:
sdk.build.tools=18.1.1
...プロジェクトフォルダのルートにあるmyproject.propertiesファイルへ。他のすべてのアプローチは私には失敗したようです。
新しいSDKをインストールした後、プロジェクトファイルの下に「Android Dependencies」という新しいフォルダがあります。右クリックしてビルドパスから削除すると、再びプロジェクトをビルドできるようになります。
更新
right click your project > Android tools > Android support library
あなたのプロジェクトをきれいにして、構築しようとしてください。
私はリビジョン19にアップデートした後に同じ問題を抱えていました。ちょうどADTをアップデートすることを忘れないでください、 https://dl-ssl.google.com/Android/Eclipse/ その後、最新のリビジョンでプロジェクトをビルドすることができました。
サポートライブラリをダウンロードしたり、ビルドツールを18.1.1に戻したりすることなく、この問題を解決しました。 私は単純にAPIレベルを16+に変更し、問題は消えました。それが役立つことを願っています。
Android Studio 0.4.0とGradle 1.9にアップグレードした後、ここで他の解決策のどれも私のために働きませんでした。
Build Tools 19.0.1をダウンロードし、build.gradleファイルの次の行を更新することで問題を解決しました。
buildToolsVersion '19.0.0'
に
buildToolsVersion '19.0.1'
IntelliJ IDEA 13で問題が発生している方は、Build Tools 19をアンインストールしてください。
Antの19
とproject.properties
の両方で、ターゲットバージョンAndroidManifest.xml
に同じ問題がありました。
それを修正しました:
Android SDK Build-Tools 19.0.1
Android SDK Build-Tools 19.0.2
@ Al-Kathiri-Khalidが注目されていると思います。この問題は、ビルドツールでAPIレベルのサポートが欠けていることが原因です。
私はこの問題を解決しました。プロジェクトのプロパティファイルでこの変更を行います。
target=Android-18
sdk.build.tools=18.1.1
そしてマニフェストファイルで:
uses-sdk Android:minSdkVersion="8"
Android:targetSdkVersion="18"
私のプロジェクトはサポートライブラリを使用していませんでしたが、私は同じ問題を抱えていました。プロジェクトにlibs/Android-support-v4.jarを追加すると、ビルドツールをv19から元に戻す必要なく、問題を回避できました。
プロジェクト>>プロパティ>> Androidを右クリックして15を超えるAPIレベルを選択します。
OR
プロジェクトを右クリックし、[プロジェクト] - [プロパティ] - [Android] - [追加]を選択して、google-play-services_libをプロジェクトに追加します。
私にとってうまくいったのは、プロジェクトのルートからproject.propertiesファイルを開き、target=Android-8
をtarget=Android-17
に変更したことです。
dexエラーからのJava.nio.BufferOverflowExceptionこれはそのレベルのサポートAPIがないことを意味しますしたがってビルドは失敗します。これを修正する方法はいくつかあります。
マニフェストファイルuses-sdk Android:minSdkVersion = "4"およびAndroid:targetSdkVersion = "14"を確認してください。
以下のいずれかが問題を解決します: -
プロジェクトにライブラリファイルを追加します。プロジェクト - >右クリック - >プロパティ - > Android->ライブラリ - >追加をクリックしてライブラリプロジェクトを選択し、適用してOKをクリックします。 Eclipseを再起動したいです。
また、時々、Android SDKビルドツールを更新する必要があります。