IDEA具有强大的内置功能-反编译器。它可以很好地工作。我可以复制源代码,但是找不到将所有反编译的Java类提取到Java文件的选项。
这个项目有很多Java类和程序包,所以我很想手动复制它。
有谁知道如何提取到Java源文件。谢谢
IDEA具有强大的内置功能-反编译器。它可以很好地工作。我可以复制源代码,但是找不到将所有反编译的Java类提取到Java文件的选项。
这个项目有很多Java类和程序包,所以我很想手动复制它。
有谁知道如何提取到Java源文件。谢谢
Answers:
要从命令行对jar包使用IntelliJ Java反编译器,请按照此处提供的说明进行操作:https : //github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine
-hdc=0 -dgs=1 -rsy=1 -rbr=1 -lit=1 -nls=1 -mpm=60
您可以在以下链接中看到它们:github
/Applications/IntelliJ IDEA CE.app/Contents
在Mac上搜索了,但找不到它。
/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar
。它被重命名。
org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler
。
截至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 -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
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 %*
请遵循有关IntelliJ JD插件的说明。或参见以下说明的摘录。
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而不是.java。类文件(它不会爆炸jar)。
人们问我:我如何获得fernflower.jar?
如果您安装了任何IntelliJ产品,则很可能您的计算机上已经装有Fernflower反编译器。IntelliJ IDEA带有Java字节码反编译器插件(捆绑),它是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上)制作自己的反编译器可执行文件。
find ./yoursourcesdirectory -name '*.jar' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
IntelliJ IDEA的反编译器并不是在考虑这种使用的情况下构建的。它仅旨在帮助程序员窥视他们正在开发的Java类的字节码。为了反编译许多您没有源代码的类文件,您将需要一些其他的Java反编译器,专门用于此工作,并且很可能独立运行。如果你用谷歌搜索,你会发现一堆。
您可以使用其中之一(可以在线使用或下载它们,有关它们的一些信息):http : //www.javadecompilers.com/
IntelliJ IDEA使用的一种是fernflower,但是它不能处理最近的事情-像String / Enum开关,泛型(没有亲自测试过这个,只读过它),...我只是从上述网站尝试了cfr结果与内置的反编译器相同(除了我在课堂上使用的Enum开关)。
尝试
https://github.com/fesh0r/fernflower
从下载jar
http://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中。
请享用!
前一段时间,我使用JAD(JAva反编译器)实现了这一目的-我认为IntelliJ的反编译器并未考虑到导出功能。它更多地是一种工具,可以帮助您浏览没有源的类。
JAD仍可下载,但我认为没有人再维护它了:http : //varaneckas.com/jad/
它有许多插件,即Jadclipse(您猜对了,这是在Eclipse中使用JAD的一种方法-请参见没有代码的反编译类:))。
有人给出了很好的答案。我一步一步地提出了另一条指令线索。首先,打开您的工作室并进行搜索。您可以找到反编译器为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选项。
希望这些步骤可以使问题清楚。
Java Bytecode Decompiler
在2020.03中介绍了该插件。通过在Intellij内部使用此捆绑的插件,可以很容易地将其反编译.jar
为Java代码。