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

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

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

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


当前回答

下面是另一个场景和解决方案:

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

在你的应用项目中,检查任何指向你的库项目的链接源文件夹(它们的名称以“LibraryName_src”的形式存在)。 选择所有这些项目,右键单击,选择“构建路径”->“从构建路径中删除”。 选择“也从项目中取消该文件夹的链接”,然后单击“是”。 清理、重新构建和重新部署项目。

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

编辑:这一点在Android开发博客的一篇文章中得到了证实,特别是这篇文章——见第8段。

其他回答

我也遇到过同样的问题,但这些方法都不起作用。 最后,我在控制台中看到错误是由于重复的类(一个在现有项目中,一个在添加的jar文件中):

java.lang.IllegalArgumentException: already added: package/MyClassclass;
[2011-01-19 14:54:05 - ...]: Dx1 error; aborting
[2011-01-19 14:54:05 - ...] Conversion to Dalvik format failed with error 1

因此,请检查您是否在项目中添加了带有重复类的jar。 如果是,请尝试移除其中一个。

这对我很管用。

我也犯了同样的错误,我尝试了上面所有的方法,但都无济于事。

我的项目是挂在GIT源码管理系统上的,在导出到android应用的过程中,我发现有一些GIT相关的任务。然后我将所有更改提交到GIT存储库,错误消失了。

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

我使用adt7和其他修复没有工作(但我仍然做了他们)。

然后我复制了proguard.cfg从另一个项目,并简单地粘贴到旧的ADT项目文件夹。哇,成功了。

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

[应用]意想不到的顶级异常: [apply] java.lang.IllegalArgumentException: already added: Lcom/谷歌/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 / obfusated . JAR中,但同样的类存在于AdMob SDK JAR文件中。Eclipse在没有ProGuard的情况下构建调试APK,所以它工作得很好。

所以我的解决方案是关闭ProGuard来调试build.xml中的构建。 我希望它能帮助到一些人。

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