1. Введение
В этом руководстве мы обсудим декомпиляцию классов Java. Когда исходный код недоступен, декомпиляция классов Java помогает отладить и понять поведение исходного кода.
Давайте рассмотрим различные доступные варианты.
2. Декомпиляция в IDE
Поскольку большая часть разработки выполняется в интегрированной среде разработки (IDE), декомпиляция также должна выполняться в IDE.
Для получения дополнительной информации об IDE, с которыми мы будем работать, ознакомьтесь с нашими статьями об отладке в Eclipse и настройке для IntelliJ IDEA .
2.1. Затмение
Во-первых, в Eclipse нам нужен такой плагин, как Enhanced Class Decompiler (ECD) . Этот плагин использует пять различных декомпиляторов. Мы можем установить его из Eclipse Marketplace, а затем нам нужно перезапустить Eclipse.
Далее, ECD требует небольшой настройки, чтобы связать файлы классов со средством просмотра декомпилятора классов:
Также нам нужно связать файлы « .class
без исходников»:
Наконец, мы можем использовать декомпилятор, нажав Ctrl+щелчок левой кнопкой мыши
на имени класса
. Мы видим используемый декомпилятор на вкладке файла в скобках.
В этом примере мы используем FernFlower:
2.2. IntelliJ ИДЕЯ
В отличие от 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, а также параметры командной строки, когда они недоступны.
Мы также рассмотрели разницу между компоновкой исходного кода и декомпиляцией.