【问题标题】:Android dex gives a BufferOverflowException when buildingAndroid dex 在构建时会出现 BufferOverflowException
【发布时间】:2019-03-17 04:06:42
【问题描述】:

在编译特定的 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 构建工具:19.0.0。

【问题讨论】:

  • 你使用库吗?检查他们的设置
  • @SherifelKhatib,只是支持库和 Google Analytics V2
  • 由于似乎没有人对此提出问题,我已在以下位置提出问题:code.google.com/p/android/issues/detail?id=61710
  • 尝试删除所有 android sdk 、 eclipse 和代码。
  • 在 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=en_US 框架参数:-product com.android.ide.eclipse.adt.package.product 命令行参数:-os linux -ws gtk -arch x86_64 -产品 com.android.ide.eclipse.adt.package.product java.nio.BufferOverflowException at java.nio.Buffer.nextPutIndex(Buffer.java:519)

标签: android dex


【解决方案1】:

无需将构建工具降级回 18.1.11,此问题为 fixed with build tools 19.0.1

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

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

cmets 在这篇文章中也有一些迹象表明您需要至少定位 19 (android-19)。如果您的目标是

This is how the fix looks 用于我的项目。 The related AOSP issue is #61710.

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

【讨论】:

  • 这对我不起作用。验证了所有 project.properties 和 targetSdk。我正在使用最新版本的 IntelliJ IDEA 13 Cardea。幸运的是,卸载 build-tools 19.0.0 确实修复了构建。
  • 为了让它工作,我还必须将目标 SDK 设置为最新版本 (19)。
  • 还要确保目标 sdk 版本已通过您的 sdk 管理器下载(这是我的问题的原因)。
  • 我在 AndroidManifest.xml 和 project.properties 中都有目标 10。尝试重新启动 Eclipse 和清理,但没有帮助。然后我在 config.properties 中将 target 设置为 19 并且它起作用了。没有尝试降级构建工具。 (目标 15 无效)
  • 将清单中的 targetSdkVersion 和属性中的目标设置为 19 对我有用
【解决方案2】:

试试van 说的:

右键单击您的projectandroid toolsandroid support library

希望这会有所帮助:)

【讨论】:

  • 感谢这个解决方案,只需点击两下,问题就解决了!!!!!! (虽然在我的菜单中是“添加支持库”)
【解决方案3】:

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

【讨论】:

  • 是的,解决了它。不过不得不手动删除旧的 19.0.0 目录。
  • 这也为我修复了它,虽然我恢复到 18.0.1
  • 我使用了这个答案,我不必回复:stackoverflow.com/questions/19727915/…
  • 我验证了所有 project.properties 和 targetSdk。我正在使用最新版本的 IntelliJ IDEA 13 Cardea,并使用了该项目的 SDK 版本。卸载 build-tools 19.0.0 是为我的项目修复构建的唯一方法。
  • 谢谢。恢复到构建工具 18.1.1 并删除 19 为我解决了这个问题。我以为我要疯了
【解决方案4】:

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

sdk.build.tools=18.1.1

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

【讨论】:

  • 我认为这也是问题背后的原因之一。我从未在目标 sdk 中使用过版本 19,但问题仍然存在。可能 sdk 构建工具设置为 19,必须恢复
  • 使用的目标不能确定使用的buildtools版本。
  • 我添加了最新的支持库并将这一行添加到项目属性中,我的问题得到了解决...谢谢
  • 我很惊讶这能奏效;它在 AOSP 源代码中为 sdk.buildtools,而不是 sdk.build.tools,这对我有用。
【解决方案5】:

右键单击项目>> Properties >> Android >> API Level 18 为我工作。但在我这样做之前,我确实右键单击项目>>Android 工具>>添加支持库并重新启动Eclipse。您可能需要玩转您选择的API 级别。

【讨论】:

  • API 级别低于 18 怎么办?我们如何在 API 级别 18 以下运行应用程序?
  • 我必须添加项目->Android 工具->添加支持库并安装 ADT 19.0.1 支持库。之后,它会生成 apk。
【解决方案6】:

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

【讨论】:

  • 我注意到这个文件夹会导致重复的 JAR 问题。但删除它并没有解决我的问题。
  • @Salsero69 您是否在实际项目中使用库项目作为参考?
【解决方案7】:

更新

right click your project > android tools > android support library

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

【讨论】:

    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

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

      【讨论】:

      • 您是如何将 API 级别更改为 16 的?
      • 我只是右键单击我的项目,然后从列表中选择 Android。它应该会显示已安装的 android API 版本列表,选择 API 级别为 16 的版本(4.1.2)。
      【解决方案10】:

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

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

      buildToolsVersion '19.0.0'
      

      buildToolsVersion '19.0.1'
      

      【讨论】:

      • 是的,这个问题似乎已在 19.0.1 中修复。也可以与“ant debug”配合使用。
      【解决方案11】:

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

      【讨论】:

        【解决方案12】:

        在使用 Ant 的 project.propertiesAndroidManifest.xml 上的目标版本 19 存在相同的问题。

        通过以下方式修复它:

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

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

        【讨论】:

          【解决方案13】:

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

          【讨论】:

            【解决方案14】:

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

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

            在清单文件中:

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

            【讨论】:

              【解决方案15】:

              在项目中添加库文件.. 项目->右键单击->属性->android->库->单击添加并选择库项目并给出应用并确定.. 然后,清理项目并再次运行..如果你想重新启动 eclipse..

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

              【讨论】:

                【解决方案16】:

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

                【讨论】:

                  【解决方案17】:

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

                  检查你的清单文件 uses-sdk android:minSdkVersion="4" 和 android:targetSdkVersion="14"

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

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

                  【讨论】:

                    【解决方案18】:

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

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

                    【讨论】:

                    • 我可以从哪里安装 adt bundle ?
                    【解决方案19】:

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

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2023-03-27
                      • 1970-01-01
                      • 2018-08-12
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-05-10
                      • 2021-12-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多