2

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

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

和其他几个链接谷歌吐出。主要问题是,我实际上不明白我附加的消息想要告诉我什么,因为如果我将所有 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 警告:忽略不带有关联 EnclosureMethod 属性的匿名内部类 (iaik.xml.crypto.XSecProvider$1) 的 InnerClasses 属性。此类可能是由不针对现代 .class 文件格式的编译器生成的。推荐的解决方案是从源代码重新编译类,使用最新的编译器并且不指定任何“-target”类型选项。忽略此警告的后果是此类上的反射操作将错误地指示它不是内部类。

……

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

不构建核心库时对核心类(java.* 或 javax.*)的不明智或错误使用。

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

但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能从非 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

4

6 回答 6

5

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

如果您确实需要这些类,则需要使用 jarjar 工具之类的工具将它们移动到不同的包中。否则,您需要将它们从 jar 中删除——我不确定,在一切都得到 dx'd 之前,proguard 可能会删除它们。

于 2012-07-18T17:44:31.727 回答
3

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

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

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

谢谢,阿尼尔

于 2013-11-17T07:56:11.777 回答
2

执行以下操作:

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

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

android tools
  > fix project properties.

做一个干净然后构建。

重启eclipse,就不会再出现错误了

于 2013-12-05T07:11:59.413 回答
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,进行干净构建,然后将它们再次添加到您的项目中。

于 2012-07-18T09:30:10.313 回答
1

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

我的日志:

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

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

于 2013-03-27T03:33:48.633 回答
0

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

于 2012-07-18T10:00:41.413 回答