【问题标题】:"Conversion to Dalvik format failed with error 1" on external JAR外部 JAR 上的“转换为 Dalvik 格式失败,错误 1”
【发布时间】:2011-02-10 11:17:06
【问题描述】:

在 Eclipse 中的 Android 应用程序中,我收到以下错误。

意外的顶级异常:
java.lang.IllegalArgumentException:已添加:Lorg/xmlpull/v1/XmlPullParser;
....
转换为 Dalvik 格式失败,出现错误 1

仅当我将特定的外部 JAR 文件添加到我的项目时才会出现此错误。我为可能的解决方案搜索了很长时间,但没有一个可能的解决方案有效。

我什至尝试改用 Android 1.6 而不是 1.5(我使用的当前版本)。

【问题讨论】:

  • 如果您在工作区中使用库项目,This acticle 可能会帮助您修复此错误。
  • 我试过这个,它给出了同样的错误。我最终通过在 Properties->JavaBuildPath->Projects 中添加库并在那里添加库来修复它。它被称为“构建路径上的必需对象:”。
  • 这个问题对我来说已经很残酷了。放弃Android编码几乎就够了。没有一个解决方案对我有用。我只需要不断尝试以 Dalvik 错误 1 ​​导出失败,最终它会成功。发布版本需要 15-30 分钟。这是一场彻头彻尾的灾难。
  • 如果你在一个工作空间上使用两台电脑和一个文件共享软件,它有时会将工作空间->项目->bin->com文件夹复制为com 1,com 2。只需删除所有带有1或2的内容,清理你的项目,你就可以开始了。

标签: android dalvik android-sdk-1.6


【解决方案1】:

这个答案基本上是很多人想说的,但可能很多人不明白。所以...

“另一个原因可能是如果您有一个 JAR 文件位于 您的项目文件夹,然后将其添加为 Java 路径库。它确实 没有出现在包资源管理器下,所以你不会注意到它,但它 确实被计算了两次,导致可怕的 Dalvik 错误。”回答 2012 年 1 月 2 日 6:23 Rashmi.B

意思:

如果您的 lib 文件夹中有这两个库 (.jar):

然后这两个文件夹也被添加到您的构建路径中:

表示它们被计算了两次,从而给你错误!

解决方案:

  1. 从构建路径中删除这些库同时删除“Android Dependencies”:
  2. 清理所有项目
  3. 导出您的项目
  4. 享受吧! :)

