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 + левия бутон на мишката върху името на класа и виждаме кода:

Също така можем да изтеглим източника. Изтеглянето на източника ще предостави действителния код и коментари.
Например класът за анотиране на Компонент от горната екранна снимка включва Javadoc за използването на Компонент . Можем да забележим разликата:

Въпреки че декомпилацията е много полезна, тя не винаги дава пълна картина . Пълният изходен код ни дава пълна картина.
3. Декомпилиране на командния ред
Преди IDE плъгините командният ред се използва за декомпилиране на класове. Декомпилаторите на командния ред могат да бъдат полезни и за отстраняване на грешки в байт кода на Java на отдалечен сървър, който не е достъпен с IDE или GUI.
Например, можем да декомпилираме с JDCommandLine с помощта на проста команда jar:
java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes
Не оставяйте параметъра ./classes. Той определя изходната директория.
След успешна декомпилация можем да осъществим достъп до изходните файлове, съдържащи се в изходната директория. Вече са готови за преглед през текстов редактор като Vim.
4. Заключение
Разгледахме декомпилация в IDE на Eclipse и IntelliJ IDEA, както и опция за команден ред, когато те не са налични.
Също така разгледахме разликата между свързването на изходния код и декомпилацията.