Dekompilieren von Klassen in Java

1. Einleitung

In diesem Tutorial werden wir das Dekompilieren von Java-Klassen diskutieren. Wenn der Quellcode nicht verfügbar ist, hilft das Dekompilieren von Java-Klassen beim Debuggen und Verstehen des Quellcodeverhaltens.

Werfen wir einen Blick auf die verschiedenen verfügbaren Optionen.

2. Dekompilieren in IDE

Da der größte Teil der Entwicklung in einer integrierten Entwicklungsumgebung (IDE) erfolgt, ist es sinnvoll, die Dekompilierung auch in einer IDE durchzuführen.

Weitere Informationen zu den IDEs, mit denen wir arbeiten werden, finden Sie in unseren Artikeln zum Debuggen in Eclipse und zur Konfiguration für IntelliJ IDEA.

2.1. Finsternis

Erstens benötigen wir in Eclipse ein Plugin wie den Enhanced Class Decompiler (ECD). Dieses Plugin verwendet fünf verschiedene Dekompilierer. Wir können es vom Eclipse Marketplace installieren und müssen dann Eclipse neu starten.

Als Nächstes erfordert ECD eine kleine Menge an Setup, um Klassendateien mit dem Class Decompiler Viewer zu verknüpfen:

Außerdem müssen wir " .class without source" -Dateien zuordnen :

Schließlich können wir den Dekompiler verwenden, indem wir Strg + Linksklick auf einen Klassennamen drücken . Wir sehen den auf der Registerkarte "Datei" verwendeten Dekompiler in Klammern.

In diesem Beispiel verwenden wir FernFlower:

2.2. IntelliJ IDEE

Im Gegensatz zu Eclipse bietet IntelliJ IDEA standardmäßig den FernFlower-Dekompiler an .

Um es zu verwenden, drücken wir einfach Strg + Linksklick auf einen Klassennamen und zeigen den Code an:

Wir können auch die Quelle herunterladen. Durch Herunterladen der Quelle werden der eigentliche Code und die Kommentare bereitgestellt.

Zum Beispiel enthält die Annotationsklasse für Komponenten aus dem obigen Screenshot Javadoc zur Verwendung von Component . Wir können den Unterschied feststellen:

Die Dekompilierung ist zwar sehr hilfreich, liefert jedoch nicht immer ein vollständiges Bild . Der vollständige Quellcode gibt uns ein vollständiges Bild.

3. Befehlszeilendekompilierung

Vor IDE-Plugins wurde die Befehlszeile zum Dekompilieren von Klassen verwendet. Befehlszeilen-Dekompilierer können auch zum Debuggen von Java-Bytecode auf einem Remote-Server hilfreich sein, auf den mit einer IDE oder GUI nicht zugegriffen werden kann.

Zum Beispiel können wir mit JDCommandLine mit einem einfachen jar-Befehl dekompilieren:

java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes

Lassen Sie den Parameter ./classes nicht aus. Es definiert das Ausgabeverzeichnis.

Nach erfolgreicher Dekompilierung können wir auf die im Ausgabeverzeichnis enthaltenen Quelldateien zugreifen. Sie können jetzt über einen Texteditor wie Vim angezeigt werden.

4. Fazit

Wir haben uns die Dekompilierung in Eclipse- und IntelliJ IDEA-IDEs sowie eine Befehlszeilenoption angesehen, wenn diese nicht verfügbar sind.

Wir haben uns auch den Unterschied zwischen der Verknüpfung von Quellcode und der Dekompilierung angesehen.