【讨论】:

    【解决方案2】:

    在我的情况下,我添加了一个外部 jar。所以我将外部 jar 位置移动到项目 Prop 中的 android 引用的顶部--->Java buildPath--->项目引用

    【讨论】:

      【解决方案3】:

      这里的答案对我的情况都没有帮助。

      对我来说,问题是mvn eclipse:eclipse 正在生成一个类路径条目,该条目是对 Android 库项目的项目引用,但是,它在 Eclipse 构建路径设置中没有显示!这意味着库类在 dexer 中结束了两次,一次来自隐藏的项目引用,一次来自链接库 JAR。

      我必须使用文本编辑器打开 .classpath 并手动删除项目元素。这解决了问题。

      【讨论】:

        【解决方案4】:

        我知道它已经回答了,但这是我的解决方案:

        我的 Android 项目来自 Subversion 存储库,我刚刚将 Checkout 作为一个新项目。我必须手动将我的库(Android 和 Java)添加到构建路径,否则它不会让我编译。然后我会得到上述错误。

        我必须创建一个新的 Android 项目,然后手动复制所做的更改。

        【讨论】:

          【解决方案5】:

          我的问题在于Ant + ProGuard + AdMob SDK 库 + 调试模式的集成。我正在使用 Ant 构建调试 APK,并将 AdMob SDK JAR 添加到 libs/ 目录。 Eclipse 可以正常生成调试 APK,但 Ant 不能。我收到以下错误。

          [应用] 意外的顶级异常: [应用] java.lang.IllegalArgumentException:已添加:Lcom/google/ads/AdActivity; [申请] 在 com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)

          我还在我的build.xml 中为调试构建打开了 ProGuard(默认为关闭):

          <target name="-debug-obfuscation-check">
              <property name="proguard.enabled" value="true"/>
          </target>
          

          这就是问题所在。不知何故,ProGuard 和 AdMob SDK 在调试模式下并不同时存在。 ProGuard 没有混淆 AdActivity 类,因此它出现在 bin/proguard/obfuscated.jar 中,但未混淆,但同一类存在于 AdMob SDK JAR 文件中。 Eclipse 正在构建没有 ProGuard 的调试 APK,所以它运行良好。

          所以我的解决方案只是关闭 ProGuard 以在 build.xml 中进行调试构建。 我希望它可以帮助某人。

          【讨论】:

            【解决方案6】:

            我在其类路径中包含 protobuf lite(Google 的Protocol Buffers)的项目中遇到了完全相同的错误。我猜原因是我的类路径中的protobuf-lite.jar 和项目文件夹是在我以前的机器中构建的。当我下载 Maven 并重新构建 protobuf-lite.jar 文件,然后将其作为用户库重新添加到我的项目中时,一切正常。

            【讨论】:

              【解决方案7】:

              对我有用的是:

              • 彻底清理构建
              • 删除了我在 Project/Properties/Libraries 中找到的无关的 android.jar 文件。

              【讨论】:

                【解决方案8】:

                我使用的是 ADT r14,当我尝试添加任何库项目时,我得到了这个错误。对我来说,有效的只是将 ADT 更新到最新版本。它立即解决了问题。我几乎尝试了 stackoverflow 上给出的所有解决方法,但没有其他方法对我真正有用。

                【讨论】:

                  【解决方案9】:

                  我个人设法通过在 Eclipse 项目中手动编辑 project.properties 文件来解决此问题。

                  它是什么:

                  target=android-16
                  android.library.reference.1=..\\..\\github\\ActionBarSherlock\\library
                  android.library.reference.2=../../github/android-numberpicker/library
                  

                  我把它改成这样,问题就消失了:

                  target=android-16
                  android.library.reference.1=../../github/ActionBarSherlock/library
                  android.library.reference.2=../../github/android-numberpicker/library
                  

                  此文件没有使用“修复项目属性”工具自动修复。

                  【讨论】:

                    【解决方案10】:

                    对我来说,问题在于我设置了错误的编译器合规级别(1.8 而不是 1.7)

                    This回答解决了:

                    在项目 SDK 部分,当您添加 Android SDK 时,您应该 提供 Java SDK,我所有的 Android SDK 都使用 Java 8 作为 SDK,所以它 使用错误的版本创建类文件,即使项目 等级是1.7(我不知道为什么,我以为一切都被选中了 按项目级别)。现在我更改了 SDK(Java 版本“1.x.0” 部分。)

                    【讨论】:

                    • 在 2018 年,坚持使用 必须 使用 Eclipse Neon 构建的遗留应用程序,构建失败并显示 Dalvik 消息。非常令人沮丧。问题是 Neon 安装时编译器兼容性为 1.8,而对于旧版应用程序(api 19、4.2.2),您必须使用编译器兼容性 1.7(不是编译器 1.7,兼容性 1.7)。筛选过多的偏好以最终找到兼容性级别是非常令人沮丧的。赞成这个答案,因为它说明了我做了什么,以及你必须做什么......如果你能找到这个答案(就像我找不到,我自己解决了它)。令人沮丧
                    【解决方案11】:

                    在我的例子中,这个问题是在 2011 年 3 月更新 Eclipse 和 ADT 之后出现的。在我的项目中,我使用了一个 JAR,它产生了要重建的问题,而以前的解决方案都不起作用。我花了几天时间尝试所有,上下搜索没有令人满意的解决方案。显然有对 .jar 文件的双重引用。

                    最后我:

                    1. 从库中删除了所有引用,
                    2. 已删除应用程序中的物理文件表单。
                    3. 使用“添加外部 Jar”获取 .jar(位于项目外部的不同目录中)
                    4. 执行了一个“干净”的项目,
                    5. 使用 (ctrl)+(shift)+O 将引用更新到调用 jar 的模块中

                    它终于编译了。

                    【讨论】:

                      【解决方案12】:

                      这个错误是由于

                      1. 拥有多个 JAR 文件。
                      2. 如果JAR文件有类似的类文件,则.dx格式无法解析。

                      解决方案:

                      1. 制作并选择合适的 JAR 文件。
                      2. 获取最新的。

                      【讨论】:

                        【解决方案13】:

                        我正在使用 ADT 7,但其他修复不起作用(但我仍然做了)。

                        然后我从另一个项目中复制了proguard.cfg,并将其粘贴到旧的 ADT 项目文件夹中。而wallah,它成功了。

                        【讨论】:

                          【解决方案14】:

                          当我添加具有不同版本的相同 jar 文件时,我也遇到了这个问题,我只需删除旧版本的 jar 并清理它对我来说工作正常的项目。

                          【讨论】:

                            【解决方案15】:

                            当我尝试导出我的项目时,我遇到了同样的问题。在控制台中什么都看不到。

                            对我来说,解决方案是将 proguard 升级到最新版本,希望这对某人有所帮助。

                            【讨论】:

                              【解决方案16】:

                              我完成了this answer 中的步骤,但仍然没有得到解决方案。我一直在网上搜索,发现如果您在 Android 设备连接到计算机时尝试导出 APK,则会出现此错误。

                              断开我的设备,然后关闭项目,重新启动计算机,打开项目并清理它,这三种情况都对我有用。

                              【讨论】:

                                【解决方案17】:

                                在 ADT 17/Tools r17 预览版中出现错误 should be finally fixed!至少有一些实例,如果不是全部的话。

                                【讨论】:

                                • 我可以说它们不是固定的。我让他们比以前更多地低于 r20。我现在后悔升级了。
                                【解决方案18】:

                                就我而言,只需将手机从 USB 上拔下即可修复此错误。

                                【讨论】:

                                  【解决方案19】:

                                  这通常发生在我运行了很长时间之后,或者在我成功构建了一个签名的 apk 之后。

                                  就我的经验而言,修复它我只是重新启动 eclipse

                                  【讨论】:

                                  • 是的,对我来说,这似乎也是唯一的解决方案。尝试了其他答案中提出的许多建议,但似乎没有用。它通常发生在已经拥有项目“运行方式”、“android 应用程序”之后,而您仍在处理它,然后将其导出。重新启动 Eclipse,然后立即为我导出作品!
                                  【解决方案20】:

                                  我遇到了同样的错误,并尝试了上述所有方法,但没有任何帮助。

                                  我的项目附加到 GIT 源代码控制系统,我意识到在导出到 Andorid 应用程序时有一些与 GIT 相关的任务。然后我将所有更改提交到 GIT 存储库并错误消失。

                                  因此,如果您使用 GIT 进行源代码控制,但以上没有任何帮助,请尝试将所有更改提交到 GIT 存储库(并最终推送到上游)并再次尝试导出。

                                  【讨论】:

                                  • 这对我有帮助,谢谢!不幸的是,似乎没有针对该错误的通用解决方案。
                                  【解决方案21】:

                                  NewRelic 用户:

                                  如果您在应用中集成了 newrelic jar,则当 newrelic 版本过期时会发生这种情况。

                                  解决方案

                                  • 将 newrelic jar 更新到最新版本。在eclipse上,只需右键单击项目并更新newrelic。或者您可以直接下载新版本。

                                  【讨论】:

                                    【解决方案22】:

                                    只是 Project &gt; Clean 为我工作。

                                    【讨论】:

                                      【解决方案23】:

                                      这些答案都不适合我。我的问题是由 JUnit 和 hamcrest 引起的。另见java.lang.IllegalArgumentException: already added: Lorg/hamcrest/BaseDescription; Conversion to Dalvik format failed with error 1

                                      【讨论】:

                                        【解决方案24】:

                                        最好将所有 *.jar 文件包含在项目文件夹树的“lib”目录中。这样,您就不需要通过转到项目的属性来定义构建路径。 “lib”已经是构建路径

                                        【讨论】:

                                          【解决方案25】:

                                          我遇到了同样的问题。当我检查时,我看到有 2 个具有相同名称的类,在我添加的每个外部 jar 文件中都有 1 个。然后我必须删除 1 个 jar 文件。幸运的是,我为我删除的 1 找到了另一个 jar 文件。

                                          【讨论】:

                                            【解决方案26】:

                                            如果您在您的应用中使用 Leadbolt 广告 SDK,并且您正在组合“通知广告”和“展示广告”,则您需要使用 pubxappCom.jar 而不是 pubxapp.jar 来制作通知广告,否则您会收到此错误!

                                            编码愉快!

                                            【讨论】:

                                              【解决方案27】:

                                              依赖项的 Google API 会导致此问题。删除后效果很好。

                                              【讨论】:

                                                【解决方案28】:

                                                我清理了我的主应用程序项目和它使用的 Android 库项目。解决了问题

                                                【讨论】:

                                                  【解决方案29】:

                                                  -从您的 java 构建路径中删除所有库。并再次添加。 - 清理你的项目。

                                                  运行它。

                                                  【讨论】:

                                                    【解决方案30】:

                                                    这个错误是由于我从构建路径中排除的几个文件被删除,但没有从排除列表中删除而导致的。

                                                    项目 -> 属性 -> Java 构建路径 -> 源选项卡 -> 项目/src 文件夹 -> 双击排除 -> 删除项目中不再存在的所有文件。

                                                    【讨论】:

                                                      猜你喜欢
                                                      • 2011-06-29
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      相关资源
                                                      最近更新 更多