wake-up-neo.com

So dekompilieren Sie in Java-Dateien die Idee

IDEA hat eine großartige eingebaute Funktion - Decompiler. Es funktioniert großartig. Ich kann Quellcode kopieren, aber ich kann keine Option finden, um alle dekompilierten Java-Klassen in Java-Dateien zu extrahieren.
Dieses Projekt enthält viele Java-Klassen und -Pakete, daher ist es zu lange, um es manuell zu kopieren.
Weiß jemand, wie in Java-Quelldateien extrahiert wird . Vielen Dank

31
bkdaaqra

Um den IntelliJ Java-Decompiler über die Befehlszeile für ein JAR-Paket zu verwenden, folgen Sie den Anweisungen, die hier bereitgestellt werden: https://github.com/JetBrains/intellij-community/tree/master/plugins/Java-decompiler/engine

27
nicordesigns

Ab August 2017 und IntelliJ V2017.2 scheint die akzeptierte Antwort nicht mehr genau zu sein: Es ist kein fernflower.jar zu verwenden. 

Die JAR-Datei heißt Java-decompiler.jar und enthält kein Hauptmanifest ... Stattdessen können Sie den folgenden Befehl (von einer Mac-Installation) verwenden:

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

(Sie erhalten den falschen Usage Befehl, aber es funktioniert).

29
yan

Folgen Sie den Anweisungen für IntelliJ JD Plugin . Oder sehen Sie einen Auszug aus den Anweisungen unten.

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

+ bedeutet 1 oder mehrmals
<source>: Datei oder Verzeichnis mit Dateien, die dekompiliert werden sollen. Verzeichnisse werden rekursiv gescannt. Zulässige Dateierweiterungen sind class, Zip und jar.
<destination>: Zielverzeichnis

Beispiel:

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

Wenn Sie eine ".jar" -Datei für die Quelle übergeben, wird im Ziel eine weitere ".jar" -Datei erstellt. Innerhalb der neuen ".jar" -Datei werden jedoch die Dateien .Java anstelle von. Klassendateien (das Glas wird nicht explodiert).


AKTUALISIEREN

Die Leute fragen mich: Wie bekomme ich die fernflower.jar?

Wenn Sie ein IntelliJ-Produkt installiert haben, haben Sie möglicherweise bereits den Fernflower-Dekompiler auf Ihrem Computer. IntelliJ IDEA wird mit Java Bytecode Decompiler plugin (mitgeliefert) geliefert, einer modernen Erweiterung von Fernflower. 

  1. Suchen Sie die Datei in ${IntelliJ_INSTALL_DIR}\plugins\Java-decompiler\lib\Java-decompiler.jar (Beispiel: C:\Programme\JetBrains\IntelliJ IDEA 2018\plugins\Java-decompiler\lib).
  2. Kopieren Sie sie irgendwo und benennen Sie sie in fernflower.jar um (optional).
  3. Diese JAR-Datei ist nicht ausführbar. Daher können wir sie nicht mit Java -jar ausführen. So etwas funktioniert jedoch:

    Java -cp fernflower.jar org.jetbrains.Java.decompiler.main.decompiler.ConsoleDecompiler [<source>]+ <destination>
    

    org.jetbrains.Java.decompiler.main.decompiler.ConsoleDecompiler ist die Klasse, die die Hauptmethode zum Ausführen des Decompilers enthält.

    Beispiel:

    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
    

Wenn Sie keine IntelliJ-Produkte installiert haben, laden Sie sie entweder jetzt herunter (verfügbar unter jetbrains.com ) oder erstellen Sie einen eigenen Decompiler aus Quellen (verfügbar unter Github ).

17
naXa

Sie können eine davon verwenden (Sie können sie sowohl online verwenden als auch herunterladen, es gibt einige Informationen zu jedem von ihnen): http://www.javadecompilers.com/

Die IntelliJ IDEA verwendet Fernflower, kann aber nicht mit aktuellen Dingen umgehen - wie z. B. String/Enum-Switches, Generika (habe diese nicht persönlich getestet, nur darüber gelesen), ....... Ich habe gerade versucht cfr von der obigen Website und das Ergebnis war das gleiche wie mit dem eingebauten Decompiler (außer dem Enum-Schalter, den ich in meiner Klasse hatte).

3
Bluexin

Vor einiger Zeit habe ich JAD (Java Decompiler) verwendet, um dies zu erreichen. Ich glaube nicht, dass der IntelliJ-Decompiler beim Exportieren berücksichtigt wurde. Es ist eher ein Werkzeug, um Klassen durchzusehen, in denen keine Quellen verfügbar sind.

JAD steht noch zum Download zur Verfügung, aber ich glaube nicht, dass es von irgendjemand weiter gepflegt wird: http://varaneckas.com/jad/

Es gab zahlreiche Plugins dafür, nämlich Jadclipse (Sie haben es erraten, eine Möglichkeit, JAD in Eclipse zu verwenden - siehe zerlegte Klassen, in denen Code nicht verfügbar ist :)).

2
theadam

Der Decompiler von IntelliJ IDEA wurde nicht für diese Art von Verwendung erstellt. Es soll nur Programmierern helfen, den Bytecode der von ihnen entwickelten Java-Klassen zu untersuchen. Um viele Klassendateien zu dekompilieren, für die Sie keinen Quellcode haben, benötigen Sie einen anderen Java-Dekompilierer, der auf diesen Job spezialisiert ist und höchstwahrscheinlich eigenständig läuft. Wenn Sie googeln, sollten Sie eine Menge finden.

2
Mike Nakis

Ich verwende JD-GUI, um alle dekompilierten Java-Klassen in Java-Dateien zu extrahieren. 

1
tecdoc ukr net

Versuchen

https://github.com/fesh0r/fernflower

Laden Sie jar von herunter 

http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Befehl :

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

Legen Sie Ihre JAR-Datei im Ordner C:\binary ab, und source wird extrahiert und in einem Jar-Verzeichnis in C:\source verpackt.

Genießen!

1
Prasobh.K

Jemand hatte gute Antworten gegeben. Schritt für Schritt machte ich einen weiteren Hinweis. Zuerst öffne dein Atelier und suche. Der Dekomparator ist Fernflower.

 enter image description here

Zweitens finden wir es im Plugins-Verzeichnis.

/Applications/Android Studio.app/Contents/plugins/Java-decompiler/lib/Java-decompiler.jar

Drittens, führen Sie es aus, Sie erhalten die Verwendung

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\

Schließlich werden die Verschachtelungsoptionen des Studios für Decompiler gemäß IdeaDecompiler.kt wie folgt aufgelistet

-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")**

Ich kann die sutialbe-Option für die Sternchenelemente nicht finden.

Ich hoffe, diese Schritte werden die Frage klarstellen.

0
Victor Choy