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

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

此错误仅在向项目添加特定的外部JAR文件时出现。我花了很长时间寻找可能的解决方案,但没有一个可行。

我甚至尝试将Android 1.6而不是1.5(我目前使用的版本)。


当前回答

我还发现了别的东西。Android使用/libs目录存放JAR文件。我曾多次看到“转换到Dalvik格式失败,错误1”的错误,总是在我的JAR文件中出错时出现。

现在我将Roboguice升级到一个新版本,方法是将新的JAR文件放在/libs目录中,并将类路径切换到新版本。这导致了Dalvik错误。

当我从/libs文件夹中删除一个Roboguice JAR文件时,错误消失了。显然,Android会从/libs中获取所有JAR文件,而不管您在Java构建路径中指定了哪些文件。我不太记得了,但我认为Android从Android 4.0 (Ice Cream Sandwich, ICS)开始默认使用/libs。

其他回答

通常,当构建路径中存在不必要的JAR文件时,似乎就会出现这个问题。

我在开发IntelliJ IDEA时遇到了这个问题。对我来说,这是因为我添加了JUnit和Mockito库,它们在运行时被编译。这需要在模块属性中设置为“testing”。

对我来说

项目->属性->java build path -> in order and export TAB ->取消选中android-support-v4.jar

这些答案对我都没用。我的问题是由JUnit和hamcrest引起的。参见java.lang.IllegalArgumentException: already added: Lorg/hamcrest/BaseDescription;转换到Dalvik格式失败,错误1

我个人通过手动编辑项目设法解决了这个问题。属性文件。

它是什么:

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

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

在我的案例中,这个问题起源于2011年3月更新Eclipse和ADT之后。在我的项目中,我正在使用一个JAR,它正在产生问题来重建,以前的解决方案都不起作用。我花了好几天的时间,到处找都没有满意的答案。显然,.jar文件有双重引用。

最后我:

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

它终于编译成功了。