外部JAR上的“到Dalvik格式的转换失败,错误1”


908

在Eclipse中的Android应用程序中,出现以下错误。

异常的
最高级别异常:java.lang.IllegalArgumentException:已添加:Lorg / xmlpull / v1 / XmlPullParser;
....
转换为Dalvik格式失败,错误1

仅当我向项目中添加特定的外部JAR文件时,才会出现此错误。我搜索了很长时间以寻找可能的解决方案,但是所有可能的解决方案都无效。

我什至尝试更改为Android 1.6而不是1.5(我使用的当前版本)。


如果您在工作空间中使用库项目,则该Acticle可以帮助您解决此错误。
Nguyen Minh Binh 2012年

4
我试过了,它给了同样的错误。我终于通过在Properties-> JavaBuildPath-> Projects中添加库并在那里添加库来修复了它。它称为“构建路径上的必需对象:”。

27
这个问题对我来说已经很残酷了。几乎足以放弃Android编码。这些解决方案都不适合我。我只需要连续尝试导出Dalvik错误1失败的失败,最终它将成功。发行版本需要15-30分钟。这是一场彻底的灾难。
安东尼

如果您在一个带有文件共享软件的工作区中使用两台计算机,有时它会将工作区-> project-> bin-> com文件夹复制为com 1,com2。只需删除1或2的所有内容,清理项目就可以了。去。
Ozan Atmar 2014年

Answers:


826

转到项目»属性»Java构建路径»库,并删除除“ Android XY”(在我的情况下为Android 1.5)以外的所有内容。单击确定。转到项目»清洁»清洁下面选择的项目»选择您的项目,然后单击确定。那应该工作。

也有可能在项目文件夹中的某个位置有一个JAR文件(我已将Admob JAR文件复制到我的src文件夹中),然后将其添加为Java路径库。它不会显示在“程序包资源管理器”下,因此您不会注意到它,但是它确实被计数了两次,从而导致了可怕的Dalvik错误1。

另一个可能的原因可能是程序包名称冲突。假设您有一个包com.abc.xyz和一个A.java在该包内命名的类,以及另一个包含相同包的库项目(已添加到该项目的依赖项中)com.abc.xyz.A.java,那么您将得到完全相同的错误。这意味着,您对同一个文件有多个引用,A.java并且无法正确构建它。

在其他方式下,如果您不小心或故意在类路径文件中手动编辑/添加了任何东西,则可能会发生这种情况。在某些情况下,我们可能会在类路径文件中手动添加android.jar路径以生成Java doc。代码可以正常工作。如果仍然有任何代码发生,请检查此代码。


4
我遇到了同样的问题,user408841的上述步骤为我工作。
Arunabh Das

112
你好 它可以通过“项目»清理»清理下面选择的项目»选择您的项目并单击确定来为我解决。忽略第一位
Kurru

79
我对这个解决方案感到困惑。如果删除所有jar文件和库,将如何成功编译项目?
Cheok Yan Cheng

3
我发现,对我而言唯一有效的方法就是清洁所有项目!特别是那些令人讨厌的项目所依赖的项目。
罗伊·欣克利

7
我是来自.NET的Android开发新手,老实说这个错误代表了我的经验。认真地...您打算如何处理该错误消息?这是完全没有意义的。“达尔维克”?你什么??让我回到视觉工作室:p
David Masters

271

我解决了问题。

这是一个JAR文件冲突。

看来我的构建路径上有两个JAR文件,其中包含相同的包和类。

smack.jarandroid_maps_lib-1.0.2

从一个JAR文件中删除此程序包解决了该问题。


18
+1-总而言之,这是一个JAR文件冲突。具体来说,这可能是任何两个JAR文件中的冲突。在我的案例中,冲突发生在jackson-all-1.7.4.jar,jackson-core-asl-1.5.4.jar和jackson-mapper-asl-1.5.4.jar之间。我删除了两个1.5.4 JAR,然后全部保留1.7.4。
jmort253 2011年

