2015-02-10 138 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