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
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).
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).
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.
${IntelliJ_INSTALL_DIR}\plugins\Java-decompiler\lib\Java-decompiler.jar
(exemple: C:\Program Files\JetBrains\IntelliJ IDEA 2018\plugins\Java-decompiler\lib).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 ).
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).
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 :)).
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.
J'utilise JD-GUI pour extraire toutes les classes Java décompilées dans des fichiers Java.
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!
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.
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.