IDEA有一个很棒的内置功能 - 反编译器。它工作得很好。我可以复制源代码,但我找不到将所有反编译的java类提取到java文件的选项 这个项目有很多java类和包,所以我将长时间手动复制它 有谁知道如何提取到java源文件。 THX
答案 0 :(得分:32)
截至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
(你会得到错误的 Usage 命令,但确实有效。)
答案 1 :(得分:29)
要从jar命令行使用IntelliJ Java反编译器,请按照此处提供的说明操作: https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine
答案 2 :(得分:19)
按照IntelliJ JD plugin的说明操作。或者参阅以下说明中的摘录。
java -jar fernflower.jar [<source>]+ <destination>
+
表示1次或更多次<source>
:包含要反编译的文件的文件或目录。目录以递归方式扫描。允许的文件扩展名是class,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)。
人们问我:我如何获得fernflower.jar?
如果您安装了任何IntelliJ产品,很可能您的计算机上已经安装了Fernflower反编译器。 IntelliJ IDEA附带Java Bytecode Decompiler插件(捆绑),这是Fernflower的现代扩展。
${IntelliJ_INSTALL_DIR}\plugins\java-decompiler\lib\java-decompiler.jar
中找到该文件(例如:C:\ Program Files \ JetBrains \ IntelliJ IDEA 2018 \ plugins \ java-decompiler \ lib)。此JAR不可执行,因此我们无法使用java -jar
运行它。无论如何这样的工作:
java -cp fernflower.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler [<source>]+ <destination>
org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler
是包含运行反编译器的主要方法的类。
示例:
mkdir output_src
java -cp fernflower.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -hdc=0 -dgs=1 -rsy=1 -lit=1 ./input.jar ./output_src
如果您没有安装IntelliJ产品,请立即下载(在jetbrains.com上提供)或从源(可在Github上获得)制作您自己的反编译器可执行文件。
答案 3 :(得分:3)
您可以使用其中一种(您可以在线使用它们或下载它们,有关于它们的一些信息): http://www.javadecompilers.com/
一个IntelliJ IDEA使用的是fernflower,但它无法处理最近的事情 - 比如String / Enum开关,泛型(没有亲自测试这个,只读过它),... 我刚从上面的网站上试过cfr,结果与内置的反编译器相同(除了我班上的Enum开关)。
答案 4 :(得分:2)
IntelliJ IDEA的反编译器并没有考虑到这种用法。它只是为了帮助程序员查看他们正在开发的java类的字节码。为了反编译许多你没有源代码的类文件,你需要一些专门用于这个工作的其他java反编译器,并且很可能是独立运行的。如果你谷歌你应该找到一堆。
答案 5 :(得分:2)
前段时间我使用JAD(JAva Decompiler)来实现这一目标 - 我认为IntelliJ的反编译器并没有考虑到出口。它更像是一种帮助查看源不可用的类的工具。
JAD仍然可供下载,但我认为不再有任何人继续下载:http://varaneckas.com/jad/
有很多插件,即Jadclipse(你猜对了,在Eclipse中使用JAD的一种方法 - 参见代码不可用的反编译类:)。)。
答案 6 :(得分:1)
尝试
https://github.com/fesh0r/fernflower
从
下载jarhttp://files.minecraftforge.net/maven/net/minecraftforge/fernflower/
命令:
java -jar fernflower.jar -hes=0 -hdc=0 C:\binary C:\source
将您的jar文件放在文件夹C:\ binary中,将提取源并将其打包在C:\ source中的jar中。
享受!
答案 7 :(得分:1)
我使用JD-GUI将所有反编译的Java类提取到Java文件中。
答案 8 :(得分:1)
你可以看到那个jar的反编译java文件
答案 9 :(得分:0)
有人给出了很好的答案。我一步一步地提出了另一个指导线索。 首先,打开您的工作室并进行搜索。您会发现反编译器是Fernflower。
第二,我们可以在plugins目录中找到它。
/Applications/Android Studio.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar
第三次,运行它,您将获得用法
java -cp "/Applications/Android Studio.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler
Usage: java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>
Example: java -jar fernflower.jar -dgs=true c:\my\source\ c:\my.jar d:\decompiled\
最后,根据IdeaIdcompiler.kt
,工作室的反编译器嵌套选项如下。-hdc = 0 -dgs = 1 -rsy = 1 -rbr = 1 -lit = 1 -nls = 1 -mpm = 60 -lac = 1
IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR to "0",
IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES to "1",
IFernflowerPreferences.REMOVE_SYNTHETIC to "1",
IFernflowerPreferences.REMOVE_BRIDGE to "1",
IFernflowerPreferences.LITERALS_AS_IS to "1",
IFernflowerPreferences.NEW_LINE_SEPARATOR to "1",
**IFernflowerPreferences.BANNER to BANNER,**
IFernflowerPreferences.MAX_PROCESSING_METHOD to 60,
**IFernflowerPreferences.INDENT_STRING to indent,**
**IFernflowerPreferences.IGNORE_INVALID_BYTECODE to "1",**
IFernflowerPreferences.VERIFY_ANONYMOUS_CLASSES to "1",
**IFernflowerPreferences.UNIT_TEST_MODE to if (ApplicationManager.getApplication().isUnitTestMode) "1" else "0")**
我找不到星号项目的sutialbe选项。
希望这些步骤可以使问题更清楚。
答案 10 :(得分:-2)
或者,您也可以通过WINRAR来提取文件。