なぜ CLASS を JAVA に変換するのですか?
.class ファイルにはソースコードではなく、コンパイルされたバイトコードが格納されています。デコンパイルは、元の .java ファイルが紛失または利用不能な場合、サードパーティのコードを監査する場合、またはコンパイルされたクラスの動作を理解する場合に役立ちます。デコンパイラは、元の Java ソースの近似値をリバースエンジニアリングします。
CLASS から JAVA への変換方法
JD-GUI OPEN-SOURCE
JD-GUI ウィンドウに .class ファイルをドラッグすると、再構築されたソースがすぐに表示されます。「File」 > 「Save All Sources」を使用して .java ファイルをエクスポートします。
CFR OPEN-SOURCE
java -jar cfr.jar MyClass.class --outputdir ./out を実行すると、出力フォルダにデコンパイルされた .java ファイルが生成されます。
IntelliJ IDEA Community FREE
.class ファイルをエディタで開くかドラッグします。IntelliJ は内蔵の Fernflower エンジンを使用して自動的にデコンパイルし、ソースを表示します。
これらの形式について
CLASS ファイルはコンパイルされた Java バイトコードであり、javac が .java ソースファイルから生成する出力です。実行するには Java (JDK) がインストールされている必要があり、«java MyClass» コマンドを使用します。コードの内容を確認するには、JD-GUI などのデコンパイラで開きます。CLASS…
.CLASS の詳細を開く →JAVAファイルは、Javaプログラミング言語で記述された人間が読める形式のソースコードです。IntelliJ IDEAやVS CodeなどのJava IDE、または任意のテキストエディタで開くことができます。実行するには、JDKをインストールし、«javac App.java»でコンパイルしてから«java App»で実行します。JDK 11以降では、«java…
.JAVA の詳細を開く →品質と注意点
- 元のソース内のコメントはコンパイラによって削除されるため、バイトコードから復元することはできません。
- デバッグ情報(
javac -g)付きでコンパイルされていない限り、元のローカル変数名は通常var1、var2などの生成された名前に置き換えられます。 - 難読化されたクラス(ProGuard や R8 で処理されたもの)をデコンパイルすると、ほとんど読めないコードになります。デコンパイラ自体は動作しますが、出力には難読化された名前が反映されます。
よくある質問
デコンパイルされた Java ソースは再コンパイル可能ですか?
どの Java バージョンでコンパイルされたクラスかを知るには?
.class ヘッダーのメジャーバージョンが Java のリリースを示します。例えば、52 = Java 8、61 = Java 17、65 = Java 21 です。Java ソースの復元ではなく、バイトコードを確認したいだけの場合は?
javap -c -p MyClass を使用すれば、別途ダウンロードすることなくバイトコードをニーモニックに逆アセンブルできます。