外部JAR上的“转换为Dalvik格式失败,出现错误1”
在我的Eclipse中的Android应用程序,我得到以下错误。
意外的顶级例外:
java.lang.IllegalArgumentException:已经添加:Lorg / xmlpull / v1 / XmlPullParser;
….
转换为Dalvik格式失败,错误1
只有在向我的项目中添加特定的外部JAR文件时才会出现此错误。 我花了很长时间寻找可能的解决scheme,但没有任何可能的解决scheme工作。 我甚至试图改变到Android 1.6而不是1.5(我使用的当前版本)。
转到项目»属性»Java构buildpath»库,并删除所有除了“Android XY”(在我的情况下Android 1.5)。 单击确定。 转到项目»清理»清理下面select的项目»select您的项目,然后单击确定。 这应该工作。
还有可能你的项目文件夹中有一个JAR文件(我已经将Admob JAR文件复制到了我的src文件夹中),然后将它添加为Javapath库。 它不会显示在包资源pipe理器下,所以你不会注意到它,但它会被计算两次,导致可怕的Dalvik错误1。
另一个可能的原因可能是包名冲突。 假设在这个包里有一个包com.abc.xyz
和一个名为A.java
的类,而另一个包含相同的com.abc.xyz.A.java
库项目(添加到这个项目的依赖项)那么你会得到完全相同的错误。 这意味着,您有多个对同一文件A.java
引用,并且无法正确构build它。
在其他方面,这可能会发生,如果你不小心或故意手动编辑/添加类path文件中的任何东西。在某些情况下,我们可能会手动添加android.jarpath到类path文件生成java doc.On删除后生成的javadoc代码将正常工作。请检查这一点,如果任何一个仍然发生。
我解决了这个问题。
这是一个JAR文件冲突。
看来我的构buildpath上有两个JAR文件,包含相同的包和类。
smack.jar
和android_maps_lib-1.0.2
从其中一个JAR文件中删除这个软件包解决了这个问题。
Windows 7解决scheme:
确认问题是由文件中的ProGuard命令行引起的
[Android SDK安装目录] \ tools \ proguard \ bin \ proguard.bat
编辑下面的行将解决问题:
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
您可以通过closures菜单>“项目”>“自动构build”,同时导出(未)签名的Android应用程序来解决此问题(使用Eclipse Android开发人员工具,构build版本:v22.0.1-685705)。 之后,别忘了再打开它。
如果您有ADT修订版12+,则应该从4.4 – > 4.6更新您的proguard(如此处所述)。 另外,您应该以原始格式保留… \ bin \ proguard.bat文件。
只需从网上下载,并将lib文件夹从下载的软件包复制到:
[Android SDK安装目录] \ tools \ proguard \ lib
编辑(新解决scheme):
看起来以前的解决scheme只是一个旁路。 我终于永久解决了这个问题:在我的情况下,我的项目和我的项目中引用的Facebook项目中的android-support-v4文件不匹配。
我通过执行Lint检查(Android工具/运行Lint:检查常见错误)发现此错误
我之前的解决scheme
我试过任何可能的解决scheme,在这个网站上 – 没有任何帮助
最后我在这里find了答案: https : //groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4
简单的步骤:
转到项目 – >取消选中自动生成
转到项目 – >清理…,清理库项目和你的应用程序项目
“自动构build”仍处于禁用状态时,将您的应用导出为已签名的APK
这是另外一个场景和解决scheme:
如果在更新ADT for Eclipse之后最近遇到这个问题:
- 在您的应用程序项目中,检查指向您的库项目的任何链接的源文件夹(它们的名称格式为“LibraryName_src”)。
- select所有这些项目,右键单击,select“ 构buildpath ” – >“ 从构buildpath中删除 ”。
- select“ 也从项目中取消链接文件夹 ”,然后点击“ 是 ”。
- 清理,重build和重新部署项目。
看来原因是ADT的一些以前的版本将Library项目源文件夹链接到“子”项目,而当前的ADT / Dex组合与该解决scheme不再兼容。
编辑:这是由一个Android开发人员博客条目,特别是这一个 – 见第8段起。
转到项目,然后取消选中“自动构build”。然后尝试导出项目,错误消失。
如果您已经将Android.jar
文件添加到您的构buildpath中,也可能是由于Eclipse中意外的快速修复造成的。 右键点击Project – > build path – > configure build path – > android.jar ,删除。
每次出现这个错误时,简单地清理这个项目对我来说都是有效的。
我经过四个小时testing所有解决scheme之后,今天发现了我自己的解决scheme,这里提供了许多解决scheme的组合:
- 从Eclipse中
Delete
项目 - 从项目文件夹中删除
\bin
和\gen
文件 - 删除对根项目文件夹中的
.classpath
文件库的引用 - 用命令行重新启动Eclipse:
eclipse -clean
-
Import
项目 - 右键单击项目 – select“
Properties
>“Java Build Path
>“Libraries
然后移除除Android XX.Y
之外的所有内容 - 最后
clean
项目,等待自动build立或Build
它 - 启动,现在它的作品! 至less对于我来说…
我一次又一次的尝试了每一步,并且有很多组合,但是只有一步一步的完成了! 我希望我不会再面对这个…
对于仍然有这个问题的其他人,他们已经尝试了上面的答案,但仍然得到错误(这是我的情况),那么我的解决scheme是从Eclipse中删除项目,并重新导入它。
这使得Android库再次被添加到我引用的库中,所以现在我有两个Android JAR文件被引用,所以我删除了其中的一个,现在编译好了。
解决scheme:从Eclipse IDE中删除项目,然后再次重新导入,然后检查上述解决scheme。
今天我自己就遇到了这个问题。 清理和重build没有解决问题。 删除和重新导入项目也没有帮助。
我终于追溯到我的.class文件的一个不好的补充。 我想这是插件工具,当我试图解决另一个问题时,添加删除它摆脱了“转换为Dalvik格式失败,错误1”构build错误:
<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>
对我而言,我的构buildpath中出现了额外的JAR参考。 我删除了这个,现在它工作。
我的问题是由ADT 12.0版和ProGuard集成引起的。 这个错误是有据可查的,解决scheme在文档中
解决scheme在这里
ProGuard命令行
在我的项目中使用Sherlock ActionBar库时,我已经处理了这个问题。 你可以做下面的步骤,这对我来说是有用的。
- 右键单击您的项目,select属性。
- 将出现一个对话框,在左侧菜单中select“Java构buildpath”。
- 在右侧面板上删除“Android依赖项”和“Android私有库”,然后点击“确定”
- 清理你的项目(select菜单项目 – >清理)
- 右键单击您的项目,selectAndroid工具 – >修复项目属性
- 再次清理项目。
- 重启你的电脑
- 打开日食和导出apk
希望能帮到你。
在我的情况下,问题实际上是OpenFeint API项目。 我已经添加OpenFeint作为库项目:
。
它也被添加到构buildpath中,ADT工具16给这个场景提供了错误。
右键单击您的项目,然后单击构buildpath,configuration构buildpath,然后看到图像,并从这里删除您的项目OpenFeint所有完成:)
我发现了别的东西。 Android使用/libs
目录作为JAR文件。 我曾多次看到“转换为Dalvik格式失败,出现错误1”错误,总是当我在我的JAR文件中犯了一个错误。
现在,我通过将新的JAR文件放在/libs
目录并将类path切换到新版本,将Roboguice升级到更新的版本。 这导致了Dalvik错误。
当我从/libs
文件夹中删除一个Roboguice JAR文件时,错误消失了。 显然,Android会从/libs
获取所有JAR文件,无论您在Java构buildpath中指定了哪些文件。 我不记得确切的,但我认为Android开始使用Android 4.0 (冰淇淋三明治,ICS)默认情况下使用/libs
。
更新Proguard到最新版本为我解决了它。
- 我的proguardpath是
C:\Program Files (x86)\Android\android-sdk\tools\proguard\
- 我从这里下载了新版本
- 并replacebin和lib文件夹
感谢上帝!
一般来说,当构buildpath中存在不必要的JAR文件时,似乎会出现此问题。
在IntelliJ IDEA上工作时遇到了这个问题。 对我来说,这是因为我添加了在运行时正在编译的JUnit和Mockito库。 这需要在模块属性中设置为“testing”。
以前没有提出的解决scheme为我工作。 就我而言,当我从引用库源代码文件夹切换到使用库JAR文件时,发生了问题。 最初在Android应用程序项目Properties \ Android page \ Library部分下面列出了一个Android库项目,并且在项目资源pipe理器树中也将该库作为链接指向库源目录。
首先,我刚从项目树中删除目录链接,并将JAR库添加到构buildpath,但是这导致了exception。
正确的过程是(在改回构buildpath并将引用放回库源之后):
-
通过实际删除应用程序项目Properties \ Android页面中的引用,正确删除库源代码目录链接
-
像往常一样将库JAR添加到应用程序项目构buildpath。
列出的解决scheme都没有为我工作。
这是我遇到问题的地方:
我将jSoup外部JAR文件添加到我的项目path中,首先将它放在名为“libs”的源文件夹中,然后右键单击它, Build Path – > add to build path。 这抛出了Dalvik转换错误。 它说我已经从那个JAR文件中“包含”了一个类。 我环视了一下这个项目的目录,发现“已经包含”的地方其实就是bin
目录。 我从bin
目录中删除了JAR文件,并在Eclipse中刷新了这个项目,错误消失了!
以上所有的解决scheme都不适合我。 我没有使用任何预编译的.jar。 我正在使用LVL和Dalvik错误,这些错误都与市场许可证库有关。
通过删除主项目并重新导入(从现有源创build新项目),问题得到解决。
我有同样的问题,没有这些解决scheme的工作。 最后,我在控制台看到错误是由于重复的类(一个在现有项目中,一个在添加的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。 如果是,请尝试删除其中的一个。
它为我工作。
通常对我来说,清理项目不能解决这个问题。
但在Eclipse中closures项目,然后重新打开它似乎解决了这种情况…
我遇到了这个问题,但我的解决scheme是双重的。 1)我不得不在项目 – > 属性 – > Android下添加一个Android目标版本。 2.)我没有所有谷歌的第三方附加组件。 点击AVD SDKpipe理器下的可用软件包 – > 第三方附件 – > Google Inc。 我下载了所有的SDK,解决了我的问题。
我正在使用Android 1.6,并有一个外部的JAR文件。 什么对我来说是删除所有库,右键单击项目,然后selectAndroid工具 – > *修复项目属性(其中添加了Android 1.6),然后添加外部JAR文件。
我遇到了这个问题,因为Eclipse中的Android-Maven插件显然不能识别两个项目(包括Android库项目)中引用的传递引用和引用,并且不止一次地包含它们。 尽pipeMaven应该处理所有这些事情,但我必须使用hocus-pocus才能使所有内容都包含在内。
例如,我有一个核心库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
我不得不使用正确的技巧来仅允许一个包含path—以及不明确包含核心库:
<!-- 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>
在我的情况
project-> properties-> java build path – >按顺序导出tab – > 取消选中 android-support-v4.jar
只要清理项目
如果这不起作用,请尝试其他解决scheme