如何反编译为java文件intellij的想法

49 java decompiling intellij-idea java-8

IDEA有一个很棒的内置功能 - 反编译器.它工作得很好.我可以复制源代码,但我找不到将所有反编译的java类提取到java文件的选项.
这个项目有很多java类和包,所以我将长时间手动复制它.
有谁知道如何提取到java源文件.谢谢

yan*_*yan 44

截至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
Run Code Online (Sandbox Code Playgroud)

(您将获得错误的使用命令,但它确实有效).

  • 将此答案与接受的答案中的最高评论合并,启动使用IDEA默认使用的相同参数的命令是`java -cp"/ Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/ java-decompiler.jar"org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -hdc = 0 -dgs = 1 -rsy = 1 -rbr = 1 -lit = 1 -nls = 1 -mpm = 60/absolute/path/to/src1/absolute/path/to/src2/absolute/path/to/dst` (9认同)
  • 在 Arch 安装时: java -cp "/usr/share/idea/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -hdc=0 -dgs=1 -rsy=1 -rbr=1 -lit=1 -nls=1 -mpm=60 /absolute/path/to/src1 /absolute/path/to/src2 /absolute/path/to/dst (3认同)
  • Windows **decompile.cmd** scr1 src2 dst: `java -cp "%ProgramFiles%\JetBrains\IntelliJ IDEA 2018.3\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main .decompiler.ConsoleDecompiler -hdc=0 -dgs=1 -rsy=1 -rbr=1 -lit=1 -nls=1 -mpm=60 %*` (3认同)
  • 这个更简短的命令对我有用(基于这些答案和使用说明):java -cp <path> /java-decompiler/lib/java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler- dgs = true <target.jar> <目标> (2认同)

小智 36

要从jar命令行使用IntelliJ Java反编译器,请按照此处提供的说明操作:https: //github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine

  • 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-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.kt) (11认同)
  • @AlexSpurling查看`/ Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar`.它被重命名. (5认同)
  • 顺便说一句,主类是“org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler”。 (5认同)
  • 有谁知道在IntelliJ IDEA安装中哪里可以找到fernflower.jar?我在我的mac上搜索了`/ Applications/IntelliJ IDEA CE.app/Contents`但找不到它. (4认同)

naX*_*aXa 23

按照IntelliJ JD插件的说明进行操作.或者查看以下说明中的摘录.

java -jar fernflower.jar [<source>]+ <destination>
Run Code Online (Sandbox Code Playgroud)

+表示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\
Run Code Online (Sandbox Code Playgroud)

请注意,如果您为源传递".jar"文件,它将在目标中创建另一个".jar"文件,但是,在新的".jar"文件中,文件将是.java而不是.java.类文件(它不会爆炸jar).


UPDATE

人们问我:我怎么得到fernflower.jar?

如果您安装了任何IntelliJ产品,很可能您已经在计算机上安装了Fernflower反编译器.IntelliJ IDEA附带Java Bytecode Decompiler插件(捆绑),这是Fernflower的现代扩展.

  1. ${IntelliJ_INSTALL_DIR}\plugins\java-decompiler\lib\java-decompiler.jar(例如:C:\ Program Files\JetBrains\IntelliJ IDEA 2018\plugins\java-decompiler\lib)中找到该文件.
  2. 将其复制到某处并重命名为fernflower.jar(可选).
  3. 此JAR不可执行,因此我们无法使用它java -jar.但是这样的工作:

    java -cp fernflower.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler [<source>]+ <destination>
    
    Run Code Online (Sandbox Code Playgroud)

    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
    
    Run Code Online (Sandbox Code Playgroud)

如果您没有安装IntelliJ产品,请立即下载(可在jetbrains.com获得)或从源(在Github提供)制作您自己的反编译器可执行文件.

  • 请注意,这会生成源 JAR,然后必须将其解压缩以查看反编译的 Java 文件。你可以在 bash `find ./yoursourcesdirectory -name '*.jar' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;` (4认同)
  • 我如何获得fernflower.jar? (3认同)

小智 22

  1. 打开现有项目或创建新项目。

  2. 转到项目结构设置> 库。通过单击符号将要反编译的 jar 添加到库中+

  3. 转到左侧显示的项目工具窗口。搜索您在上一步中添加的 jar 名称。导航到所需的类或包。

您可以看到该 jar 的反编译 java 文件。

  • 令人惊讶的是,这并没有获得更多的选票,因为这可能是大多数人真正想要做的。 (2认同)
  • 否决 - 不回答获取源文件的问题。@NicholasDiPiazza 不一定——它只允许您一次浏览一个文件。要获取源代码,您必须从编辑器窗口复制/粘贴到新的 .java 文件中。当您有 50 或 100 个需要源代码的类文件时,这并不有趣。 (2认同)

Mik*_*kis 3

IntelliJ IDEA 的反编译器并不是考虑到这种用法而构建的。它只是为了帮助程序员查看他们正在开发的 java 类的字节码。为了反编译大量没有源代码的类文件,您将需要一些其他专门用于此工作的 java 反编译器,并且很可能独立运行,例如 jad、fernflower 等。