在外部JAR包中,转换为Dalvik格式失败,错误代码为1。

924

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

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lorg/xmlpull/v1/XmlPullParser;
....
Conversion to Dalvik format failed with error 1

只有当我将特定的外部JAR文件添加到我的项目中时,才会出现此错误。我尝试了很长时间寻找可能的解决方案,但都没有起作用。

我甚至尝试将Android版本从1.5更改为1.6,但问题仍未解决。


如果您在工作区中使用库项目,则此文章可能会帮助您解决此错误。 - Nguyen Minh Binh
4
我试过了,但是还是出现了同样的错误。最后我通过在Properties->JavaBuildPath->Projects中添加库并将其添加到库中来解决了这个问题。它被称为"必须添加到构建路径中的对象"。 - user407749
27
这个问题对我来说已经变得很残酷了。几乎让我想放弃安卓编码了。所有的解决方案都不适用于我。我只能不断地尝试导出,但都会失败并提示达尔维克错误1,最终才能成功。发布版本需要花费15-30分钟,这真是一场灾难。 - Anthony
如果您在一个工作区上使用两台计算机,并使用文件共享软件,则有时会将工作区->项目->bin->com文件夹复制为com 1、com 2。只需删除带有1或2的所有内容,清理您的项目,然后您就可以开始了。 - Ozan Atmar
71个回答

824

转到 项目 » 属性 » Java构建路径 » 库,将除“Android X.Y”(在我的情况下是 Android 1.5)之外的所有内容都删除。 点击确定。 转到 项目 » 清理 » 清理所选项目 » 选择您的项目并点击确定。 这应该有效。

还有可能是您的项目文件夹中某个位置有一个JAR文件(我曾将Admob JAR文件复制到我的src文件夹中),然后将其作为Java Path Library添加。 它不会显示在包资源管理器中,因此您没有注意到它,但它确实被计算了两次,导致可怕的Dalvik错误1。

另一个可能的原因是软件包名称冲突。 假设您有一个软件包com.abc.xyz和其中一个名为A.java的类,并且另一个库项目(已添加到此项目的依赖项中)包含相同的com.abc.xyz.A.java,那么您将收到完全相同的错误。 这意味着您对同一文件A.java有多个引用,无法正确构建它。

在其他情况下,如果您意外或故意手动编辑/添加类路径文件中的任何内容,则可能会发生这种情况。 在某些情况下,我们可能会手动添加android.jar路径到classpath文件以生成Java文档。在生成javadoc后删除它,代码将正常工作。如果仍有问题,请检查这个。


4
我遇到了同样的问题,用户408841提供的上述步骤对我有用。 - Arunabh Das
112
嗨,只需执行“项目 » 清理 » 清理所选下面的项目 » 选择你的项目并点击 OK”即可解决我的问题。忽略第一个部分。 - Kurru
80
这个解决方案让我感到相当困惑。如果你移除了所有的jar文件和库,你如何才能成功地编译这个项目呢?请注意,我的翻译会尽可能地保持原意,并使其更易于理解,但不会添加其他任何信息或解释。 - Cheok Yan Cheng
3
我发现这对我起作用的唯一方法是清除所有项目!尤其是依赖于有问题项目的那些项目。 - Roy Hinkley
7
我是一个从.NET转来的Android开发新手,老实说,这个错误代表了我的整体经验。说真的...你们是想让我怎么处理这个错误信息?它完全没有意义。“Dalvik”?你在说什么啊?还是让我回到Visual Studio吧 :p - David Masters
显示剩余20条评论

274

我解决了这个问题。

这是一个JAR文件冲突。

看起来我在我的构建路径上有两个JAR文件包含相同的包和类。

smack.jarandroid_maps_lib-1.0.2

从其中一个JAR文件中删除此包解决了问题。


18
简而言之,这是一个JAR文件冲突。具体来说,可能是任意两个JAR文件之间的冲突。在我的情况下,冲突出现在jackson-all-1.7.4.jar、jackson-core-asl-1.5.4.jar和jackson-mapper-asl-1.5.4.jar之间。我移除了两个1.5.4版本的JAR文件,并只保留了1.7.4版本的。 - jamesmortensen
1
我在.classpath中手动指定了android-sdk/platforms/android-10/android.jar,然后我在项目属性中将其更改为2.3.3(Android 10),导致两个android.jar发生冲突。在Java Build Path中删除多余的部分解决了问题。 - Tyler
2
在我的情况下,冲突来自ActionbarSherlock,它已经包含了Android支持包,而Git却重复包含了一次。 - Tobias
仅供参考:在我的情况下,由于失败的原因是两个项目中的不同 Android 目标版本不同:android:targetSdkVersion="xx"。 - Andreas Mattisson
我在使用Dropbox SDK时遇到了同样的问题...我从Dropbox包中多余地添加了一个.android.jar文件,但实际上并不需要。我将其删除后,问题得以解决。 - MTurPash
显示剩余2条评论

127

Windows 7 解决方案:

确认问题是由文件[Android SDK安装目录]\tools\proguard\bin\proguard.bat中的ProGuard命令行引起的。

编辑以下行将解决该问题:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
为了遵守要求,我只能返回原始文本:

to

。如果您有其他需要翻译的内容,请告诉我。
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

