Android dex在构建时会产生BufferOverflowException

时间:2013-11-01 13:40:23

标签: android dex

在编译特定的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 Build工具:19.0.0。

19 个答案:

答案 0 :(得分:230)

无需将构建工具降级回18.1.1 1 ,此问题为fixed with build tools 19.0.1

如果因某些原因无法使用19.0.1:

确保 AndroidManifest.xml android:targetSdkVersion的值与 project.properties 中的target=android-<value>相匹配。如果这两个值不相同,那么使用构建工具版本19.0.0构建将在BufferOverflowException中结束。 Source

此帖的评论中还有一些迹象表明你需要定位至少19(android-19)。如果您的目标是&lt;该解决方案也适用,请发表评论。 19。

This is how the fix looks我的项目。 The related AOSP issue is #61710.

1如果确实需要降级,则无需卸载构建工具19.0.0,只需安装18.1.1并将sdk.buildtools=18.1.1添加到local.properties文件即可。

答案 1 :(得分:83)

尝试van所说的内容:

右键点击projectandroid toolsandroid support library

希望这会有所帮助:)

答案 2 :(得分:57)

这里的问题相同。恢复构建工具18.1.1,重新启动Eclipse并修复它。

答案 3 :(得分:50)

我能够通过添加额外的行来构建我的问题项目:

sdk.build.tools=18.1.1

...到我的 project.properties 文件,该文件存在于项目文件夹的根目录中。所有其他方法对我来说似乎都失败了。

答案 4 :(得分:7)

右键点击项目&gt;&gt; 属性&gt;&gt; Android &gt;&gt; API Level 18适合我。但在我这样做之前,我右键点击了项目&gt;&gt; Android工具&gt;&gt; 添加支持库并重新启动Eclipse。您可能需要使用所选的API级别。

答案 5 :(得分:7)

安装新SDK后,项目文件下会有一个新文件夹“Android Dependencies”。如果右键单击并从构建路径中删除它,您将再次能够构建项目。

答案 6 :(得分:5)

<强>更新

right click your project > android tools > android support library

清理您的项目并尝试构建。

答案 7 :(得分:4)

更新到修订版19后,我遇到了同样的问题。只是不要忘记更新ADT,https://dl-ssl.google.com/android/eclipse/。在此之后,我能够使用最新版本构建项目。

答案 8 :(得分:3)

我修复了这个问题,但未下载支持库或将构建工具还原为18.1.1。 我只是将API级别更改为16+,问题就消失了。希望它会有所帮助。

答案 9 :(得分:3)

升级到Android Studio 0.4.0和Gradle 1.9后,这里没有其他解决方案适用于我。

我通过下载Build Tools 19.0.1并更新build.gradle文件中的以下行来解决了这个问题:

buildToolsVersion '19.0.0'

buildToolsVersion '19.0.1'

答案 10 :(得分:2)

对于面临IntelliJ IDEA 13问题的人,请卸载Build Tools 19。

答案 11 :(得分:2)

使用Ant在19project.properties上与目标版本AndroidManifest.xml存在同样的问题。

修正了:

  • 已卸载Android SDK Build-Tools 19.0.1
  • 已安装Android SDK Build-Tools 19.0.2

我认为@ Al-Kathiri-Khalid是现货。问题仅在于缺少对Build Tools中API级别的支持。

答案 12 :(得分:1)

虽然我的项目没有使用支持库,但我遇到了同样的问题。将libs / android-support-v4.jar添加到项目中解决了这个问题,而无需从v19恢复构建工具。

答案 13 :(得分:1)

我解决了这个问题。只需在项目属性文件中进行此更改:

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

在清单文件中:

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

答案 14 :(得分:0)

在项目中添加库文件..     项目 - &gt;右键单击 - &gt;属性 - &gt; android-&gt;库 - &gt;单击添加并选择库项目并提供应用和确定..    然后,清理项目并再次运行..如果你想重启日食..

此外,有时需要更新Android SDK构建工具..

答案 15 :(得分:0)

我删除了之前的Android SDK和Eclipse。我安装了ADT软件包,它可以运行......

这解决了在我获得API之后开始的Dex上的BufferOverflow问题。我之前使用Eclipse安装了Android SDK作为附加软件包。

答案 16 :(得分:0)

对我有用的是: 我从项目的根目录中打开了project.properties文件,并将target=android-8更改为target=android-17

答案 17 :(得分:0)

来自dex错误的

java.nio.BufferOverflowException 这意味着您没有该级别的支持API ,因此构建失败,您可以通过多种方式解决此问题。

检查你的清单文件使用-sdk android:minSdkVersion =“4”和android:targetSdkVersion =“14”

以下任何一项都可以解决问题: -

  • 下载所需的API 级别(这可能需要一些时间)并再次运行您的应用程序
  • 快速脏修复更改 project.properties 中的项目目标 到你的新目标 target = android-4
  • 快速清理修复,更改清单中的 SdkVersion 并清除 你的项目将更改添加到project.properties(我最喜欢的)

答案 18 :(得分:0)

右键单击Project&gt;&gt; Properties&gt;&gt; Android并选择大于15的API级别

OR

通过右键单击项目并选择项目&gt;&gt;属性&gt;&gt; Android&gt;&gt;添加

,将google-play-services_lib添加到您的项目中