it-swarm.com.ru

Как декомпилировать в Java файлы интеллигентную идею

У IDEA есть отличная встроенная функция - декомпилятор. Он прекрасно работает. Я могу скопировать исходный код, но не могу найти опцию для извлечения всех декомпилированных классов Java в файлы Java.
В этом проекте много классов и пакетов Java, поэтому я буду долго копировать это вручную.
Кто-нибудь знает, как извлечь в исходные файлы Java . Спасибо

31
bkdaaqra

Чтобы использовать декомпилятор IntelliJ Java из командной строки для пакета jar, следуйте инструкциям, приведенным здесь: https://github.com/JetBrains/intellij-community/tree/master/plugins/Java-decompiler/engine

27
nicordesigns

По состоянию на август 2017 года и 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

(вы получите неправильную команду Usage , но она работает).

29
yan

Следуйте инструкциям для Плагин IntelliJ JD . Или посмотрите выдержку из инструкций ниже.

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

+ означает 1 или более раз
<source>: файл или каталог с файлами для декомпиляции. Каталоги рекурсивно сканируются. Допустимые расширения файлов: class, 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 вместо. файлы класса (это не взрывает флягу).


Обновление

Люди спрашивают меня: как я могу получить fernflower.jar?

Если у вас установлен какой-либо продукт IntelliJ, скорее всего, у вас уже есть декомпилятор Fernflower на вашем компьютере. IntelliJ IDEA поставляется с декомпилятором байт-кода Java plugin (в комплекте), который является современным расширением 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 - это класс, который содержит метод main для запуска декомпилятора.

    Пример:

    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 ).

17
naXa

Вы можете использовать один из них (вы можете использовать их онлайн или загрузить, есть информация о каждом из них): http://www.javadecompilers.com/

IntelliJ IDEA использует только fernflower, но он не может обрабатывать последние вещи - например, переключатели String/Enum, обобщенные типы (не проверял лично это, только читал об этом), ... I только что попробовал cfr с вышеуказанного сайта, и результат был таким же, как со встроенным декомпилятором (за исключением переключателя Enum, который был у меня в классе).

3
Bluexin

Некоторое время назад я использовал JAD (Java Decompiler) для достижения этой цели - я не думаю, что декомпилятор IntelliJ был включен с целью экспорта. Это скорее инструмент для просмотра классов, где источники недоступны.

JAD по-прежнему доступен для скачивания, но я не думаю, что кто-то его поддерживает: http://varaneckas.com/jad/

Для этого было множество плагинов, а именно Jadclipse (как вы уже догадались, способ использовать JAD в Eclipse - смотрите декомпилированные классы, где код недоступен :)).

2
theadam

Декомпилятор IntelliJ IDEA не был создан с учетом такого использования. Он предназначен только для того, чтобы помочь программистам взглянуть на байт-код классов Java, которые они разрабатывают. Для декомпиляции большого количества файлов классов, исходный код которых у вас отсутствует, вам потребуется другой декомпилятор Java, который специализирован для этой работы и, скорее всего, работает автономно. Если вы Google, вы должны найти кучу.

2
Mike Nakis

Я использую JD-GUI для извлечения всех декомпилированных классов Java в файлы Java. 

1
tecdoc ukr net

Пытаться

https://github.com/fesh0r/fernflower

Скачать банку с 

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

Команда:

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

Поместите файл JAR в папку C:\binary, и источник будет извлечен и упакован в Jar внутри C:\source.

Наслаждайтесь!

1
Prasobh.K

Кто-то дал хорошие ответы. Я сделал еще одну инструкцию, шаг за шагом .. Сначала откройте свою студию и выполните поиск. Вы можете найти декомпрессор Фернфлауэр.

 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