«1. Введение

В этом руководстве мы обсудим декомпиляцию классов Java. Когда исходный код недоступен, декомпиляция классов Java помогает отладить и понять поведение исходного кода.

Давайте посмотрим на различные доступные варианты.

2. Декомпиляция в среде IDE

Поскольку большая часть разработки выполняется в интегрированной среде разработки (IDE), декомпиляция также должна выполняться в среде IDE.

Для получения дополнительной информации об интегрированных средах разработки, с которыми мы будем работать, ознакомьтесь с нашими статьями об отладке в Eclipse и настройке IntelliJ IDEA.

2.1. Eclipse

Во-первых, в Eclipse нам нужен такой плагин, как Enhanced Class Decompiler (ECD). Этот плагин использует пять различных декомпиляторов. Мы можем установить его из Eclipse Marketplace, а затем нам нужно перезапустить Eclipse.

Далее, ECD требует небольшой настройки, чтобы связать файлы классов со средством просмотра декомпилятора классов:

Кроме того, нам нужно связать файлы «.class без исходного кода»:

Наконец, мы можем использовать декомпилятор, нажав Ctrl+щелчок левой кнопкой мыши на имени класса. Мы видим используемый декомпилятор на вкладке файла в скобках.

В этом примере мы используем FernFlower:

2.2. IntelliJ IDEA

В отличие от Eclipse, IntelliJ IDEA по умолчанию предоставляет декомпилятор FernFlower.

Чтобы использовать его, просто нажмите Ctrl+ЛКМ на имени класса и просмотрите код:

Также мы можем загрузить исходный код. Загрузка исходного кода предоставит фактический код и комментарии.

Например, класс аннотаций Component на приведенном выше снимке экрана включает Javadoc по использованию Component. Мы можем заметить разницу:

Хотя декомпиляция очень полезна, она не всегда дает полную картину. Полный исходный код дает нам полную картину.

3. Декомпиляция командной строки

До появления подключаемых модулей IDE для декомпиляции классов использовалась командная строка. Декомпиляторы командной строки также могут быть полезны для отладки байт-кода Java на удаленном сервере, который недоступен с помощью IDE или графического интерфейса.

Например, мы можем декомпилировать JDCommandLine с помощью простой команды jar:

java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes

Не упускайте параметр ./classes. Он определяет выходной каталог.

После успешной декомпиляции мы можем получить доступ к исходным файлам, содержащимся в выходном каталоге. Теперь они готовы для просмотра в текстовом редакторе, таком как Vim.

4. Заключение

Мы рассмотрели декомпиляцию в средах разработки Eclipse и IntelliJ IDEA, а также параметры командной строки, когда они недоступны.

Мы также рассмотрели разницу между связыванием исходного кода и декомпиляцией.