2015-02-10 176 views
0

我已经将Dropbox API框架从2.0.1更新到当前3.1.2在我的android应用程序中。虽然包装我的应用我越来越多这样的错误:如何将.jar 1.7转换为.jar 1.6

[INFO]故障处理:[INFO]糟糕的类文件魔术(cafebabe)或 版本(0033.0000)[INFO] ...在解析 COM /dropbox/sync/android/DbxStringValue.class [INFO] ...而 处理COM /保管箱/同步/安卓/ DbxStringValue.class [INFO]

seems该文件是由JDK 1.7,但我编译仍然使用jdk 1.6,我不想更新到jdk 1.7(以避免新的错误和不兼容)。

如何把.jar 1.7转换成.jar 1.6?

+0

你有来源吗? – Maroun 2015-02-10 13:04:49

+0

不,否则我只是用我的jdk重新编译源代码 – 4ntoine 2015-02-10 13:05:14

+1

'我不想更新到jdk 1.7(以避免新的错误和不兼容)。“ 你说什么不兼容,我不认为升级到jdk1.7会无论如何伤害你 – 2015-02-10 13:13:26

回答

2

如果jar已经包含用Java 7.0编译的类,那么这些类可能只会使用Java 7.0中提供的功能,在这种情况下,您将无法转换它(除非您使用Java 7.0只有代码功能)。

如果幸运的话,这些类只是经过编译并且使用Java 7.0编写的目标,但它们实际上并不使用Java 7.0中引入的任何新功能,您可以使用Java反编译器从您的Java 7.0获取Java源文件jar,用Java 6.0重新编译,重新打包并完成。

为了反编译.class文件到.java文件,你可以使用JD Project或任何其他的替代品。

一些更多的选择:

AndroChef Java Decompiler

dex2jar

但最好和最简单的将是刚刚升级到Java 7.0。你会获得比你输的更多(如果你还输了)。

+0

恐怕反编译会产生效率低下的Java代码(循环等)并降低性能。我使用dex2jar将dex反编译为jar。在我的情况下.jar文件在打包dex时被忽略,因此dex中只有1.7类缺失 – 4ntoine 2015-02-10 13:15:28

+1

@ 4ntoine“反编译将生成低效的java代码”幸运的是,对于我们来说,javac不会进行任何优化或代码转换。字节码是原始源代码的较好表示。因此,没有必要害怕这样的事情。如果Dropbox jar没有被混淆,生成的代码也应该是相当可读的。 – 2015-02-10 13:24:47

+0

好的,这听起来不错。哪个工具可以在批处理模式下反编译jar(为了获得jar的所有源文件)? – 4ntoine 2015-02-10 13:35:37