繁体   English   中英

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

[英]“Conversion to Dalvik format failed with error 1” on external JAR

在 Eclipse 中的 Android 应用程序中,我收到以下错误。

意外的顶级例外:
java.lang.IllegalArgumentException:已添加:Lorg/xmlpull/v1/XmlPullParser;
....
转换为 Dalvik 格式失败,错误 1

仅当我将特定的外部 JAR 文件添加到我的项目时才会出现此错误。 我搜索了很长时间以寻找可能的解决方案,但没有一个可能的解决方案有效。

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

转到 Project » Properties » Java Build Path » Libraries 并删除除“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。在生成 javadoc 后删除该路径代码将正常工作。如果仍然出现任何问题,请检查此内容。

我解决了这个问题。

这是 JAR 文件冲突。

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

smack.jarandroid_maps_lib-1.0.2

从其中一个 JAR 文件中删除这个包解决了这个问题。

Windows 7 解决方案:

确认问题是由文件中的 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

您可以通过在导出(未)签名的 Android 应用程序时关闭菜单 >“项目”>“自动构建”来轻松解决此问题(使用 Eclipse Android 开发者工具,构建:v22.0.1-685705)。 之后,不要忘记再次打开它。

如果你有ADT修订12+,你应该从4.4更新您的ProGuard - > 4.6(描述在这里)。 此外,您应该保留原始格式的 ...\\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,而“自动构建”仍处于禁用状态

这是另一个场景和解决方案:

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

  1. 在您的应用项目中,检查是否有任何指向您的库项目的链接源文件夹(它们的名称为“LibraryName_src”形式)。
  2. 选择所有这些项目,右键单击,选择“构建路径”->“从构建路径中删除”。
  3. 选择“同时取消文件夹与项目的链接”,然后单击“”。
  4. 清理、重建和重新部署项目。

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

编辑:这是由一个 Android 开发博客条目确认的,特别是这个- 请参阅第 8 段以后。

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

如果您已将Android.jar文件添加到您的构建路径,这也可能是由于 Eclipse 中的意外快速修复造成的。 右键单击Project -> build path -> configure build path -> android.jar删除它,删除。

每次出现此错误时,简单地清理项目对我都有效。

在对所有解决方案进行四个小时的测试后,我今天找到的唯一的解决方案是这里提供的许多解决方案的组合:

  • 从 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”构建错误:

<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 库时处理过这个问题。 您可以执行以下步骤,这对我有用。

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

希望这会帮助你。

我的问题是由 ADT 12.0 版和 ProGuard 集成引起的。 这个错误有据可查,解决方案在文档中

解决方案在这里

ProGuard 命令行

我发现了别的东西。 Android 将/libs目录用于 JAR 文件。 我已经多次看到“Conversion to Dalvik format failed with error 1”错误,总是当我在 JAR 文件中出错时。

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

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

一般来说,这个问题似乎是在构建路径中有不必要的 JAR 文件时出现的。

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

将 Proguard 更新到最新版本为我解决了这个问题。

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

感谢上帝!

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

库项目]![1]![在此处输入图像描述 .

它也被添加到构建路径中,ADT 工具 16 给出了这个场景的错误。

右键单击您的项目并单击构建路径,配置构建路径,然后查看图像并从此处删除您的项目 OpenFeint,一切都完成了:)

在此处输入图片说明

以前提出的解决方案都不适合我。 就我而言,问题发生在我从引用库源代码文件夹切换到使用库 JAR 文件时。 最初在 Android 应用程序项目 Properties\\Android page\\Library 部分下列出了一个 Android 库项目,该库也在项目资源管理器树中作为指向库源目录的链接进行比较。

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

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

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

  • 像往常一样将库 JAR 添加到应用程序项目构建路径。

列出的解决方案都不适合我。

这是我遇到问题的地方:

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

就我而言

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

只需清理项目

如果这不起作用,请尝试其他解决方案

上面的所有解决方案对我都不起作用。 我没有使用任何预编译的 .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-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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM