Декомпиляция классов в Java

1. Введение

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

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

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

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

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

2.1. Затмение

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

Затем ECD требует небольшой настройки, чтобы связать файлы классов с Class Decompiler Viewer:

Также нам нужно связать файлы « .class без источника»:

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

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

2.2. IntelliJ IDEA

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

Чтобы использовать его, мы просто Ctrl + щелчок левой кнопкой мыши по имени класса и просматриваем код:

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

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

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

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

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

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

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

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

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

4. Вывод

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

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