在 Eclipse 中的 Android 应用程序中,我收到以下错误。
意外的顶级异常:
java.lang.IllegalArgumentException:已添加:Lorg/xmlpull/v1/XmlPullParser;
....
转换为 Dalvik 格式失败,错误 1
仅当我将特定的外部 JAR 文件添加到我的项目时才会出现此错误。我为可能的解决方案搜索了很长时间,但没有一个可能的解决方案有效。
我什至尝试更改为 Android 1.6 而不是 1.5(我使用的当前版本)。
在 Eclipse 中的 Android 应用程序中,我收到以下错误。
意外的顶级异常:
java.lang.IllegalArgumentException:已添加:Lorg/xmlpull/v1/XmlPullParser;
....
转换为 Dalvik 格式失败,错误 1
仅当我将特定的外部 JAR 文件添加到我的项目时才会出现此错误。我为可能的解决方案搜索了很长时间,但没有一个可能的解决方案有效。
我什至尝试更改为 Android 1.6 而不是 1.5(我使用的当前版本)。
转到项目»属性»Java构建路径»库并删除除“Android XY”之外的所有内容(在我的情况下为Android 1.5)。单击确定。转到项目»清理»清理下面选择的项目»选择您的项目并单击确定。那应该行得通。
您也可能在项目文件夹中的某个位置有一个 JAR 文件(我已将 Admob JAR 文件复制到我的 src 文件夹中),然后将其添加为 Java 路径库。它没有出现在 Package Explorer 下,所以你不会注意到它,但它确实被计算了两次,导致了可怕的 Dalvik 错误 1。
另一个可能的原因可能是包名冲突。假设您有一个包com.abc.xyz
和一个在此包中命名的类A.java
,以及另一个包含相同的库项目(已添加到此项目的依赖项)com.abc.xyz.A.java
,那么您将得到完全相同的错误。这意味着,您对同一个文件有多个引用,A.java
并且无法正确构建它。
在其他方面,如果您不小心或故意在类路径文件中手动编辑/添加任何内容,则可能会发生这种情况。在某些情况下,我们可能会手动将 android.jar 路径添加到类路径文件以生成 java doc。在 javadoc 生成后删除代码可以正常工作。如果仍然出现任何问题,请也检查一下。
我解决了这个问题。
这是一个 JAR 文件冲突。
似乎我的构建路径上有两个 JAR 文件,它们包含相同的包和类。
smack.jar
和android_maps_lib-1.0.2
从其中一个 JAR 文件中删除这个包解决了这个问题。
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
您可以通过在导出(未)签名的 Android 应用程序时关闭菜单>“项目”>“自动构建”轻松解决此问题(使用 Eclipse Android 开发人员工具,构建:v22.0.1-685705)。之后,不要忘记再次打开它。
如果您有 ADT 修订版 12+,您应该从 4.4 -> 4.6 更新您的 proguard(如此处所述)。此外,您应该将 ...\bin\proguard.bat 文件保留为原始形式。
只需从网上下载它,然后将下载包中的 lib 文件夹复制到:
【Android SDK安装目录】\tools\proguard\lib
编辑(新解决方案):
看起来以前的解决方案只是一个旁路。我终于设法永久解决了这个问题:在我的情况下,我的项目和我的项目中引用的 Facebook 项目中的 android-support-v4 文件不匹配。
我通过执行 Lint 检查发现了这个错误(Android 工具 / 运行 Lint:检查常见错误)
我之前的解决方案:
我在这个网站上尝试了任何可能的解决方案 - 没有任何帮助!!!
最后我在这里找到了答案: https ://groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4
简单的步骤:
转到项目 - >取消选中自动构建
转到 Project -> Clean... ,清理库项目和您的应用程序项目
将您的应用导出为已签名的 APK,而自动构建仍处于禁用状态
这是另一种情况和解决方案:
如果您最近在更新 ADT for Eclipse 后遇到此问题:
原因似乎是某些以前版本的 ADT 将库项目源文件夹链接到“子”项目,而当前的 ADT/Dex 组合不再与该解决方案兼容。
编辑:Android 开发博客条目证实了这一点,特别是这一点- 请参阅第 8 段起。
转到项目,然后取消选中“自动构建”。然后尝试导出项目,错误就消失了。
如果您Android.jar
在构建路径中添加了文件,也可能是由于 Eclipse 中的意外快速修复造成的。右键单击Project -> build path -> configure build path -> android.jar删除它,删除。
每次出现此错误时,简单地清理项目都对我有用。
在测试所有解决方案四个小时后,我今天找到了我自己的唯一解决方案,它是此处提供的许多解决方案的组合:
Delete
来自 Eclipse 的项目\bin
中删除文件\gen
.classpath
根项目文件夹中的文件中eclipse -clean
Import
项目Properties
> Java Build Path
>Libraries
并删除除Android XX.Y
clean
project,等待自动Building或者Build
它我一次尝试了每一步和许多组合,但只有所有步骤的连续性一次成功!我希望我不会再遇到这种情况了...
只是对于仍然有这个问题并且他们已经尝试了上述答案但仍然得到错误(这是我的情况)的其他人,那么我的解决方案是从 Eclipse 中删除该项目并再次重新导入它。
这使得 Android 库再次添加到我引用的库中,所以现在我引用了两个 Android JAR 文件,因此我删除了其中一个,现在它可以正常编译了。
解决方法:从Eclipse IDE中删除项目,然后重新导入,然后检查上述解决方案。
今天自己遇到了这个问题。清理和重建并没有解决问题。删除和重新导入项目也无济于事。
我终于将其追溯到我的 .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>
对我来说,我的构建路径中出现了一个额外的 JAR 引用。我删除了这个,它现在可以工作了。
在我的项目中使用 Sherlock ActionBar 库时,我已经处理了这个问题。您可以执行以下步骤,这对我有用。
希望对您有所帮助。
将 Proguard 更新到最新版本为我解决了这个问题。
C:\Program Files (x86)\Android\android-sdk\tools\proguard\
感谢上帝!
就我而言,问题实际上出在 OpenFeint API 项目上。我已将 OpenFeint 添加为库项目:
.
它也被添加到构建路径中,ADT 工具 16 给出了这个场景的错误。
右键单击您的项目并单击构建路径,配置构建路径,然后查看图像并从此处删除您的项目 OpenFeint,一切都完成了:)
我发现了别的东西。Android 使用/libs
JAR 文件的目录。我多次看到“Conversion to Dalvik format failed with error 1”错误,总是当我在 JAR 文件中出错时。
现在我将 Roboguice 升级到更新版本,将新的 JAR 文件放在/libs
目录中并将类路径切换到新版本。这导致了 Dalvik 错误。
当我从/libs
文件夹中删除其中一个 Roboguice JAR 文件时,错误消失了。显然,/libs
无论您在 Java 构建路径中指定了哪些 JAR 文件,Android 都会从中获取所有 JAR 文件。我不记得了,但我认为 Android/libs
默认从Android 4.0(Ice Cream Sandwich,ICS)开始使用。
通常,当构建路径中有不必要的 JAR 文件时,似乎会出现此问题。
我在处理IntelliJ IDEA时遇到了这个问题。对我来说,这是因为我添加了在运行时编译的JUnit和Mockito库。这需要在模块属性中设置为“测试”。
以前提出的解决方案都不适合我。就我而言,问题发生在我从引用库源代码文件夹切换到使用库 JAR 文件时。最初在 Android 应用程序项目 Properties\Android page\Library 部分下列出了一个 Android 库项目,并且该库还在项目资源管理器树中作为库源目录的链接进行了比较。
首先,我只是从项目树中删除了目录链接,并将 JAR 库添加到构建路径中,但这导致了异常。
正确的程序是(在改回构建路径并放回对库源的引用之后):
通过实际从应用程序项目 Properties\ Android 页面中删除引用来正确删除库源目录链接
像往常一样将库 JAR 添加到应用程序项目构建路径。
列出的解决方案都不适合我。
这是我遇到问题的地方:
我将 jSoup 外部 JAR 文件添加到我的项目路径中,首先将其放在名为“libs”的源文件夹中,然后右键单击它,构建路径- > 添加到构建路径。这引发了 Dalvik 转换错误。它说我已经从那个 JAR 文件中“包含”了一个类。我查看了项目的目录,发现它“已经包含”的地方实际上就是bin
目录。我从目录中删除了 JAR 文件bin
并在 Eclipse 中刷新了项目,错误就消失了!
上面的所有解决方案都对我不起作用。我没有使用任何预编译的 .jar。我正在使用与市场许可库相关的 LVL 和 Dalvik 错误。
通过删除主项目并重新导入(从现有源创建一个新项目),问题得到了解决。
我有同样的问题,这些解决方案都没有奏效。最后,我在控制台中看到错误是由于重复的类(一个在现有项目中,一个在添加的 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 中关闭项目然后重新打开它似乎在这些情况下可以修复它......
我遇到了这个问题,但我的解决方案是双重的。1.) 我必须在project -> properties -> Android下添加一个 Android 目标版本。2.) 我没有所有的谷歌“第三方插件”。单击可用软件包下的 AVD SDK 管理器->第三方附加组件-> Google Inc。我下载了所有的 SDK,这解决了我的问题。
我使用的是 Android 1.6 并且有一个外部 JAR 文件。对我有用的是删除所有库,右键单击项目并选择Android Tools -> *Fix Project Properties(添加回 Android 1.6),然后添加回外部 JAR 文件。
我遇到了这个问题,因为 Eclipse 中的 Android-Maven-plugin 显然无法识别传递引用和从几个项目(包括一个 Android 库项目)中引用两次的引用,并且不止一次地包括它们。我不得不使用 hocus-pocus 只包含一次所有内容,即使 Maven 应该负责所有这些。
例如,我有一个核心库 globalmentor-core,它也被 globalmentor-google 和 globalmentor-android(后者是一个 Android 库)使用。在 globalmentor-androidpom.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>
就我而言
项目->属性->java构建路径->按顺序导出选项卡->取消选中android-support-v4.jar
只需清理项目
如果这不起作用,请尝试其他解决方案
这个答案基本上是很多人想说的,但可能很多人不明白。所以...
“另一个原因可能是,如果您在项目文件夹中的某个位置有一个 JAR 文件,然后将其添加为 Java 路径库。它不会显示在 Package Explorer 下,因此您不会注意到它,但它确实被计算在内两次,导致可怕的 Dalvik 错误。” 2012 年 1 月 2 日 6:23 Rashmi.B 回答
意义:
例如,如果您的lib文件夹中有这两个库 (.jar):
然后这两个文件夹也被添加到您的构建路径中:
意味着它们被计算两次,从而给你错误!
解决方案:
在我的情况下,我添加了一个外部 jar。所以我将外部 jar 位置移动到项目 Prop 中的 android 引用的顶部--->Java buildPath--->项目引用
我知道它已经回答了,但这是我的解决方案:
我的 Android 项目来自一个Subversion存储库,我刚刚将 Checkout 作为一个新项目。我必须手动将我的库(Android 和 Java)添加到构建路径,否则它不会让我编译。然后我会得到上述错误。
我必须创建一个新的 Android 项目,然后手动复制更改。
我的问题在于Ant + ProGuard + AdMob SDK 库 + 调试模式的集成。我正在使用 Ant 构建调试 APK 并将 AdMob SDK JAR 添加到libs/
目录。Eclipse 可以正常生成调试 APK,但 Ant 不能。我收到以下错误。
[应用] 意外的顶级异常:[应用] java.lang.IllegalArgumentException:已添加:Lcom/google/ads/AdActivity;[应用] 在 com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
我还在我的调试版本中打开了 ProGuard build.xml
(默认为关闭):
<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,因此运行良好。
所以我的解决方案只是关闭 ProGuard 以在build.xml
. 我希望它可以帮助某人。
在我的情况下,这里的答案都没有帮助。
对我来说,问题是mvn eclipse:eclipse
生成了一个类路径条目,该条目是对 Android 库项目的项目引用,但是,它没有显示在 Eclipse 构建路径设置中!这意味着库类在 dexer 中结束了两次,一次来自隐藏的项目引用,一次来自链接库 JAR。
我必须使用文本编辑器打开 .classpath 并手动删除项目元素。这解决了这个问题。
在其类路径中包含 protobuf lite(Google 的Protocol Buffers )的项目中,我遇到了完全相同的错误。我猜原因是protobuf-lite.jar
在我的类路径中,而项目文件夹是在我以前的机器中构建的。当我下载Maven并重新构建protobuf-lite.jar
文件然后将其作为用户库重新添加到我的项目中时,一切正常。
对我有用的是:
android.jar
我在Project/Properties/Libraries
.我使用的是 ADT r14,当我尝试添加任何库项目时,我得到了这个错误。对我来说,有效的只是将 ADT 更新到最新版本。它立即解决了问题。我尝试了几乎所有在 stackoverflow 上给出的解决方法,但没有其他方法对我真正有用。
我个人设法通过project.properties
在 Eclipse 项目中手动编辑文件来解决这个问题。
这是啥:
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
使用“修复项目属性”工具未自动修复此文件。
对我来说,问题是我设置了错误的编译器合规级别(1.8 而不是 1.7)。
这个答案解决了它:
在 Project SDK 部分中,当您添加 Android SDK 时,您应该提供 Java SDK,并且我所有的 Android SDK 都使用 Java 8 作为 SDK,因此即使项目级别为 1.7(我没有知道为什么,我认为一切都是由项目级别选择的)。现在我更改了 SDK(Java 版本“1.x.0”部分。)
在我的情况下,问题是在 2011 年 3 月更新 Eclipse 和 ADT 之后产生的。在我的项目中,我使用的是一个 JAR,它产生了要重建的问题,而以前的解决方案都没有工作。我花了几天时间尝试所有,上下搜索没有令人满意的解决方案。显然对 .jar 文件有双重引用。
最后我 :
它终于编译了。
这个错误是由于
.dx
无法解析格式。解决方案:
我正在使用 ADT 7 并且其他修复程序不起作用(但我仍然做了)。
然后我proguard.cfg
从另一个项目中复制并简单地将其粘贴到旧的 ADT 项目文件夹中。沃拉,它奏效了。
当我添加具有不同版本的相同 jar 文件时,我也遇到了这个问题,我只需删除旧版本的 jar 并清理它对我来说工作正常的项目。
当我尝试导出我的项目时,我遇到了同样的问题。在控制台中什么都看不到。
对我来说,解决方案是将 proguard 升级到最新版本,希望这对某人有所帮助。
我完成了这个答案中的步骤,但仍然没有得到解决方案。我一直在网上搜索,发现如果您在 Android 设备连接到计算机时尝试导出 APK,则会出现此错误。
断开我的设备,然后关闭项目,重新启动计算机,打开项目并清理它,这对我来说已经发生了 3 次。
该错误应该最终在 ADT 17/Tools r17 预览版中得到修复!至少有一些实例,如果不是全部的话。
就我而言,只需将手机从 USB 中拔出即可修复此错误。
这通常发生在我运行了很长时间之后,或者在我成功构建了一个签名的 apk 之后。
就我的经验而言,修复它我只是重新启动 eclipse。
我有同样的错误,并尝试了上面的一切,但没有任何帮助。
我的项目附加到 GIT 源代码控制系统,我意识到在导出到 Andorid 应用程序时有一些与 GIT 相关的任务。然后我将所有更改提交到 GIT 存储库并且错误消失。
因此,如果您使用 GIT 进行源代码控制,但以上没有任何帮助,请尝试将所有更改提交到 GIT 存储库(并最终推送到上游)并再次尝试导出。
对于NewRelic用户:
如果您在应用程序中集成了 newrelic jar,则当 newrelic 版本过期时会发生这种情况。
解决方案:
刚Project > Clean
为我工作。
这些答案都不适合我。我的问题是由 JUnit 和 hamcrest 引起的。另请参阅java.lang.IllegalArgumentException:已添加:Lorg/hamcrest/BaseDescription;转换为 Dalvik 格式失败,错误 1
最好将所有 *.jar 文件包含在项目文件夹树的“lib”目录中。这样,您就不需要通过转到项目的属性来定义构建路径。“lib”已经是一个构建路径
我有同样的问题。当我检查时,我看到有 2 个具有相同名称的类,在我添加的每个外部 jar 文件中都有 1 个。然后我必须删除 1 个 jar 文件。幸运的是,我为我删除的 1 获得了另一个 jar 文件。
如果您在应用程序中使用 Leadbolt 广告 SDK 并且同时结合了“通知广告”和“展示广告”,则需要使用 pubxappCom.jar 而不是 pubxapp.jar 来进行通知广告,否则会出现此错误!
快乐编码!
依赖项上的 Google API 会导致此问题。删除后效果很好。
我清理了我的主应用程序项目和它使用的 Android 库项目。解决了问题
- 从您的 java 构建路径中删除所有库。并再次添加。- 清理你的项目。
运行。
由于我已从构建路径中排除的几个文件被删除,但未从排除列表中删除,因此对我造成了此错误。
项目 -> 属性 -> Java 构建路径 -> 源选项卡 -> 项目/src 文件夹 -> 双击排除 -> 删除项目中不再存在的所有文件。
我以不同的方式找到了解决方案...... https://stackoverflow.com/a/14948244/1014288
多亏了这个,你可以修复没有删除和东西
在大多数情况下,此问题是由 Proguard 的错误或损坏版本引起的,由于某些奇怪的原因,通常会从官方 Android SDK 管理器安装
请勿编辑 Proguard bat 文件以避免进一步的问题,如果遇到此问题,请从官方网站下载最新的 Proguard 稳定版本并替换所有 proguard 文件
android-sdk\tools\proguard
从下载的档案中提取最新的 proguard 文件。
如果开发人员将库添加到他的项目中很可能需要该库,则删除所有外部库依赖项是没有意义的。
没有什么帮助我,但这里建议的解决方案就像一个魅力:
即添加行-optimizations !code/allocation/variable
到proguard-project.txt
另一个 android 巫术案例,如果没有其他方法,请尝试在清单中将您的 versionCode 和 versionName 增加 1。
它对我有用。
嗨以前我有Android SDK Build tools 18.1.1
和Windows XP
。然后我的应用程序运行正常。
但是我将我的系统更新为Windows 7
并更新Android SDK Build tools to 19
为具有最新配置。
但是我的项目有xercesImpl-2.9.1.jar
文件,所以当我开始使用新的/更新的配置运行我的应用程序时,我得到了
Conversion to Dalvik format failed with error 1 while parsing org/apache/xerces/impl/xpath/regex/ParserForXMLSchema.class
所以我浏览了所有提到这个问题但无法解决的答案。我想了 4 天,然后我找到了这个链接,它救了我的命,读完后我才知道问题是由于xercesImpl-2.9.1.jar
Android SDK Build 工具到 19 造成的。
所以我将它降级为 Android SDK Build tools 到 18.1.1。我摆脱了这个问题。
我在这里发布我的答案,以便如果有人遇到这个问题,他们可以得到解决。
这让我很沮丧。希望能帮助别人。
我尝试了所有方法,但没有任何效果。
有趣的是,如果我们使用 proguard 导出 android 应用程序,我们会收到“转换为 dalvik 格式失败并出现错误 1”的错误,但如果我们在导出时不使用 proguard,则成功创建了 APK。
最后,我们的 android 项目中的一个 jar.class
文件大小超过 1.5 MB。它的大小导致了这个问题。我们将该类拆分为许多较小的类,问题就消失了。
这里没有什么对我有用,我不得不更改我的 proguard 文件来添加这一行:
-keep class !mycode.** { *; }
它保留了任何不是我的包的代码。
我刚刚使用最新的 API 和最新的 SDK 和工具安装了最新的 eclipse,但是,多年后,这个错误并没有变老。我浪费了一天的时间来弄清楚。什么都试过了。徒然。因为这条信息非常笼统,很多不同的问题都会引发它。因此,某些人指出的解决方案对其他人不起作用。
一个好的第一种方法是转到 Window > Preferences > Android > Build 并取消选中“Skip Packaging and dexing...”。这样,您将在构建时获得更多关于特定错误的线索,而不仅仅是导出。
就我而言,我得到了一个"Dx unsupported class file version..."。我没有看到这里报告的这个错误。好吧,基于此,我发现我使用的一些旧 jar 是用 1.6 编译的,而另一些是用 1.7 编译的。因此,我将默认的 IDE 编译器合规级别更改为 1.6(Window > Preferences > Java > Compiler),在完全清理和重建我拥有的每个依赖项之后,我终于可以生成我的 APK。
这里的答案也没有对我有用。
但是,我可以通过从除主应用程序之外的所有附加库中删除 Android 类路径容器(在我的情况下为 Android 4.4)然后导出 APK 来修复错误。库项目将不再编译,但 jar 文件仍然存在并且 APK 正在部署。我不确定这种行为的原因是什么。
如果要解决此问题,则必须将 Android SDK1.6 更改为 Android 2.2。之后,清理项目,然后构建并运行。然后你会看到你的应用程序正在运行。