构build时,Android dex提供了一个BufferOverflowException
当编译一个特定的Android项目,并且只在我的Windows机器上,我从dex中得到一个java.nio.BufferOverflowException
exception。 使用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.xml中android: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
文件。
尝试什么范说:
右键点击你的project
→ android tools
→ android 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添加到您的项目中