如果您在自己的项目中添加的任何库项目中都有jar,例如我将ScoreloopUI项目添加到AndEngine游戏中的方式,那么即使这些jar不在您自己项目的构建路径中,它们也会干扰您的jar。
2011年

1
我已经在.classpath中手动指定了android-sdk / platforms / android-10 / android.jar,然后在项目属性中将其更改为2.3.3(Android 10),这导致两个android.jar发生冲突。删除Java Build Path中的多余内容可以达到目的
styler1972

2
在我这方面,冲突来自ActionbarSherlock,它已经包含git包含两次的android支持程序包。
Tobias'4

仅供参考:就我而言,由于失败,这是两个项目中不同的android目标不同:android:targetSdkVersion =“ xx”
Andreas Mattisson 2014年

126

Windows 7解决方案:

确认问题是由文件
[Android SDK安装目录] \ tools \ proguard \ bin \ proguard.bat中的ProGuard命令行引起的

编辑以下行即可解决问题:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

这对我不起作用,但是从default.properties文件中注释掉proguard行确实使错误消失了。我的问题似乎确实与保卫有关。尝试导出项目时,我只是得到“转换为Dalvik格式失败,出现错误1”。有什么想法吗?
本H

我再次尝试了上述建议,然后删除并重新添加了我的LVL库项目,现在它可以工作了。不知道是什么完全修复了它,但是它可以工作。感谢上帝。我为此浪费了时间。
本H

Windows Vista,这对我有用。我以前曾尝试将SDK的路径更改为progra〜2,重新安装,清理项目,删除库并进行修复等。
Mudar

非常感谢诺亚,这在Windows 7上也对我有用。在我将ADT更新为版本12之后,该错误开始
Kevin Kevin

解决在Windiws 7.我的问题
poiuytrez

94

您可以在导出(未签名)Android应用程序时关闭菜单>“项目”>“自动构建”,从而轻松解决此问题(使用Eclipse Android Developer Tools,内部版本:v22.0.1-685705)。之后,别忘了再次打开它。


2
就我而言,这解决了它。否则,该问题偶尔会发生,并且没有明确的原因(例如,损坏的罐子或路径)
Dirk Conrad Coetsee 2013年

这真让我发疯!唯一对我有用的解决方案。想知道为什么。
PrivusGuru 2014年

1
这为我解决了-其他解决方案也可能有所帮助,但这是最终解决方案,但尚未解决。
pertz 2014年

我花了4个小时来研究所有可以找到的建议,最后才有了这个建议。谢谢-它立即解决了问题。
Squonk 2014年

非常简单的解决方案,但可以!为我节省了与Eclipse毫无意义的战斗的几个小时。在尝试任何更复杂的解决方案之前,请先尝试一下。
fragon 2015年

53

如果你有ADT修订12+,你应该从4.4更新您的ProGuard - > 4.6(描述在这里)。另外,您应将... \ bin \ proguard.bat文件保留为原始格式。

只需从网络下载它,然后将lib文件夹从下载的软件包复制到:

[Android SDK安装目录] \ tools \ proguard \ lib


3
这是我在多个ADT中遇到的问题。下载并替换proguard JAR即可。
S先生

哇,谢谢,这为我解决了这个问题,尽管我也需要清除一些警告。stackoverflow.com/q/4525661/38258
尼克·高奇

我将proguard版本从4.4更改为4.9,之后我的问题仍然没有解决。
Hiren Patel

1
我只需要自己做,从4.7-> 4.11(到现在为止是最新的:sourceforge.net/projects/proguard/files)。我只是重命名了旧<sdk>/tools/proguard目录,然后将完整的解压缩proguard4.11目录移到了旧路径。瞧!现在,只要我能恢复以前的时光... -_-
qix 2014年

1
谢谢!这解决了我的问题。当我从sdk管理器更新sdk且proguard已重置为api级别11随附的原始版本时,引起了我的问题。我将proguard,jar更新为最新版本。而且有效!我的参考:java.dzone.com/articles/my-reminder-how-fix-conversion
mmw5610

