外部 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 > 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 文件