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 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. Висновок
Ми розглянули декомпіляцію в IDE Eclipse та IntelliJ IDEA, а також параметр командного рядка, коли вони недоступні.
Ми також розглянули різницю між зв'язуванням вихідного коду та декомпіляцією.