Android dex 在构建时给出 BufferOverflow 异常

当编译一个特定的 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。

106863 次浏览

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

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

我也有同样的问题,尽管我的项目没有使用支持库。向项目中添加 libs/android-support-v4.jar 可以解决这个问题,而无需将构建工具从 v19恢复过来。

试试 货车说的:

右键单击 project & rarr; android tools & rarr; android support library

希望这对你有帮助:)

我删除了以前的 Android SDK 和 日食

这修复了在我得到 空气污染指数19之后在 Dex 上开始的 BufferOverflow 问题。我之前使用 Eclipse 安装了 Android SDK 作为附加组件包。

右键单击 project > > 物业 > > 仿生人 > > API Level 18。但在此之前,我右键单击 project > > Android 工具 > > 添加支持库并重新启动了 日食。您可能必须发挥与您选定的 空气污染指数水平左右。

在安装新的 SDK 之后,在您的项目文件下有一个新的文件夹,“ Android 依赖项”。如果右键单击并将其从生成路径中删除,则可以再次生成项目。

在项目中添加 Library 文件. 。 Project-> 右键单击-> Properties-> android-> Library-> 单击 Add 并选择 Library Project 并给出 application 和 ok。 然后,清理项目并再次运行. . 如果你想重新启动 Eclipse. 。

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

不需要将构建工具降级到18.1.1 1,这个问题就是 用构建工具修复19.0.1

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

确保 AndroidManifest.xml中的 android:targetSdkVersion值与 Project.properties中的 target=android-<value>值相匹配。如果这两个值不相同,使用构建工具版本19.0.0构建将以 BufferOverflow 异常结束。原文链接: http://groups.google.com/d/msg/android-developers/MCWxArF-P1Y/MSNBZaohQscJ

在这篇文章的评论中也有一些迹象表明,你需要至少瞄准19个(android-19)。如果该解决方案在目标值 < 19时也有效,请留下评论。

这就是我的项目的修复方案。相关的 AOSP 问题是 # 61710。

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

我可以通过添加这个额外的代码行来构建我的问题项目:

sdk.build.tools=18.1.1

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

更新

right click your project > android tools > android support library

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

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

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

对于那些面临 IntelliJIDEA13问题的用户,卸载 BuildTools19。

从 dex 错误期间发生异常 这意味着您没有 支持该级别的 API,因此构建失败,有很多方法可以解决这个问题。

检查清单文件 use-sdk android: minSdkVersion = “4”和 android: targetSdkVersion = “14”

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

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

在升级到 Android Studio 0.4.0和 Gradle 1.9之后,这里的其他解决方案对我来说都不管用。

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

buildToolsVersion '19.0.0'

buildToolsVersion '19.0.1'

我已经解决了这个问题,只需在项目属性文件中做如下更改:

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

在清单文件里:

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

Ant 在 project.propertiesAndroidManifest.xml上的目标版本 19都有同样的问题。

修正:

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

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

右键单击 Project > > Properties > > Android,选择 API Level 大于15

或者

通过右键单击 Project 并选择 Project > > Properties > > Android > > Add 将 google-play-services _ lib 添加到你的项目中