174

在编译特定的 Android 项目时,并且仅在我的 Windows 机器上,我java.nio.BufferOverflowException从 dex 获得了一个 during 。使用 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。

4

19 回答 19

230

无需将构建工具降级回 18.1.1 1,此问题已通过构建工具 19.0.1 修复

如果由于某种原因您不能使用 19.0.1,那么:

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

从这篇文章的评论中也有一些迹象表明,您需要至少定位 19 (android-19)。如果您的目标是 < 19,如果此解决方案也适用,请发表评论。

这就是修复程序在我的项目中的查找方式。相关的 AOSP 问题是 #61710。

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

于 2013-11-13T11:32:06.017 回答
83

试试说的:

右键单击您的projectandroid toolsandroid support library

希望这可以帮助 :)

于 2013-11-06T03:53:05.703 回答
57

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

于 2013-11-01T14:46:10.203 回答
50

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

sdk.build.tools=18.1.1

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

于 2013-11-18T14:01:25.617 回答
7

右键单击项目 >>属性>> Android >> API Level 18 为我工作。但在我这样做之前,我确实右键单击项目 >> Android 工具>>添加支持库并重新启动Eclipse。您可能必须使用您选择的API级别。

于 2013-11-10T13:57:08.733 回答
7

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

于 2013-11-12T07:38:09.720 回答
5

更新

right click your project > android tools > android support library

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

于 2013-12-03T07:15:48.290 回答
4

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

于 2013-11-04T12:15:36.793 回答
3

我在没有下载支持库或将构建工具恢复到 18.1.1 的情况下解决了这个问题。 我只是将 API 级别更改为 16+,问题就消失了。希望它会有所帮助。

于 2013-12-06T08:31:47.807 回答
3

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

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

buildToolsVersion '19.0.0'

buildToolsVersion '19.0.1'
于 2013-12-20T19:32:21.510 回答
2

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

于 2013-12-10T20:23:47.473 回答
2

在目标版本和Ant19上都有相同的问题。project.propertiesAndroidManifest.xml

通过以下方式修复它:

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

我认为@Al-Kathiri-Khalid 是正确的。该问题仅是由于缺少对构建工具中的 API 级别的支持。

于 2014-03-02T17:10:19.877 回答
1

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

于 2013-11-04T20:01:12.453 回答
1

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

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

在清单文件中:

uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"
于 2013-12-24T08:54:38.030 回答
0

我删除了以前的 Android SDK 和Eclipse。我安装了ADT包,它可以工作......

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

于 2013-11-06T10:32:21.397 回答
0

在项目中添加库文件..项目->右键单击->属性->android->库->单击添加并选择库项目并给出应用和确定..然后,清理项目并再次运行..如果你想重启eclipse..

而且,有时,需要更新 Android SDK 构建工具..

于 2013-11-13T11:29:05.877 回答
0

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

于 2013-12-10T15:26:05.413 回答
0

java.nio.BufferOverflowException during from dex 错误 这意味着您没有该级别的支持 API,因此构建失败,有多种方法可以解决此问题。

检查清单文件 uses-sdk android:minSdkVersion="4" 和 android:targetSdkVersion="14"

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

  • 下载所需的 API级别(这可能需要一些时间)并再次运行您的应用程序
  • 快速修复将project.properties 中的项目目标更改为新目标target=android-4
  • 快速清理修复,更改清单中的SdkVersion并清理您的项目以将更改添加到您的 project.properties(我的最爱)
于 2013-12-20T09:56:08.917 回答
0

右键单击项目>>属性>>Android并选择API Level大于15

或者

通过右键单击项目并选择项目>>属性>>Android>>添加,将 google-play-services_lib 添加到您的项目中

于 2014-06-21T19:30:47.257 回答