【问题标题】:Android Dx Error1, Failed to convert to Dalvik formatAndroid Dx Error1,无法转换为 Dalvik 格式
【发布时间】:2013-12-05 15:30:24
【问题描述】:

我对这个问题感到绝望:我想导出/运行我的 Android 应用程序,并在构建路径中添加了一个额外的 .jar。我确定我添加正确,还包括其他 5 个 .jar,它们都可以正常工作。

有了这个特殊的,我得到了提到的错误。 我已经尝试了可以​​在这个问题中找到的所有内容: "Conversion to Dalvik format failed with error 1" on external JAR

和其他几个链接谷歌吐出。主要问题是,我实际上不明白我附加的消息想要告诉我什么,因为如果我将所有 jar 添加到“普通”javaproject 中,它运行得非常好......

在 Android 4.0.3 上开发,

proguard 4.8,

广告 16.0.1.v201112150204-238534,

日食 3.7.1.r37

请帮帮我

[2012-07-18 10:45:48 - myapp] Dx 警告:忽略匿名内部的 InnerClasses 属性 不附带的类 (iaik.xml.crypto.XSecProvider$1) 关联的 EnclosureMethod 属性。这个类可能是制作的 由不针对现代 .class 文件格式的编译器。这 推荐的解决方案是从源代码重新编译类,使用 最新的编译器,并且没有指定任何“-target”类型选项。 忽略此警告的后果是反射操作 在这个类上会错误地指出它是 not 一个内部 类。

... ...

[2012-07-18 10:45:48 - myapp] Dx 警告:忽略匿名内部的 InnerClasses 属性 不附带的类 (iaik.xml.crypto.XSecProvider$2) 关联的 EnclosureMethod 属性。这个类可能是制作的 由不针对现代 .class 文件格式的编译器。这 推荐的解决方案是从源代码重新编译类,使用 最新的编译器,并且没有指定任何“-target”类型选项。 忽略此警告的后果是反射操作 在这个类上会错误地指出它是 not 一个内部 类。

在以下情况下对核心类(java.* 或 javax.*)的不明智或错误使用 不构建核心库。

这通常是由于无意中包含了核心库文件 您的应用程序的项目,当使用 IDE(例如 Eclipse)时。如果 你确定你不是故意定义一个核心类,那么这个 是对正在发生的事情的最可能的解释。

但是,您实际上可能正在尝试在核心中定义一个类 命名空间,您可能已经获取了它的来源,例如,从 非安卓虚拟机项目。这肯定不会 工作。至少,它会危害您的应用程序与 平台的未来版本。它也经常是有问题的 合法性。

如果你真的打算建立一个核心库——这只是 适合作为创建完整虚拟机分发的一部分, 而不是编译应用程序 - 然后使用 “--core-library”选项来禁止显示此错误消息。

如果您继续使用“--core-library”,但实际上是在构建一个 应用程序,然后预先警告您的应用程序仍然会失败 在某个时候构建或运行。请为愤怒的顾客做好准备 例如,他们发现您的应用程序停止运行一次 他们升级他们的操作系统。你将为此负责 问题。

如果您合法地使用某些恰好位于核心中的代码 包装,那么您拥有的最简单安全的替代方法是重新包装 那个代码。也就是说,将有问题的类移动到您自己的包中 命名空间。这意味着它们永远不会与核心冲突 系统类。 JarJar 是一个可以帮助您完成这项工作的工具。 如果你发现你不能做到这一点,那么这表明你 你所走的道路最终会导致痛苦、苦难、悲伤, 和悲叹。

[2012-07-18 10:45:48 - myapp] Dx 1 错误;中止

[2012-07-18 10:45:48 - myapp] 转换为 Dalvik 格式 失败,错误 1

这就是我的项目在资源管理器中的样子:

【问题讨论】:

  • 您能否确认您是否没有添加过两次jar?
  • 是的,我想我在过去 30 分钟内删除并重新添加了 100 次。里面什么都没有。但有趣的是,实际上还有一行写着 (iaik.xml.crypto.XSecProvider$1)。

标签: java android dalvik


【解决方案1】:

问题是您包含的 jar 在 java.* 或 javax.* 命名空间中有一个类。 dx 不允许这样做,如上一条大错误消息中所述。

如果您确实需要这些类,则需要使用 jarjar 工具之类的工具将它们移动到不同的包中。否则,您需要将它们从 jar 中删除——我不确定,可能有可能让 proguard 在所有内容都被 dx 删除之前将它们删除。

【讨论】:

  • 你能给我一个链接或提示如何用你的一个想法来做吗?我认为这是正确的方式
  • @Shehaaz 我的回答已经描述了如何解决问题。
【解决方案2】:

我遇到了同样的问题,我终于通过明确导出我的私有库来解决它。

喜欢: 项目 >> 属性 >> Java 构建路径 >> 库 >> 添加外部罐子。

注意:从 libs 文件夹中删除了我所有的私有库。我知道这不正确,但它对我有用。

谢谢, 阿尼尔

【讨论】:

  • 非常感谢。这对我有用。)以前我使用的是 ant builder,每次部署可能需要 1 到 2 分钟。现在这为我节省了很多时间。
【解决方案3】:

按如下操作:

project
  > properties
    > java build path
      > libraries
        > remove all including android jars

现在,进入项目浏览器,右键单击您正在处理的项目,然后

android tools
  > fix project properties.

做一个干净然后构建。

重启eclipse,就不会再报错了

【讨论】:

    【解决方案4】:

    如果您在 Win7 上工作,请更改此行:

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

    proguard.bat 文件中:

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

    proguard.bat 在:

    [Android SDK安装目录]\tools\proguard\bin\proguard.bat

    编辑
    我希望这些的结合可以帮助你:
    1-尝试从您的项目中删除libraries projects
    2-尝试导出您的项目(作为存档文件),从工作区删除项目及其源代码,然后再次导入。
    3-尝试从路径中删除您的 jar,进行干净构建,然后将它们再次添加到您的项目中。

    【讨论】:

    • 我已经这样做了,它没有改变任何东西,然后我将我的 proguard 更新到 4.8,尝试运行它 - 没有,再次更改此行,仍然不起作用
    • 请看我对 Halims 回答的评论
    • 1) 如前所述,没有这样的名称(参见编辑后的问题)2) 没有改变任何东西 3) 已经尝试过:/
    • @billdoor 你的意思是不能做clean-build 或者导出你的项目,删除它的资源再导入?
    【解决方案5】:

    我在使用自己的混淆 lib jar 时遇到了同样的错误。

    我的日志:

    警告:忽略不带有关联 EnclosureMethod 属性的匿名内部类的 InnerClasses 属性。这个类可能由不针对现代 .class 文件格式的编译器引以为豪... em>

    我这样解决了:在混淆我的 jar 之前,我在 proguard.cfg(或最新的 android adt 版本中的 proguard-project.txt)中添加了“-keepattributes EnclosureMethod”。

    【讨论】:

      【解决方案6】:

      同意hasanghaforian。最简单的解决方案是删除库项目。 右键单击您的项目-> 属性-> Java 构建路径,然后删除库项目

      【讨论】:

      • 我没有名为“Library Projects”的文件夹/项目,我认为它在 1-2 个版本前已被删除
      • ps。我在我的问题中添加了项目在包资源管理器中的外观图片
      • @billdoor,不在资源管理器中。您必须右键单击您的项目根(父),然后单击属性。在那里你应该看到 Java 构建路径。
      猜你喜欢
      • 2011-07-30
      • 2011-02-10
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多