这对我没有用,但是从我的default.properties文件中注释掉proguard行确实让错误消失了。我的问题似乎与proguard有关。当尝试导出项目时,我只收到“转换为Dalvik格式失败,错误1”的消息。你有什么想法吗? - Ben H
非常适合于 Windows 7 / Android 开发者。 - hanumant
非常感谢,Windows 7 x86。 - While-E
正确的解决方案,运行良好。注释掉proguard行可能会产生同样的效果,但是也会停止混淆您的代码。因此,这个才是正确的解决方案。但是是的,我在Windows 7上,这可能是不同之处。 - Sharique Abdullah
你好,我尝试了但是仍然无法解决我的问题,我的操作系统是Windows 8 - 64位。 - Hiren Patel
显示剩余7条评论

94

您可以通过在导出(未)签名的Android应用程序时关闭菜单>"Project" > "Build Automatically"(Eclipse Android Developer Tools, Build: v22.0.1-685705)来轻松解决此问题。 在此之后,不要忘记再次打开它。


2
这在我的情况下解决了问题。否则,问题会零星发生且没有明确的原因(例如,不良的jar或路径)。 - D2TheC
这让我抓狂了!这是唯一对我有效的解决方案。不知道为什么。 - PrivusGuru
1
这个对我解决了问题 - 其他的方案可能也有所帮助,但在让它正常工作之前,这个是最终的方案。 - pertz
我花了4个小时尝试了所有能找到的建议,最终找到了这个。谢谢 - 它立即解决了问题。 - Squonk
非常简单的解决方案,但它确实有效!让我省了几个小时与Eclipse无意义争斗的时间。在尝试更复杂的解决方案之前,请先尝试此方法。 - fragon

53
如果您使用的是ADT版本12或更高版本,则应将proguard更新至4.6(如这里所述)。此外,您应该保留...\bin\proguard.bat文件的原始形式。只需从网上下载它,并从下载的软件包中复制lib文件夹到以下目录中: [Android SDK安装目录]\tools\proguard\lib

3
这一问题出现在我使用多个 ADT 上。下载并替换 Proguard JAR 文件可以解决该问题。 - Mr. S
哇,谢谢,这个对我有用,虽然我还需要清除一些警告。https://dev59.com/0G855IYBdhLWcg3wHweH - Nick Gotch
我把Proguard版本从4.4改成了4.9,但问题仍未解决。 - Hiren Patel
1
我刚刚不得不自己完成这个任务,从4.7升级到4.11(目前最新版本在此处:http://sourceforge.net/projects/proguard/files/)。我只是重命名了旧的<sdk>/tools/proguard目录,并将完整的未压缩的proguard4.11目录移动到旧路径。哇!现在如果我能找回之前的一个小时就好了...-_- - qix
1
谢谢!这解决了我的问题。我的问题是由于我从SDK管理器更新SDK时,Proguard被重置为API级别11附带的原始版本所致。在我更新Proguard和JAR到最新版本后,它可以正常工作!我的参考资料:http://java.dzone.com/articles/my-reminder-how-fix-conversion - mmw5610

41

编辑(新方案):

看起来之前的方案只是一个绕过的方法。我最终成功地永久性地解决了这个问题: 在我的情况下,我的项目中的 android-support-v4 文件与被引用在我的项目中的 Facebook 项目中的文件不匹配。

我通过执行 Lint 检查(Android 工具 / 运行 Lint: 检查常见错误)发现了这个错误。

我的先前解决方案:

我已经尝试了这个网站上的所有可能的解决方案 - 没有任何帮助!!!

最后,在这里找到了答案: https://groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4

简单的步骤:

进入“项目”->取消选中“自动构建”

进入“项目”->清理...,清理库项目和您的应用程序项目

当“自动构建”仍然禁用时,将应用程序导出为已签名的 APK


谢谢,这对我在使用ADT Eclipse 23开发Cocos2dx JS项目时非常有帮助。 - snowflakes74
错误:在第1个参数中未知选项“0409”。 - Iman Marashi

30

以下是另一种情况及解决方案:

如果您最近在更新Eclipse的ADT之后遇到了这个问题:

  1. 在您的应用项目中,检查是否存在指向库项目的链接源文件夹(它们的名称形式为“LibraryName_src”)。
  2. 选择所有这些项目,右键单击,选择“Build Path”->“从构建路径中删除”。
  3. 选择“同时取消该文件夹与项目的链接”,然后点击“”。
  4. 清理、重建和部署项目。

似乎原因是先前某个版本的ADT将库项目源文件夹链接到“子”项目,并且当前的ADT/Dex组合不再与该解决方案兼容。

编辑:这在Android Dev Blog的一篇文章中得到了确认,具体请参见此处 - 请参阅第8段及其后面的内容。


1
这绝对是对我的特定问题最有帮助的答案。非常感谢!!! - Bill The Ape
这是我成功使用的内容,而不是用户408841高票答案。 - rics

29

前往项目,然后取消选择“自动构建”。尝试导出项目,这样错误就会消失。


27

如果您在构建路径中添加了Android.jar 文件,可能是因为在Eclipse中意外使用了快速修复功能而导致的。请使用右键单击 项目 -> 构建路径 -> 配置构建路径 -> android.jar,进行删除。


25

每当出现这个错误,我都只需清理项目即可解决。


重启Eclipse + 清理项目 + 手动构建对我有用。 - dodgy_coder
清理对我有用...所以如果您有一个在实际手机上运行过的好的调试版本,然后转到发布导出并看到此错误...请先尝试对所有项目进行清理。 - lepert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接