Android dex在构建时会产生BufferOverflowException

bee*_*tra 174 android dex

在编译特定的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
Run Code Online (Sandbox Code Playgroud)

使用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.
Run Code Online (Sandbox Code Playgroud)

就像我说的,我的MacBook上没有这个问题,即使它们都升级到最新版本的Android Build工具:19.0.0.

Flo*_*low 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.1到该local.properties文件即可.

  • 这绝对适合我!在降级之前尝试这个! (21认同)
  • 这不适合我.验证了所有project.properties和targetSdk.我使用的是最新版本的IntelliJ IDEA 13 Cardea.幸运的是,卸载build-tools 19.0.0确实修复了构建. (5认同)
  • 在属性中设置清单和目标中的targetSdkVersion,为我工作了19 (5认同)
  • 为了让它成功,我还必须将目标SDK设置为最新版本(19). (3认同)

小智 83

尝试说:

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

希望这可以帮助 :)

  • 感谢您提供此解决方案,只需点击两下即可解决问题!!!!! (虽然在我的菜单中,它是"添加支持库") (19认同)

小智 57

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

  • 是的,修好了.不得不手动删除旧的19.0.0目录. (3认同)

mrr*_*rrk 50

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

sdk.build.tools=18.1.1
Run Code Online (Sandbox Code Playgroud)

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


lea*_*ner 7

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

  • API级别低于18怎么样?我们如何在API级别18下运行应用程序? (3认同)

Mah*_*iya 7

安装新SDK后,项目文件下会有一个新文件夹"Android Dependencies".如果右键单击并从构建路径中删除它,您将再次能够构建项目.


Har*_*hid 5

更新

right click your project > android tools > android support library

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