“Conversion to Dalvik format failed with error 1” on external JAR
在我在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.6而不是1.5(我使用的当前版本)。
去项目?属性? Java构建路径?库和删除除"Android X.Y"之外的所有内容(在我的案例中为Android 1.5)。单击去项目?清洁?清洁下面选择的项目?选择项目,然后单击"确定"。这应该工作。
您可能还有一个位于项目文件夹中某处的JAR文件(我已将Admob JAR文件复制到我的src文件夹中),然后将其添加为Java Path Library。它没有显示在Package Explorer下,所以你没有注意到它,但它确实被计算了两次,导致可怕的Dalvik错误1。
另一个可能的原因可能是包名冲突。假设您在此包中有一个包
在其他方面,如果您不小心或故意在手动编辑/添加类路径文件中的任何内容,可能会发生这种情况。在某些情况下,我们可能会手动将android.jar路径添加到类路径文件中以生成java doc.On在生成javadoc后删除它代码将工作正常。如果仍然出现任何一个,请检查这一点。
我解决了这个问题。
这是一个JAR文件冲突。
似乎我的buildpath上有两个包含相同包和类的JAR文件。
从其中一个JAR文件中删除此包解决了该问题。
Windows 7解决方案:
确认问题是由文件中的ProGuard命令行引起的
[Android SDK安装目录] tools proguard bin proguard.bat
编辑以下行将解决问题:
1 | call %java_exe% -jar"%PROGUARD_HOME%"\lib\proguard.jar %* |
至
1 | call %java_exe% -jar"%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 |
您可以在导出(取消)已签名的Android应用程序时通过关闭菜单>"项目">"自动构建"轻松解决此问题(使用Eclipse Android Developer Tools,Build:v22.0.1-685705)。在那之后,别忘了再打开它。
如果你有ADT修订版12+,你应该从4.4 - > 4.6更新你的程序(如这里所述)。此外,您应该以原始形式保留... bin proguard.bat文件。
只需从Web下载它,并将lib文件夹从下载的包复制到:
[Android SDK安装目录] tools proguard lib
编辑(新解决方案):
看起来以前的解决方案只是一个旁路。我设法永远解决了这个问题:
在我的情况下,我的项目和我的项目中引用的Facebook项目中的android-support-v4文件不匹配。
我通过执行Lint Check(Android工具/运行Lint:检查常见错误)发现此错误
我之前的解决方案
我在这个网站上尝试过任何可能的解决方案 - 没有任何帮助!
最后我在这里找到了答案:
https://groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4
简单步骤:
Go to Project -> uncheck Build Automatically
Go to Project -> Clean... , clean both the library project and your
app projectExport your app as a signed APK while Build Automatically is still
disabled
这是另一个场景和解决方案:
如果在更新ADT for Eclipse后最近遇到此问题:
似乎原因是某些先前版本的ADT将库项目源文件夹链接到"子"项目,并且当前的ADT / Dex组合不再与该解决方案兼容。
编辑:这是由Android Dev Blog条目确认的,特别是这一条 - 请参阅第8段。
转到项目,然后取消选中"自动构建"。然后尝试导出项目,错误消失。
如果您已将
每次出现此错误时,简单地清理项目对我都有用。
我在测试所有解决方案四小时后发现的我自己唯一的解决方案是这里提供的许多解决方案的组合:
-
来自Eclipse的
Delete 项目 -
从项目文件夹中删除
\bin 和\gen 中的文件 -
将对库的引用删除到根项目文件夹中的
.classpath 文件中 -
使用命令行重新启动Eclipse:
eclipse -clean -
Import 项目 -
右键单击项目 - 选择
Properties >Java Build Path >Libraries 并删除Android XX.Y 以外的所有内容 -
最后
clean 项目,等待自动构建或Build 它 - 发布,现在它的工作原理!至少对于我来说...
我一次尝试了每一步和许多组合,但只有所有步骤的连续性一次成功!我希望我不会再面对这个了......
只是对于仍然有这个问题的其他人,他们已经尝试了上述答案,但仍然得到错误(这是我的情况),那么我的解决方案是从Eclipse中删除项目并再次重新导入它。
这使得Android库再次添加到我引用的库中,所以现在我引用了两个Android JAR文件,因此我删除了其中一个,现在它编译得很好。
解决方案:从Eclipse IDE中删除项目,然后再次重新导入,然后检查上述解决方案。
今天我自己陷入了这个问题。清理和重建并没有解决问题。删除和重新导入项目也没有帮助。
我终于追溯到我的.class文件的一个坏的补充。我认为当我试图解决另一个问题时,插件工具添加了这个,删除它摆脱了"转换为Dalvik格式失败,错误1"构建错误:
1 2 3 4 5 6 7 | <classpathentry kind="lib" path="C:/dev/repository/android-sdk-windows/platforms/android-3/android.jar"> </attributes> </accessrules> |
对我来说,我的构建路径中出现了额外的JAR引用。我删除了这个,现在可以了。
我的问题是由ADT版本12.0和ProGuard集成引起的。
此错误已有详细记录,解决方案在文档中
解决方案就在这里
ProGuard命令行
我在项目中使用Sherlock ActionBar库时遇到了这个问题。
您可以执行以下步骤,它对我有用。
希望能帮到你。
将Proguard更新到最新版本为我解决了这个问题。
-
我的proguard路径是
C:\Program Files (x86)\Android\android-sdk\tools\proguard\ - 我从这里下载了新版本
- 并替换了bin和lib文件夹
感谢上帝!
在我的情况下,问题实际上是OpenFeint API项目。我已将OpenFeint添加为库项目:
。
它也被添加到构建路径中,ADT工具16给出了此场景的错误。
右键单击您的项目并单击构建路径,配置构建路径,然后查看图像并从此处删除您的项目OpenFeint并完成所有操作:)
通常,当构建路径中存在不必要的JAR文件时,似乎会出现此问题。
我在使用IntelliJ IDEA时遇到了这个问题。对我来说,这是因为我添加了JUnit和Mockito库,这些库是在运行时编译的。这需要在模块属性中设置为"测试"。
我发现了别的东西。 Android将
现在我通过将新的JAR文件放在
当我从
以前提出的解决方案都不适合我。就我而言,当我从引用库源代码文件夹切换到使用库JAR文件时,问题就出现了。
最初在Android应用程序项目Properties Android page Library部分下面列出了一个Android库项目,并且该库也在项目资源管理器树中作为库源目录的链接进行了比较。
首先,我刚从项目树中删除了目录链接,并将JAR库添加到构建路径,但这导致了异常。
正确的过程是(在更改构建路径并将引用放回库源之后):
-
通过从应用程序项目Properties Android页面中删除引用来正确删除库源目录链接
-
像往常一样将库JAR添加到应用程序项目构建路径。
列出的解决方案都不适合我。
这是我遇到问题的地方:
我将jSoup外部JAR文件添加到我的项目路径中,首先将其放在名为"libs"的源文件夹中,然后右键单击它,构建路径 - >添加到构建路径。这引发了Dalvik转换错误。它说我已经"已经包含"了该JAR文件中的一个类。我环顾了项目的目录,发现"已经包含"的地方实际上是
只需清理项目
如果这不起作用,请尝试其他解决方案
以上所有解决方案对我都不起作用。我没有使用任何预编译的.jar。我正在使用LVL和Dalvik错误,这些都与市场许可库有关。
通过删除主项目并重新导入(从现有源创建新项目)解决了该问题。
我有同样的问题,这些解决方案都没有奏效。
最后,我在控制台中看到错误是由于重复的类(现有项目中的一个,添加的jar文件中的一个):
1 2 3 | 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中关闭项目然后重新打开它似乎确实在那些情况下修复它...
我遇到了这个问题,但我的解决方案是双重的。
1.)我必须在项目 - > properties - > Android下添加一个Android目标版本。
2.)我没有谷歌的所有"第三方附加组件"。单击可用包下的AVD SDK管理器 - >第三方附加组件 - > Google Inc.我下载了所有SDK并解决了我的问题。
我遇到了这个问题,因为Eclipse中的Android-Maven-plugin显然没有识别来自几个项目(包括一个Android库项目)引用两次的传递引用和引用,并且不止一次地包含它们。我不得不使用hocus-pocus将所有内容都包含在内,即使Maven应该照顾这一切。
例如,我有一个核心库globalmentor-core,它也被globalmentor-google和globalmentor-android(后者是Android库)使用。在globalmentor-android
1 2 3 4 5 6 7 8 9 | <dependency> <groupId>com.globalmentor</groupId> 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> |
然后在最终的应用程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <!-- android-maven-plugin can't seem to automatically keep this from being included twice --> <!-- <dependency> --> <!-- <groupId>com.globalmentor</groupId> --> <!-- globalmentor-core</artifactId> --> <!-- <version>1.0-SNAPSHOT</version> --> <!-- </dependency> --> <dependency> <groupId>com.globalmentor</groupId> 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> globalmentor-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.globalmentor</groupId> globalmentor-android</artifactId> <version>1.0-SNAPSHOT</version> </dependency> |
我使用的是Android 1.6并且有一个外部JAR文件。对我有用的是删除所有库,右键单击项目并选择Android工具 - > *修复项目属性(添加回Android 1.6),然后添加回外部JAR文件。
就我而言
project-> properties-> java build path - > in order and export tab - > uncheck android-support-v4.jar
在我的案例中,这里的答案都没有帮助。
对我来说问题是
我不得不用文本编辑器打开.classpath并手动删除projects元素。这解决了这个问题。
我知道它已经回答了,但这是我的解决方案:
我的Android项目来自Subversion存储库,我刚刚将Checkout作为一个新项目。我不得不手动将我的库(Android和Java)添加到构建路径,否则它不会让我编译。然后我会得到上述错误。
我不得不制作一个新的Android项目,然后手动复制更改。
这个答案基本上是很多人试图说的,但很多人可能都不理解。所以...
"Another reason can be if you have a JAR file located somewhere in
your project folder and then added it as a Java Path Library. It does
not show up under the Package Explorer, so you don't notice it, but it
does get counted twice, causing the dreaded Dalvik error." answered
Jan 2 '12 at 6:23 Rashmi.B
含义:
如果你的lib文件夹中有这两个库(.jar):
然后这两个文件夹也会添加到您的构建路径中:
意味着他们被计算两次,从而给你错误!
解:
在我的情况下,我添加了一个扩展jar。所以我将外部jar位置移动到Project Prop中的android引用顶部---> Java buildPath --->项目引用
我的问题在于整合Ant + ProGuard + AdMob SDK库+调试模式。我正在使用Ant构建调试APK并将AdMob SDK JAR添加到
[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)
我还在我的
1 2 3 | <target name="-debug-obfuscation-check"> <property name="proguard.enabled" value="true"/> </target> |
那就是问题所在。不知何故,ProGuard和AdMob SDK不能在调试模式下共存。 ProGuard没有对
所以我的解决方案就是在
我希望它对某人有所帮助。
对我来说问题是我设置了错误的编译器合规级别(1.8而不是1.7)。
这个答案解决了它:
In the Project SDK section, when you add an Android SDK you should
provide the Java SDK and all my Android SDKs uses Java 8 as SDK so it
create the class files with the wrong version even if the Project
level is 1.7 (i don't know why, i supposed that everything was choosed
by Project level). Now i changed the SDK (the java version"1.x.0"
part.)
对我有用的是以下内容:
- 彻底清洁构建
-
删除了我在
Project/Properties/Libraries 中找到的无关的android.jar 文件。
我使用的是ADT r14,当我尝试添加任何库项目时,我收到了这个错误。对我来说,有效的只是将ADT更新到最新版本。它立即解决了这个问题。我尝试了几乎所有在stackoverflow上给出的解决方法,但没有其他任何真正适用于我。
我个人设法通过手动编辑Eclipse项目中的
这是啥:
1 2 3 | target=android-16 android.library.reference.1=..\\..\\github\\ActionBarSherlock\\library android.library.reference.2=../../github/android-numberpicker/library |
我把它改成了所以问题消失了:
1 2 3 | target=android-16 android.library.reference.1=../../github/ActionBarSherlock/library android.library.reference.2=../../github/android-numberpicker/library |
使用"修复项目属性"工具不会自动修复此文件。
我在类路径中包含protobuf lite(Protocol Buffers by Google)的项目时遇到了完全相同的错误。我想原因是我的类路径中的
我也遇到了这个问题,当我添加相同的jar文件与不同的版本,我只是删除旧版本jar一个干净的项目,它适合我。
我正在使用ADT 7,其他修复程序不起作用(但我仍然使用它们)。
然后我从另一个项目中复制
这个错误是由于
解:
在我的情况下,问题是在2011年3月更新Eclipse和ADT之后产生的。在我的项目中,我使用的JAR产生了重建问题,而且以前的解决方案都没有。我花了几天时间尝试所有,搜索并向下搜索没有令人满意的解决方案。显然有一个.jar文件的双重引用。
最后我 :
它最终编译完成。
在我的情况下,从USB上拔下我的手机只需要修复此错误。
从ADT 17 / Tools r17预览版开始,该错误应该最终修复!至少它的一些实例,如果不是全部的话。
只是
对于NewRelic用户:
如果您已在应用程序中集成了newrelic jar,则当newrelic版本超出日期时会发生这种情况。
解:
- 将newrelic jar更新到最新版本。在eclipse上,它只需右键单击该项目并更新newrelic。或者您可以直接下载新版本。
当我尝试导出我的项目时,我遇到了同样的问题。在控制台中看不到任何东西。
对我来说,解决方案是将proguard升级到最新版本,希望有人帮忙。
在eclipse运行了很长时间之后或者在我成功构建了一个已签名的apk之后,这通常发生在我身上。
至于我对此的经验,修复它我只是重启eclipse。
我有同样的错误,并尝试了以上所有,但没有任何帮助我。
我的项目附加到GIT源代码控制系统,我意识到在导出到Andorid应用程序时有一些GIT相关的任务。然后我将所有更改提交到GIT存储库并且错误消失。
因此,如果您使用GIT进行源代码控制并且上面没有任何帮助,请尝试将所有更改提交到GIT存储库(并最终推送到上游)并再次尝试导出。
我完成了这个答案的步骤,仍然没有得到解决方案。我一直在网上搜索,发现如果你在Android设备连接到计算机时尝试导出APK,则会出现此错误。
断开我的设备,然后关闭项目,重新启动计算机,打开项目并清理它,这三次都适用于我。
我有同样的问题。当我检查时,我看到有2个具有相同名称的类,每个我添加的外部jar文件中有1个。我不得不删除1个jar文件。幸运的是,我已经删除了另一个jar文件。
我尝试了每一件事,但没有任何效果。
有趣的是,如果我们使用proguard导出android应用程序,我们得到"转换为dalvik格式失败,错误1"错误但如果我们在导出时不使用proguard则成功创建了APK。
最后我们的android项目中的一个jar有一个大小超过1.5 MB的
- 从java Build路径中删除所有库。然后再添加一次。
- 清理您的项目。
运行。
由于我从已删除的构建路径中排除了多个文件,但未从排除列表中删除,因此导致此错误。
项目 - > Properites - > Java Build Path - > Source选项卡 - > project / src文件夹 - >双击Excluded - >删除项目中不再存在的所有文件。
这里没有什么对我有用,我不得不改变我的proguard文件来添加这一行:
1 | -keep class !mycode.** { *; } |
保留任何代码不是我的包。
我刚刚安装了最新的eclipse和最新的API以及最新的SDK和工具,但多年以后,这个错误并没有变旧。我浪费了一天才弄明白。尝试了一切。徒然。因为这个消息非常通用,并且会引发许多不同的问题。因此,某些人指出的解决方案对其他人不起作用。
一个好的第一种方法是转到Window> Preferences> Android> Build和UNCHECK'Skip packaging and dexing ...'。通过这种方式,您可以在构建时获得更多有关特定错误的线索,而不仅仅是导出。
就我而言,我得到了一个"Dx不支持的类文件版本......"。这个错误我没有看到这里报道。好吧,基于此我发现我使用的一些旧罐子用1.6编译,其他用1.7编译。所以我将默认的IDE编译器合规性级别更改为1.6("窗口">"首选项">"Java">"编译器"),在完成每个依赖项的清理和重建之后,我终于可以生成我的APK。
在大多数情况下,这个问题是由一个错误或损坏的Proguard版本引起的,由于一些奇怪的原因,通常会从官方Android SDK管理器安装
不要编辑Proguard bat文件以避免进一步的问题,如果你遇到这个问题,从官方网站下载最新稳定版的Proguard并替换所有的proguard文件
1 | android-sdk\tools\proguard |
使用从下载的存档中提取的最新proguard文件。
没有意义删除所有外部库依赖项,如果开发人员将库添加到他的项目中,则很可能需要库。
我清理了我的主App项目和它使用的Android库项目。解决了这个问题
如果您在自己的应用中使用了Leadbolt广告SDK,并且要将"通知广告"和"展示广告"结合使用,则需要使用pubxappCom.jar而不是pubxapp.jar作为通知广告,否则会出现此错误!
快乐的编码!
最好将所有* .jar文件包含在项目文件夹树的"lib"目录中。通过这种方式,您无需通过转到项目的属性来定义构建路径。"lib"已经是一个构建路径
这些答案都不适合我。我的问题是由JUnit和hamcrest引起的。另请参见java.lang.IllegalArgumentException:已添加:Lorg / hamcrest / BaseDescription;转换为Dalvik格式失败,错误1
嗨以前我有
但是我将我的系统更新为
但我的项目有
1 | Conversion to Dalvik format failed with error 1 while parsing org/apache/xerces/impl/xpath/regex/ParserForXMLSchema.class |
所以我仔细阅读了这个问题所提到的所有答案但却无法解决。我想了4天然后我发现这个链接挽救了我的生命,在看完之后我才知道问题是由于
所以我把它降级为Android SDK Build工具到18.1.1。我摆脱了这个问题。
我在这里发布我的答案,以便如果有人会遇到这个问题,他们可以解决它。
这让我感到沮丧。希望能帮助别人。
另一个安卓巫术案例,
如果没有其他工作,请尝试
在清单中将versionCode和versionName增加1。
它对我有用。
我有Eclipse neon和JDK 1.8的这个问题。更改为JDK 1.7后,问题得以解决。
我以不同的方式找到了解决方案......
https://stackoverflow.com/a/14948244/1014288
多亏了这个你可以修复没有删除和东西
什么都没有帮助我,但这里建议的解决方案就像一个魅力:
即将行
依赖项上的Google API会导致此问题。删除后效果很好。
这里的答案都没有对我有用。
但是,我可以通过从除主应用程序之外的所有附加库中删除Android类路径容器(在我的情况下为Android 4.4)来修复错误,然后导出APK。
库项目将不再编译,但jar文件仍然存在,并且APK正在部署。我不确定这种行为的原因是什么。
如果您想解决此问题,则必须将Android SDK1.6更改为Android 2.2。之后,清理项目,然后构建并运行。然后您将看到您的应用程序正在运行。