2015-02-08 201 views
20

IDEA有一個很棒的內置功能 - 反編譯器。它工作的很好。我可以複製源代碼,但我找不到選項將所有反編譯的java類提取到java文件。
這個項目有很多java類和包,所以我會很長時間手工複製它。
有誰知道如何解壓縮到java源文件。 Thx如何反編譯爲java文件intellij idea

回答

16

要使用從一個jar包的命令行的IntelliJ的Java反編譯器遵循此處提供的說明: https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine

+0

)IntelliJ Java反編譯器工作得很好 – axaluss 2015-07-16 09:27:09

+3

IDEA的默認參數爲'-hdc = 0 -dgs = 1 -rsy = 1 -rbr = 1 -lit = 1 -nls = 1 -mpm = 60'你可以在下面的鏈接[github]中看到它們(https://github.com/JetBrains/intellij-community/blob/master/plugins/java-編譯/插件/ src/org/jetbrains/java /反編譯器/ IdeaDecompiler.kt) – kraken 2016-10-31 05:35:15

+2

有人知道在IntelliJ IDEA安裝中找到fernflower.jar嗎?我搜索了'/ Applications/IntelliJ IDEA CE.app/Contents'在我的Mac上,但無法找到它。 – 2017-05-30 09:27:50

3

IntelliJ IDEA的反編譯器沒有考慮到這種用法。它只是爲了幫助程序員窺視他們正在開發的Java類的字節碼。爲了反編譯許多你沒有源代碼的類文件,你需要一些其他的java反編譯器,它專門用於這項工作,並且很可能獨立運行。如果你谷歌,你應該找到一堆。

+0

但我手動複製代碼,它的工作原理。也許有什麼辦法可以自動完成或者編寫腳本來從反編譯的壓縮文件複製到項目 – bkdaaqra 2015-02-08 00:31:56

2

前段時間我用JAD(JAva Decompiler)來實現這個 - 我不認爲IntelliJ的反編譯器是考慮到了導出問題。它更多的是幫助我們查看哪些來源不可用的類。

JAD仍可供下載,但我不認爲任何人保持它了:http://varaneckas.com/jad/

有它很多的插件,即Jadclipse(你猜對了,在Eclipse中使用JAD的方式 - 見反編譯代碼不可用的類:))。

+0

Intellij反編譯器與其他工具比較起來效果很好,但有時它不能反編譯lamdas,所以它會調用invokedynamic,但我嘗試過cfr,並且它很好,但其他代碼不如intellij,所以我必須手動複製所有代碼( – bkdaaqra 2015-02-08 06:59:23

2

你可以使用其中一個(你既可以在線使用它們,或者下載這些,有關於他們每個人的一些信息): http://www.javadecompilers.com/

的一個IntelliJ IDEA的使用是fernflower,但它不能處理最近的事情 - 比如String/Enum開關,泛型(沒有親自測試這個,只能讀到它),... 我剛剛嘗試過上述網站的cfr,結果與內置的相同反編譯器(除了我在課堂上使用的Enum開關外)。

12

按照指令IntelliJ JD plugin。或者看下面的說明摘錄。

java -jar fernflower.jar [<source>]+ <destination> 

+意味着1次或多次
<source>:文件或目錄與文件反編譯。目錄被遞歸掃描。允許的文件擴展名是類,zip和jar。
<destination>:目標目錄

例子:

java -jar fernflower.jar -hdc=0 -dgs=1 -rsy=1 -lit=1 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\ 

請注意,如果你傳遞一個「的.jar」文件的來源,它會在目標創建另一個「的.jar」文件但是,在新的「.jar」文件中,這些文件將是.java而不是.class文件(它不會破壞jar)。

+2

如何獲得fernflower.jar? – asmaier 2016-12-23 10:34:34

+0

@naXa:真的嗎?像谷歌有多少實際有用的.jars出現時,谷歌?沒有那麼多,其實...... – Make42 2017-02-18 15:04:51

+0

@ Make42我沒有明白。那麼,fernflower是一個開源項目。這意味着每個人都可以爲自己打包一個罐子。 – naXa 2017-02-18 23:52:43

8

截至2017年8月和IntelliJ V2017.2,接受的答案似乎不再是完全準確了:沒有fernflower.jar可供使用。

的JAR文件被稱爲java-decompiler.jar,並且不包括主清單......相反,你可以使用下面的命令(在Mac上安裝):

java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler 

(你會得到錯誤的使用命令,但它確實有效)。

java -jar fernflower.jar -hes=0 -hdc=0 C:\binary C:\source 

放入夾C JAR文件:\二進制和源代碼將被提取