web-dev-qa-db-ja.com

Javaファイルにデコンパイルする方法intellij idea

IDEAには優れた組み込み機能があります-デコンパイラ。ソースコードをコピーできますが、すべての逆コンパイルされたJavaクラスをJavaファイルに抽出するオプションが見つかりません。
このプロジェクトには多くのJavaクラスとパッケージがあるため、これを手動でコピーするのが待ち遠しいです。
誰でもJavaソースファイルに抽出する方法を知っていますか。どうも

44
user4541912

JarパッケージのコマンドラインからIntelliJ Javaデコンパイラーを使用するには、次の指示に従ってください。 https://github.com/JetBrains/intellij-community/tree/master/plugins/ Java-decompiler/engine

35
nicordesigns

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

(間違った使用法コマンドが表示されますが、動作します)。

40
yan

IntelliJ JDプラグイン の指示に従います。または、以下の手順からの抜粋をご覧ください。

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

+は1回以上を意味します
<source>:逆コンパイルするファイルがあるファイルまたはディレクトリ。ディレクトリは再帰的にスキャンされます。許可されるファイル拡張子は、クラス、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 Bytecode Decompiler プラグイン(バンドル)が付属しており、これはFernflowerの最新の拡張機能です。

  1. ${IntelliJ_INSTALL_DIR}\plugins\Java-decompiler\lib\Java-decompiler.jar(例:C:\ Program Files\JetBrains\IntelliJ IDEA 2018\plugins\Java-decompiler\lib)でファイルを見つけます。
  2. どこかにコピーして、fernflower.jarに名前を変更します(オプション)。
  3. この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 で入手可能)。

22
naXa

これらのいずれかを使用できます(両方ともオンラインで使用することもダウンロードすることもできます。それぞれについての情報があります): http://www.javadecompilers.com/

IntelliJ IDEAが使用するのはfernflowerですが、最近のことは処理できません-String/Enumスイッチ、ジェネリック(これを個人的にテストしたのではなく、読んでみてください)、...上記のウェブサイトからcfrを試してみましたが、結果は組み込みの逆コンパイラと同じでした(クラスに含まれていたEnumスイッチを除く)。

3
Bluexin

少し前に、私はこれを達成するためにJAD(Java Decompiler)を使用しました-IntelliJのデコンパイラーはエクスポートを念頭に置いて組み込まれたとは思いません。これは、ソースが利用できないクラスを調べるのに役立つツールです。

JADは引き続きダウンロードできますが、もう誰も保守していないと思います。 http://varaneckas.com/jad/

そのためのプラグイン、つまりJadclipseが多数ありました(ご想像のとおり、EclipseでJADを使用する方法です。コードが利用できない逆コンパイルされたクラスを参照してください:))。

2
theadam

IntelliJ IDEAの逆コンパイラは、このような使用法を念頭に置いて構築されていません。プログラマーが開発中のJavaクラスのバイトコードを覗くのを助けることのみを目的としています。ソースコードがない多くのクラスファイルを逆コンパイルするには、このジョブ専用のJavaデコンパイラーが必要です。ほとんどの場合、スタンドアロンで実行されます。あなたがグーグルなら、あなたはたくさんを見つけるべきです。

2
Mike Nakis

JD-GUIを使用して、すべての逆コンパイルされたJavaクラスをJavaファイルに抽出します。

1
tecdoc ukr net

試してみる

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にパックされます。

楽しい!

1

誰かが良い答えをした。ステップごとに別の指示の手がかりを作りました。まず、スタジオを開いて検索します。分解機はFernflowerであることがわかります。

enter image description here

次に、プラグインディレクトリにあります。

/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\

最後に、IdeaDecompiler.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オプションが見つかりません。

これらの手順が質問を明確にすることを願っています。

0
Victor Choy