Перейти к основному содержимому

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

· 2 мин. чтения

1. Введение

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

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

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

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

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

2.1. Затмение

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

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

./2b180082ee6bc3cf75b05088d1911be7.jpg

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

./9be76b35b54962f0655e67ef4a64a28d.jpg

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

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

./ed0b29ba2bc9dc853ad65beee6edaac7.jpg

2.2. IntelliJ ИДЕЯ

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

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

./47efdcbc6e9616b68a3374290a2351b9.png

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

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

./b108fd47c5318eb32ed390e3b2810b17.jpg

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

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

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

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

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

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

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

4. Вывод

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

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