构build时,Android dex提供了一个BufferOverflowException

当编译一个特定的Android项目,并且只在我的Windows机器上,我从dex中得到一个java.nio.BufferOverflowExceptionexception。 使用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。

无需将构build工具降级到18.1.1 1 ,则使用构build工具19.0.1修复此问题。

如果由于某种原因无法使用19.0.1:

确保AndroidManifest.xmlandroid:targetSdkVersion target=android-<value>project.properties中的target=android-<value>匹配。 如果这两个值不相同,则使用构build工具版本19.0.0构build将以BufferOverflowException结束。 资源

从这篇文章的评论也有一些迹象表明,你至less需要瞄准19(android-19)。 如果你的目标是<19,这个解决scheme也适用,请留下评论。

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

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

尝试什么范说:

右键点击你的projectandroid toolsandroid support library

希望这可以帮助 :)

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

我能够通过添加这个额外的行来获得我的问题项目:

 sdk.build.tools=18.1.1 

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

右键点击项目>> 属性 >> Android >> API Level 18为我工作。 但是在做之前,我没有右键单击项目>> Android工具 >> 添加支持库,然后重新启动Eclipse 。 你可能需要玩你select的API级别。

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

更新

right click your project > android tools > android support library

清理你的项目,并尝试build立。

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

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

升级到Android Studio 0.4.0和Gradle 1.9后,其他解决scheme在这里没有任何工作。

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

 buildToolsVersion '19.0.0' 

 buildToolsVersion '19.0.1' 

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

project.properties和带有Ant的AndroidManifest.xml ,与目标版本19有相同的问题。

修正它:

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

我认为@卡提里哈立德是现货。 这个问题只是由于在构build工具中缺less对API级别的支持。

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

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

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

并在清单文件中:

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

在项目中添加库文件..项目 – >右键单击 – >属性 – > android->库 – >单击添加并select库项目,并给予应用和确定..然后,清理项目,再次运行..如果你要重新启动日食..

而且,有时候,需要更新Android SDK构build工具。

什么对我来说是这样的:我从我的项目的根打开project.properties文件,并将target=android-8更改为target=android-17

从dex错误期间java.nio.BufferOverflowException这意味着你没有该级别支持API,因此构build失败,有很多方法可以解决这个问题。

检查你的清单文件uses-sdk android:minSdkVersion =“4”and android:targetSdkVersion =“14”

下面的任何一个将解决这个问题:

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

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

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

右键单击项目>>属性>> Android,并selectAPI级别大于15

要么

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