Android dex在构建时会给出BufferOverflowException


174

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


1
您使用图书馆吗?检查其设置
Sherif elKhatib 2013年

@SherifelKhatib,只是支持库和Google Analytics(分析)V2
beetstra 2013年

10
由于似乎没有人对此提出过任何问题,因此我在以下位置提出了一个问题:code.google.com/p/android/issues/detail?
id

尝试删除所有android sdk,eclipse和代码。
vpathak

在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常数:OS = linux,ARCH = x86_64,WS = gtk,NL = zh_CN框架参数:-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,位于java.nio.Buffer.nextPutIndex(Buffer.java:519)
isti_spl 2013年

Answers:


230

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

如果由于某种原因无法使用19.0.1,请执行以下操作:

确保值android:targetSdkVersionAndroidManifest.xml中匹配target=android-<value>project.properties。如果这两个值不相同,则使用构建工具版本19.0.0进行构建将以BufferOverflowException结尾。资源

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

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

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


5
这对我不起作用。验证了所有project.properties和targetSdk。我正在使用最新版本的IntelliJ IDEA 13 Cardea。幸运的是,卸载构建工具19.0.0确实可以修复该构建。
詹姆斯·沃尔德

3
为了使它起作用,我还必须将目标SDK设置为最新版本(19)。
RolandK 2013年

还要确保目标sdk版本是通过sdk管理器下载的(这是我的问题的原因)。
mrmoment 2013年

1
我在AndroidManifest.xml和project.properties中都有目标10。尝试重新启动Eclipse并进行清理,但没有帮助。然后,我在config.properties中将target设置为19,它起作用了。尚未尝试降级构建工具。(目标15无效)
thomasa88 2013年

5
将清单中的targetSdkVersion和属性中的目标设置为19对我
有用

83

尝试说什么:

右键点击你project→交通android tools→交通android support library

希望这可以帮助 :)


19
谢谢您的解决方案,只需单击两次,问题就解决了!(尽管在我的菜单中是“添加支持库”)
Christopher

57

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


3
是的,已经解决了。但是必须手动删除旧的19.0.0目录。
beetstra

尽管我恢复了18.0.1
NickT

1
我用这个答案,我没有给回复: stackoverflow.com/questions/19727915/...
乔恩·

我验证了所有project.properties和targetSdk。我使用的是IntelliJ IDEA 13 Cardea的最新版本,并且也使用了该项目的SDK版本。卸载构建工具19.0.0是修复项目的构建的唯一方法。
James Wald

1
谢谢。恢复构建工具18.1.1并删除19对我来说已解决此问题。我以为我快要疯了
达伦(Darren)

50

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

sdk.build.tools=18.1.1

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


我认为这也是问题背后的原因之一。我从未在目标sdk中使用版本19,但问题仍然存在。可能将sdk生成工具设置为19,必须将其还原回来
saurav

使用的目标无法确定使用的buildtools版本。
流动

我添加了最新的支持库,并将此行添加到了项目属性中,并且我的问题已修复...谢谢
speedynomads 2013年

我很惊讶这行得通;它在AOSP来源中为sdk.buildtools,而不是sdk.build.tools,这是对我有用的名称。
Yoni Samlan

7

右键单击项目>>属性>> Android >> API Level 18对我有用。但是在此之前,我先右键单击项目>> Android工具>>添加支持库,然后重新启动Eclipse。您可能必须尝试选择的API级别。


3
低于18的API级别如何?我们如何在API级别18以下运行应用程序?
Jayesh

我必须添加项目-> Android工具->添加支持库,然后安装ADT 19.0.1支持库。之后,它会生成apk罚款。
user914425

7

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


我注意到该文件夹​​将导致重复的JAR问题。但是删除它并不能解决我的问题。
Salsero69 2013年

@ Salsero69您是否在实际项目中使用图书馆项目作为参考?
Mahendra Liya

5

更新资料

right click your project > android tools > android support library

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



3

我解决了这个问题,而没有下载支持库或将构建工具还原到18.1.1。 我只是简单地将API级别更改为16+,问题就消失了。希望会有所帮助。


如何将API级别更改为16?
彼得·莫滕森

我只需右键单击我的项目,然后从列表中选择Android。它应该显示已安装的android API版本的列表,选择具有16个API版本(4.1.2)的版本。
ZsoltBoldizsár13年

3

在升级到Android Studio 0.4.0和Gradle 1.9之后,这里的其他解决方案都对我没有帮助。

我通过下载构建工具19.0.1并更新了build.gradle文件中的以下行来解决了该问题:

buildToolsVersion '19.0.0'

buildToolsVersion '19.0.1'

是的,此问题在19.0.1中似乎已解决。还可以与“ ant debug”一起使用。
罗伯特

2

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


2

目标版本和Ant19都存在相同的问题。project.propertiesAndroidManifest.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

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

另外,有时还需要更新Android SDK构建工具。


0

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


0

dex错误期间发生java.nio.BufferOverflowException错误 意味着您没有该级别支持API,因此构建失败了,有很多种方法可以解决此问题。

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

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

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

0

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

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


从哪里可以安装adt捆绑包?
Jayesh

0

右键单击Project >> Properties >> Android,然后选择大于15的API级别

要么

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.