Android:出现错误:转换为Dalvik格式失败

13

我正在开发 Android 应用程序,在使用外部 jar 文件的情况下出现了错误。在网上搜索时,看到了您的帖子并按照您提供的方法更改了 eclipse.ini 文件中的 Xms 和 Xmx 参数,但这个错误仍然没有被解决。

我正在使用 Eclipse IDE for Java 和 Android SDK 2.1 在 Mac OS 上进行开发。请帮忙或指点一下我可以寻求帮助的人。

顺便说一句,这个错误只会在我添加外部 jar 文件(我需要这些文件来完成我的项目)时出现。以下是我类路径中所拥有的外部 jar 文件列表:

  • httpclient-4.0.1.jar 来自 apache
  • httpcore -4.0.1.jar 来自 apache
  • commons-codec-1.3.jar 来自 apache
  • commons-logging-1.1.1.jar 来自 apache
  • json_simple-1.1.jar 来自 google

以下是完整的错误信息:

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lorg/apache/commons/logging/impl/AvalonLogger;
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.dex.file.DexFile.add(DexFile.java:143)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.command.dexer.Main.processClass(Main.java:301)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:278)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.command.dexer.Main.access$100(Main.java:56)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:229)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.cf <http://com.android.dx.cf.direct.ClassPathOpener.pro> .direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:130)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.command.dexer.Main.processOne(Main.java:247)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
[2010-05-02 21:57:05 - MyApp]     at com.android.dx.command.dexer.Main.run(Main.java:139)
[2010-05-02 21:57:05 - MyApp]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2010-05-02 21:57:05 - MyApp]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2010-05-02 21:57:05 - MyApp]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2010-05-02 21:57:05 - MyApp]     at java.lang.reflect.Method.invoke(Method.java:592)
[2010-05-02 21:57:05 - MyApp]     at com.android.ide.eclipse.adt.internal.sdk.DexWrapper.run(Unknown Source)
[2010-05-02 21:57:05 - MyApp]     at com.android.ide.eclipse.adt.internal.build.ApkBuilder.executeDx(Unknown Source)
[2010-05-02 21:57:05 - MyApp]     at com.android.ide.eclipse.adt.internal.build.ApkBuilder.build(Unknown Source)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:627)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:140)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238)
[2010-05-02 21:57:05 - MyApp]     at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
[2010-05-02 21:57:05 - MyApp] 4 errors; aborting
[2010-05-02 21:57:05 - MyApp] Conversion to Dalvik format failed with error 1

这个问题有解决方案吗?我在IntelliJ中也看到了它。 - Amir Raminfar
IntelliJ IDEA的解决方案是什么?ADT可以。 - Crossle Song
11个回答

21
在r14版本中,他们更改了外部库的引用方式,这可能会导致此问题。您可以通过从文件夹树中删除带有名称中的“_src”链接文件夹来解决它:
  • 右键单击并选择“生成路径>从生成路径中删除”
  • 会弹出一个窗口。确保选中“还要从项目中取消链接该文件夹”,然后接受它。
请参见http://android-developers.blogspot.co.uk/2011/10/changes-to-library-projects-in-android.html

这是唯一解决我的问题的方法。感谢您发布这个。 - Michael Little
我从构建路径中移除了jar文件。现在项目根本无法运行。 - Rene

6

预期外的顶级异常: java.lang.IllegalArgumentException: 已添加: Lorg/apache/commons/logging/impl/AvalonLogger;

您正在尝试将org.apache.commons.logging.impl.AvalonLogger两次添加到您的项目中。请勿这样做。

此外,您通过JAR添加的许多内容已经在Android中,例如HttpClient。这可能导致您的错误。


4
我也遇到过这个问题,但我事先确保我的jar文件中没有重复的类。这可能是与同一个jar文件的多次加载有关的其他问题。类路径和引用库列表看起来都很合适。在一些尝试之后,以下一些组合解决了问题:
- 我使用了另一个外部jar文件,它也在本地目录中。我将其从构建路径中删除,并从本地jar文件重新添加。 - 我删除了所有外部jar文件,然后逐个重新添加它们,确保它们是正确的。 - 我删除了项目中的.classpath文件以及bin和gen目录。 - 我在Eclipse中清理了项目,强制重新生成文件。 - 我还将jar文件在构建顺序中移到了gen目录上方。
以上某些组合似乎解决了问题。如果再次出现此问题,我会更加小心,看看是否可以重现它。

2

我曾经写过一篇关于这个错误的可能原因和解决方案的博客文章,你可以在这里查看。希望对你有所帮助。


1
感谢您在博客上提供的详细描述,可惜这并没有帮助到我 ;( - Manuel

2

我猜你把你的jar包放在一个文件夹里,比如library文件夹,然后从这个文件夹中构建路径。你只需要移除这个jar文件,然后尝试从项目中选择属性,接着选择Java构建路径 -> 添加外部JAR包。这样就可以了。


1
我的问题是由于在库项目中也有相同的项目引用。几个更新之前,这是正常的行为,但自从库处理方式发生变化后,我现在需要从我的项目中删除这些引用,并且只让一个库引用它。

1
我遇到了这个问题,因为我把 .jar 文件放在了我的 src/ 目录下,所以 Eclipse 把它复制到了 bin/ 目录,并尝试从两个位置链接它。将它从 src/ 移动到 libs/ 目录解决了这个问题。

1

这种情况通常发生在我使用proguard进行自定义构建时,使用自定义命令时出现。

我通过清空我的Eclipse项目目录下的bin文件夹,然后清理项目(Eclipse菜单“项目”->“清理...”)来解决了这个问题

很明显,Proguard会在该目录中制造混乱,从而使Eclipse困惑不解...


0

右键单击 src 和 gen 文件夹,选择 Build Path > Remove from Build Path。 然后 右键单击 > Build Path > Use as Source Folder


0
我有时候会遇到这个问题,当我尝试在不兼容的安卓版本上运行代码时(比如某个库需要4.0版本,而我用了2.2版本)。

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