外部 JAR 上的“转换为 Dalvik 格式失败,错误 1”

Posted

技术标签:

【中文标题】外部 JAR 上的“转换为 Dalvik 格式失败,错误 1”【英文标题】:"Conversion to Dalvik format failed with error 1" on external JAR 【发布时间】: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的内容,清理你的项目,你就可以开始了。 【参考方案1】:

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

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

意思:

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

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

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

解决方案:

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

【讨论】:

【参考方案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 更新到最新版本。它立即解决了问题。我几乎尝试了 *** 上给出的所有解决方法,但没有其他方法对我真正有用。

【讨论】:

【参考方案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 文件的双重引用。

最后我:

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

它终于编译了。

【讨论】:

【参考方案12】:

这个错误是由于

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

解决方案:

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

【讨论】:

【参考方案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 文件夹 -> 双击排除 -> 删除项目中不再存在的所有文件。

【讨论】:

以上是关于外部 JAR 上的“转换为 Dalvik 格式失败,错误 1”的主要内容,如果未能解决你的问题,请参考以下文章

转换为 Dalvik 格式失败:无法执行 dex:Java 堆空间

由于“转换为 dalvik 格式失败并出现错误 1”,PhoneGap 条码扫描器插件无法导出

如何使用 JXL 2.6.12 jar 读取 excel 文件

jitsi-android 无法编译构建

Jar 中的 @PropertySource 用于类路径上的外部文件

使用 libgdx 应用在 Eclipse 中启用 multidex