41

编辑(新解决方案):

看起来以前的解决方案只是一个绕过。我终于设法永久解决了该问题:就我而言,我的项目中的android-support-v4文件和项目中引用的Facebook项目中的android-support-v4文件都不匹配。

我通过执行Lint Check(Android工具/ Run Lint:检查常见错误)发现了此错误

我以前的解决方案:

我在该网站上尝试了任何可能的解决方案-没有任何帮助!!!

最后,我在这里找到了答案:https : //groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4

简单步骤:

转到项目->取消选中自动构建

转到项目->清理...,同时清理库项目和您的应用程序项目

在仍然禁用自动构建的情况下,将您的应用导出为签名的APK


谢谢你为我工作我cocos2dx JS项目中使用的Eclipse ADT 23
snowflakes74

错误:未知的选项“0409”的参数号1
伊曼Marashi

30

这是另一种方案和解决方案:

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

  1. 在您的应用程序项目中,检查是否有任何指向您的库项目的链接源文件夹(它们的名称形式为“ LibraryName_src”)。
  2. 选择所有这些项目,单击鼠标右键,选择“ Build Path ”->“ Remove from Build Path ”。
  3. 选择“ 还从项目中取消文件夹的链接 ”,然后单击“ ”。
  4. 清理,重建和重新部署项目。

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

编辑:这已由Android Dev Blog条目确认,特别是这一条 -参见第8段。


1
到目前为止,这是对我的特定问题最有帮助的答案。非常感谢!!!
Bill The Ape 2012年

这是我可以成功使用的方法,而不是user408841极力支持的答案。
rics 2012年

29

转到项目,然后取消选中“自动生成”。然后尝试导出项目,错误消失了。


27

如果您已将Android.jar文件添加到构建路径,也可能是由于Eclipse中的意外快速修复而引起的。右键单击项目 -> 构建路径 -> 配置构建路径 -> android.jar,将其删除。


25

每当出现此错误时,简单地清理项目就对我有用。


重新启动Eclipse +清理项目+手动构建对我有用。
dodgy_coder

清理对我有用。...因此,如果您有良好的调试版本,并且已在实际的电话上运行,然后去发布导出并看到此错误,请先尝试清理所有项目。
lepert

16

经过四个小时的测试,我今天找到的我自己的唯一解决方案是这里提供的许多解决方案的组合:

  • Delete Eclipse的项目
  • 在删除文件\bin,并\gen从项目文件夹
  • 将对库的引用删除到.classpath根项目文件夹中的文件中
  • 使用命令行重新启动Eclipse: eclipse -clean
  • Import 项目
  • 项目右键-选择Properties> Java Build Path> Libraries和其他一切删除比Android XX.Y
  • 最后clean项目,等待自动建筑物或Build
  • 启动,现在可以使用了!至少对我来说...

我一次尝试了每一个步骤,并尝试了许多组合,但是只有一次连续完成所有步骤!我希望我不会再面对这个...


匿名用户警告说,这将导致灾难性的后果。请自担风险!
PaulG 2012年

它对我有用,但我没有做:“ eclipse -clean”,也没有删除库。
NicoMinsk 2012年

删除bin文件夹对我有用。
boltup_im_coding

14

仅对于仍然有此问题的其他人,他们已经尝试了上述答案,但仍然收到错误(这是我的情况),那么我的解决方案是从Eclipse中删除项目,然后再次将其重新导入。

这使得Android库再次被添加到我引用的库中,所以现在我引用了两个Android JAR文件,因此我删除了其中一个,现在可以正常编译了。

解决方案:从Eclipse IDE中删除该项目,然后再次将其重新导入,然后检查上述解决方案。


谢谢!这帮助我从头开始。
herbertD

10

今天我自己遇到了这个问题。清洁和重建不能解决问题。删除并重新导入项目也无济于事。

最后,我将其追溯到对.class文件的不良添加。我认为这是由插件工具在我尝试解决另一个问题时添加的,删除它摆脱了“转换为Dalvik格式失败并出现错误1”的构建错误:

