Android Dx Error1,无法转换为Dalvik格式

时间:2012-07-18 09:12:31

标签: java android dalvik

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

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

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

  

在Android 4.0.3上开发,

     

proguard 4.8,

     

adt 16.0.1.v201112150204-238534,

     

eclipse 3.7.1.r37

请帮帮我

  

[2012-07-18 10:45:48 - myapp] Dx警告:忽略匿名内心的InnerClasses属性   没有附带的类(iaik.xml.crypto.XSecProvider $ 1)   关联的EnclosingMethod属性。这堂课可能是制作完成的   由一个没有以现代.class文件格式为目标的编译器。该   建议的解决方案是使用a从源代码重新编译类   最新的编译器,没有指定任何“-target”类型选项。   忽视这种警告的后果是反思性操作   在这个类上将错误地表明它是而不是一个内部   类。

     

...   ...

     

[2012-07-18 10:45:48 - myapp] Dx警告:忽略匿名内心的InnerClasses属性   没有附带的类(iaik.xml.crypto.XSecProvider $ 2)   关联的EnclosingMethod属性。这堂课可能是制作完成的   由一个没有以现代.class文件格式为目标的编译器。该   建议的解决方案是使用a从源代码重新编译类   最新的编译器,没有指定任何“-target”类型选项。   忽视这种警告的后果是反思性操作   在这个类上将错误地表明它是而不是一个内部   类。

     

错误使用或错误使用核心类(java。*或javax。*)时   没有建立核心库。

     

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

     

但是,您实际上可能正在尝试在核心中定义类   命名空间,例如,来自a的源代码   非Android虚拟机项目。这肯定不会   工作。它至少会危害您的应用与您的兼容性   该平台的未来版本。它也常常值得怀疑   合法性。

     

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

     

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

     

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

     

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

     

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

这是我的项目在探险家中的表现: http://s14.directupload.net/images/120718/zzy6mmym.jpg

6 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

我遇到了同样的问题,我最后通过明确导出我的私人库来解决它。

像: 项目>>属性>> Java构建路径>>图书馆>>添加外部罐子。

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

谢谢, 阿尼尔

答案 2 :(得分:2)

请执行以下操作:

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

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

android tools
  > fix project properties.

干净然后再建造。

只需重新启动eclipse,就不会再出现错误了

答案 3 :(得分:1)

如果您使用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,执行clean-build,然后将它们再次添加到项目中。

答案 4 :(得分:1)

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

我的日志:

警告:忽略一个匿名内部类的InnerClasses属性,该内部类没有关联的EnclosingMethod attribte.This类可能是由一个没有以morden .class文件格式为目标的编译器产生的......

我解决了这个问题:在我模糊我的jar之前,我将“-keepattributes EnclosingMethod”添加到proguard.cfg(或最新的android adt版本中的proguard-project.txt)。

答案 5 :(得分:0)

同意hasanghaforian。最简单的解决方案是删除库项目。 右键单击您的项目 - > Properties |> Java Build Path,然后删除Library Projects