web-dev-qa-db-fra.com

Comment décompiler en fichiers Java intellij idea

IDEA a une grande fonctionnalité intégrée - décompilateur. Cela fonctionne très bien. Je peux copier le code source, mais je ne trouve pas l’option permettant d’extraire toutes les classes Java décompilées dans des fichiers Java.
Ce projet a beaucoup de classes et de packages Java, je vais donc être trop long pour le copier manuellement.
Est-ce que quelqu'un sait comment extraire des fichiers source Java? THX

31
bkdaaqra

Depuis août 2017 et IntelliJ V2017.2, la réponse acceptée ne semble plus tout à fait exacte: il n'y a pas de fernflower.jar à utiliser. 

Le fichier jar s'appelle Java-decompiler.jar et n'inclut pas de manifeste principal ... Vous pouvez utiliser la commande suivante (à partir d'une installation Mac):

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

(vous obtiendrez le mauvais Usage commande, mais cela fonctionne).

29
yan

Suivez les instructions pour IntelliJ JD plugin . Ou consultez un extrait des instructions ci-dessous.

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

+ signifie 1 fois ou plus
<source>: fichier ou répertoire contenant les fichiers à décompiler. Les répertoires sont analysés de manière récursive. Les extensions de fichier autorisées sont class, Zip et jar.
<destination>: répertoire de destination

Exemple:

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

Sachez que si vous lui transmettez un fichier ".jar" pour la source, un autre fichier ".jar" sera créé dans la destination. Toutefois, dans le nouveau fichier ".jar", les fichiers seront au format .Java et. fichiers de classe (ça n'explose pas le pot).


METTRE À JOUR

Les gens me demandent: Comment puis-je obtenir le fichier fernflower.jar?

Si vous avez un produit IntelliJ installé, il y a de fortes chances que vous ayez déjà le décompilateur Fernflower sur votre ordinateur. IntelliJ IDEA est fourni avec Java Bytecode Decompiler plugin (fourni), qui est une extension moderne de Fernflower. 

  1. Localisez le fichier dans ${IntelliJ_INSTALL_DIR}\plugins\Java-decompiler\lib\Java-decompiler.jar (exemple: C:\Program Files\JetBrains\IntelliJ IDEA 2018\plugins\Java-decompiler\lib).
  2. Copiez-le quelque part et renommez fernflower.jar (facultatif).
  3. Ce fichier JAR n'est pas exécutable. Nous ne pouvons donc pas l'exécuter à l'aide de Java -jar. Cependant, quelque chose comme ceci fonctionne:

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

    org.jetbrains.Java.decompiler.main.decompiler.ConsoleDecompiler est la classe qui contient la méthode principale pour exécuter le décompilateur.

    Exemple:

    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
    

Si vous n'avez pas installé les produits IntelliJ, téléchargez-le maintenant (disponible sur jetbrains.com ) ou créez votre propre décompilateur à partir de sources (disponible sur Github ).

17
naXa

Vous pouvez utiliser l’un d’eux (vous pouvez les utiliser tous les deux en ligne ou les télécharger, il existe quelques informations sur chacun d’eux): http://www.javadecompilers.com/

Celui utilisé par IntelliJ IDEA est fernflower, mais il ne peut pas gérer les éléments récents - comme les commutateurs String/Enum, les génériques (n’a pas testé celui-ci personnellement, mais en a pris connaissance en connaissance de cause), je viens d’essayer cfr à partir du site Web ci-dessus et le résultat est le même que pour le décompilateur intégré (à l’exception du commutateur Enum que j’avais dans ma classe).

3
Bluexin

Il y a quelque temps, j'ai utilisé JAD (Java Decompiler) pour atteindre cet objectif. Je ne pense pas que le décompilateur d'IntelliJ ait été incorporé pour l'exportation. Il s’agit plus d’un outil permettant d’aider à parcourir des classes où les sources ne sont pas disponibles.

JAD est toujours disponible pour le téléchargement, mais je ne pense pas que plus personne le maintienne: http://varaneckas.com/jad/

Il y avait de nombreux plugins pour cela, notamment Jadclipse (vous l'avez deviné, une façon d'utiliser JAD dans Eclipse - voir les classes décompilées où le code n'est pas disponible :)).

2
theadam

Le décompilateur d'IntelliJ IDEA n'a pas été conçu pour ce type d'utilisation. Cela n'a pour but que d'aider les programmeurs à jeter un coup d'œil au bytecode des classes Java qu'ils développent. Pour décompiler de nombreux fichiers de classe pour lesquels vous n'avez pas de code source, vous aurez besoin d'un autre décompilateur Java, spécialisé pour ce travail, et fonctionnant généralement de manière autonome. Si vous google, vous devriez en trouver un tas.

2
Mike Nakis

J'utilise JD-GUI pour extraire toutes les classes Java décompilées dans des fichiers Java. 

1
tecdoc ukr net

Essayer

https://github.com/fesh0r/fernflower

Télécharger le bocal de 

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

Commande:

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

Placez votre fichier jar dans le dossier C:\binary et la source sera extraite et emballée dans un fichier jar à l’intérieur de C:\source.

Prendre plaisir!

1
Prasobh.K

Quelqu'un avait donné de bonnes réponses. J'ai fait une autre instruction étape par étape… .. D'abord, ouvrez votre studio et effectuez une recherche. Vous pouvez trouver le décompresseur est Fernflower.

 enter image description here

Deuxièmement, nous pouvons le trouver dans le répertoire plugins.

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

Troisièmement, lancez-le, vous obtiendrez l'usage

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\

Enfin, les options de nid du studio pour la liste de décompilateur sont les suivantes, selon 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")**

Je ne trouve pas l'option sutialbe pour les éléments astérisques.

J'espère que ces étapes permettront de clarifier la question.

0
Victor Choy