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

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

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

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


当前回答

我的问题是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中的构建。 我希望它能帮助到一些人。

其他回答

如果您在构建路径中添加了Android.jar文件,可能是由于Eclipse中的意外快速修复,也会导致这种情况。删除它右击项目->构建路径->配置构建路径-> android.jar,删除。

我遇到了这个问题,但我的解决办法是双重的。 1)。我不得不在项目->属性-> Android下添加一个Android目标版本。 2)。我没有所有的“第三方插件”。点击AVD SDK管理器下的可用软件包->第三方附加组件->谷歌公司。我下载了所有的sdk,这解决了我的问题。

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

也有可能你在你的项目文件夹中有一个JAR文件(我已经把Admob JAR文件复制到我的src文件夹中),然后把它添加为Java路径库。它不会显示在包资源管理器下,所以你不会注意到它,但它会被计算两次,导致可怕的Dalvik错误1。

另一个可能的原因是包名冲突。假设您有一个包com.abc.xyz,在这个包中有一个名为a .java的类,另一个库项目(添加到这个项目的依赖项中)包含相同的com.abc.xyz. a .java,那么您将得到完全相同的错误。这意味着,您对同一个文件A.java有多个引用,不能正确地构建它。

在其他情况下,如果你不小心或故意在类路径文件中手动编辑/添加任何东西,这可能会发生。在某些情况下,我们可以手动将android.jar路径添加到类路径文件中以生成java doc。删除后,javadoc生成的代码将工作正常。如果还有问题,也请检查一下。

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

我知道这个问题已经有答案了,但这是我的解决方案:

我的Android项目来自一个Subversion存储库,我刚刚做了Checkout as a New project。我必须手动将我的库(Android和Java)添加到构建路径,否则它不会让我编译。然后我就会得到上面的错误。

我必须创建一个新的Android项目,然后手动复制更改。