在外部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个回答

5
在我的情况下,项目->属性->Java构建路径->排序和导出选项卡->取消勾选android-support-v4.jar。

4
我的问题出在整合Ant + ProGuard + AdMob SDK库 + 调试模式上。我正在使用Ant构建调试APK,并将AdMob SDK JAR添加到libs/目录中。Eclipse正常生成调试APK,但是Ant无法生成。我收到以下错误信息。

[apply] UNEXPECTED TOP-LEVEL EXCEPTION: [apply] java.lang.IllegalArgumentException: already added: Lcom/google/ads/AdActivity; [apply] at 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,因此可以正常工作。
所以我的解决方案就是在build.xml中关闭调试版本的ProGuard。 希望能帮助到某些人。

4
我知道这个问题已经有答案了,但这是我的解决方案:
我的Android项目来自一个Subversion仓库,我只是将其作为新项目进行了检出。我不得不手动将我的库(Android和Java)添加到构建路径中,否则它不会让我编译。然后我就会得到上面的错误。
我不得不创建一个新的Android项目,然后手动复制更改。

4

在我的情况下,我添加了一个外部 jar 包。因此,我将外部 jar 包的位置移动到 Project Prop-->Java buildPath-->Project references 中 Android 参考文献的顶部。


4

这里的任何答案都没有帮助到我。

对于我来说,问题在于mvn eclipse:eclipse生成了一个类路径条目,该条目是指向Android库项目的项目引用,但是它并未在Eclipse构建路径设置中显示出来!这意味着库类会被dexer重复处理,一次来自隐藏的项目引用,一次来自链接的库JAR。

我不得不使用文本编辑器打开.classpath文件并手动删除项目元素。这解决了问题。


3

我个人通过手动编辑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

使用 "Fix Project Properties" 工具无法自动修复此文件。


3
对我来说,问题在于我设置了错误的编译器兼容级别(1.8而不是1.7)。
这个答案解决了它:
在项目SDK部分,当您添加Android SDK时,应提供Java SDK,而我的所有Android SDK都使用Java 8作为SDK,因此即使项目级别为1.7,也会创建具有错误版本的类文件(我不知道为什么,我认为一切都是由项目级别选择的)。现在我改变了SDK(Java版本的“1.x.0”部分)。

1
在2018年,由于必须使用Eclipse Neon构建遗留应用程序,而该构建过程失败并出现了Dalvik错误消息,非常令人沮丧。问题在于Neon安装的编译器兼容性为1.8,而对于遗留应用程序(API 19、4.2.2),必须使用编译器兼容性1.7(而不是编译器1.7)。必须通过大量的首选项来查找兼容性级别,这非常令人沮丧。点赞这个答案,因为它陈述了我所做的事情,以及你将不得不做的事情……如果你能找到这个答案的话(就像我一样找不到,我自己解决了这个问题)。令人沮丧。 - Les

3

我之前使用的是ADT r14,每当我尝试添加任何库项目时都会出现此错误。对我而言有效的方法就是简单地将ADT更新到最新版本。这立即解决了问题。我尝试了stackoverflow上提供的几乎所有解决方法,但其他方法对我并没有真正起到作用。


3

我的一个项目包含Google的Protocol Buffers(协议缓冲区)的 lite 版本,在它的类路径中出现了完全相同的错误。我猜测原因是 protobuf-lite.jar 存在于我的类路径和项目文件夹中,并且是在我之前的机器上构建的。当我下载 Maven 并重新构建 protobuf-lite.jar 文件,然后将其作为用户库添加到我的项目中时,一切都正常工作。


3
以下是我的建议:

以下是我推荐的做法:

  • 完全清理构建
  • 删除我在 Project/Properties/Libraries 中发现的多余的 android.jar 文件。

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