<classpathentry kind="lib" path="C:/dev/repository/android-sdk-windows/platforms/android-3/android.jar">
    <attributes>
        <attribute name="javadoc_location" value="file:/C:/dev/repository/android-sdk-windows/docs/reference"/>
    </attributes>
    <accessrules>
        <accessrule kind="nonaccessible" pattern="com/android/internal/**"/>
    </accessrules>


9

对我来说,我的构建路径中出现了一个额外的JAR参考。我删除了它,现在可以使用了。


8

我的问题是由ADT 12.0版和ProGuard集成引起的。此错误已得到详细记录,解决方案在文档中

解决方案在这里

ProGuard命令行


谢谢Croc,我认为该bug的文献记录不充分-搜索一个小时的解决方案后,我没有找到它。
凯文

您可能在写-问题是单个错误消息有太多原因。Google应该有更多消息来帮助用户概述问题。当我遇到问题时花了我两天的时间,您可以放心……
Croc

链接的错误讨论页面上的注释11在这里解决了该问题:将构建输出设置为Verbose(从“窗口”>“首选项”>“ Android”>“构建”),并寻找编译器正在使用但不应存在的JAR或类。删除它们。再次体验构建,没有任何问题。
朱利奥·皮安卡斯特利

8

在项目中使用Sherlock ActionBar库时,我已经解决了这个问题。您可以执行以下步骤,这对我来说很有效。

  1. 右键单击您的项目,选择属性。
  2. 将出现一个对话框,在左侧菜单中选择“ Java构建路径”。
  3. 在右侧面板上删除“ Android依赖项”和“ Android私有库”,然后单击“确定”
  4. 清理项目(选择菜单项目->清理)
  5. 右键单击您的项目,选择“ Android工具”->“修复项目属性”
  6. 再次清理项目。
  7. 重启你的电脑
  8. 打开日食并导出apk

希望对您有所帮助。


他们的错误消息应该更多指定。你节省我的时间。谢谢。
teapeng 2015年

7

就我而言,问题实际上出在OpenFeint API项目上。我已将OpenFeint添加为库项目:

图书馆项目]![1]![在此处输入图片描述

它还被添加到构建路径中,ADT工具16在此场景中给出了错误。

右键单击您的项目,然后单击构建路径,配置构建路径,然后查看图像并从此处删除您的项目OpenFeint,所有步骤均已完成:)

在此处输入图片说明


7

我发现了其他东西。Android将/libs目录用于JAR文件。我无数次看到“向Dalvik格式转换失败,并出现错误1”错误,总是在我的JAR文件中出错的时候出现。

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

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


7

将Proguard更新到最新版本已为我解决了。

  • 我的保镖道路是 C:\Program Files (x86)\Android\android-sdk\tools\proguard\
  • 我从这里下载了新版本
  • 并替换了bin和lib文件夹

感谢上帝!


7

通常,当构建路径中没有不必要的JAR文件时,似乎会出现此问题。

我在处理IntelliJ IDEA时遇到了这个问题。对我来说,发生这种情况是因为我添加了JUnitMockito库,它们是在运行时编译的。需要在模块属性中将其设置为“测试”。


哦,thanx提到“通常,当构建路径中不需要jar时,似乎会出现此问题。” 删除不必要的jar文件后,错误消失了。:)
surendran 2012年

6

以前提出的解决方案都没有对我有用。就我而言,当我从引用库源代码文件夹切换为使用库JAR文件时,便发生了问题。最初,在Android应用程序项目的Properties \ Android page \ Library部分下列出了一个Android库项目,并且该库还在项目浏览器树中进行了比较,作为指向库源目录的链接。

首先,我只是从项目树中删除了目录链接,然后将JAR库添加到了构建路径,但这引起了异常。

正确的过程是(在更改构建路径并将引用放回库源之后):

  • 通过从应用程序项目Properties \ Android页面中实际删除引用来正确删除库源目录链接

  • 照常将库JAR添加到应用程序项目的构建路径。


