1. 序章

このチュートリアルでは、Javaクラスの逆コンパイルについて説明します。 ソースコードが利用できない場合、Javaクラスを逆コンパイルすると、ソースコードの動作をデバッグおよび理解するのに役立ちます。

利用可能なさまざまなオプションを見てみましょう。

2. IDEでの逆コンパイル

ほとんどの開発は統合開発環境(IDE)で行われるため、逆コンパイルもIDEで行う必要があることは理にかなっています。

使用するIDEの詳細については、Eclipseでのデバッグ方法およびIntelliJIDEAの構成に関する記事を確認してください。

2.1. Eclipse

まず、Eclipseでは、 Enhanced Class Decompiler(ECD)などのプラグインが必要です。 このプラグインは5つの異なる逆コンパイラーを使用します。  Eclipse Marketplaceからインストールしてから、Eclipseを再起動する必要があります。

次に、ECDは、クラスファイルをClassDecompilerViewerに関連付けるために少量のセットアップを必要とします。

また、「.classソースなし」ファイルを関連付ける必要があります。

最後に、クラスの名前で Ctrl +左クリックを押すと、逆コンパイラーを使用できます。 括弧内の[ファイル]タブで使用されている逆コンパイラーが表示されます。

この例では、FernFlowerを使用しています。

2.2. IntelliJ IDEA

Eclipseとは対照的に、 IntelliJ IDEAは、デフォルトとしてFernFlowerデコンパイラーを提供します

これを使用するには、クラス名を Ctrl +左クリックして、コードを表示します。

また、ソースをダウンロードすることもできます。 ソースをダウンロードすると、実際のコードとコメントが提供されます。

たとえば、上のスクリーンショットの Component アノテーションクラスには、Componentの使用に関するJavadocが含まれています。 違いに気付くことができます:

逆コンパイルは非常に役立ちますが、必ずしも完全な画像が得られるとは限りません。 完全なソースコードは私たちに全体像を与えます。

3. コマンドライン逆コンパイル

IDEプラグインの前は、コマンドラインはクラスの逆コンパイルに使用されていました。 コマンドラインデコンパイラーは、IDEまたはGUIでアクセスできないリモートサーバー上のJavaバイトコードをデバッグする場合にも役立ちます。

たとえば、単純なjarコマンドを使用してJDCommandLineで逆コンパイルできます。

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

./classesパラメーターを省略しないでください。 出力ディレクトリを定義します。

逆コンパイルが成功すると、出力ディレクトリに含まれているソースファイルにアクセスできます。 これで、Vimのようなテキストエディタで表示する準備が整いました。

4. 結論

EclipseおよびIntelliJIDEAIDEでの逆コンパイルと、それらが使用できない場合のコマンドラインオプションについて説明しました。

また、ソースコードのリンクと逆コンパイルの違いについても調べました。