6

没有列出的解决方案对我有用。

这是我遇到问题的地方:

我将jSoup外部JAR文件添加到项目的路径中,方法是先将其放置在名为“ libs”的源文件夹中,然后右键单击它,“ 构建路径” ->“添加到构建路径”。这引发了Dalvik转换错误。它说我已经“包含”了该JAR文件中的一个类。我环顾了该项目的目录,发现实际上“已包含”该bin目录的位置。我从bin目录中删除了JAR文件,并在Eclipse中刷新了项目,错误消失了!


5

以上所有解决方案均不适用于我。我没有使用任何预编译的.jar。我正在使用LVL和Dalvik错误,这些错误都与市场许可库有关。

通过删除主项目并重新导入(从现有来源创建一个新项目)解决了该问题。


5

我遇到了同样的问题,所有这些解决方案均无效。最终,我在控制台中看到错误是由于重复的类(现有项目中的一个,添加的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。如果是,请尝试删除其中之一。

它为我工作。



5

对于我来说,经常清理项目并不能解决此问题。

但是在Eclipse中关闭项目然后重新打开它似乎可以解决问题。


1
对我来说,关闭Eclipse并重新启动通常可以解决它。然后,我尝试尝试,但是我无法进行第二次导出,因此必须再次重新启动。
Ted

5

我遇到了这个问题,但是我的解决方案是双重的。1.)我必须在project- > properties- > Android下添加一个Android目标版本。2.)我没有所有的Google“第三方插件”。在可用软件包 -> 第三方加载项 -> Google Inc下,在AVD SDK管理器中单击。我下载了所有SDK,就解决了我的问题。


我的解决方案与@THE_DOM的解决方案几乎相同。右键单击该项目,选择“ Android工具”,然后选择“添加兼容性库”。如果您没有这些“第三方加载项”,则会下载这些文件(THE_DOM的解决方案),但也会将它们添加到您的项目中。该解决方案是否只是安慰剂尚待观察。:)
克里斯(Chris)

5

我正在使用Android 1.6,并且有一个外部JAR文件。对我有用的是删除所有库,右键单击项目,然后选择Android工具 -> *修复项目属性(添加回Android 1.6),然后重新添加外部JAR文件。


5

我遇到了这个问题,因为Eclipse中的Android-Maven-plugin显然无法识别可传递引用,以及从多个项目(包括Android库项目)中两次引用的引用,并且多次引用了它们。我不得不使用hocus-pocus来使所有内容仅包含一次,即使Maven应该负责所有这些。

例如,我有一个核心库globalmentor-core,它也由globalmentor-google和globalmentor-android(后者是一个Android库)使用。在globalmentor-android中,pom.xml我必须将依赖项标记为“提供”,并从其他包含可传递性的库中排除:

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-core</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!-- android-maven-plugin can't seem to automatically keep this from being
             included twice; it must therefore be included manually (either explicitly
             or transitively) in dependent projects -->
        <scope>provided</scope>
    </dependency>

然后,在最终应用程序中,pom.xml我不得不使用正确的技巧,仅允许一个包含路径-而不是明确包含核心库:

    <!-- android-maven-plugin can't seem to automatically keep this from being
        included twice -->
    <!-- <dependency> -->
    <!-- <groupId>com.globalmentor</groupId> -->
    <!-- <artifactId>globalmentor-core</artifactId> -->
    <!-- <version>1.0-SNAPSHOT</version> -->
    <!-- </dependency> -->

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-google</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <!-- android-maven-plugin can't seem to automatically keep this from
                being included twice -->
            <exclusion>
                <groupId>com.globalmentor</groupId>
                <artifactId>globalmentor-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-android</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

对我来说,奇怪的是,<extractDuplicates>true</extractDuplicates>在android-maven-plugin中解决了该问题,mvn install但未解决mvn deploy我所描述的错误的地方……真的很奇怪
Karussell

5

就我而言

项目->属性-> Java构建路径->顺序和导出选项卡-> 取消选中 android-support-v4.jar


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.