Dekompilovanie tried v Jave

1. Úvod

V tomto výučbe sa budeme venovať dekompilovaniu tried Java. Ak zdrojový kód nie je k dispozícii, dekompilovanie tried Java pomáha ladiť a porozumieť správaniu zdrojového kódu.

Pozrime sa na rôzne dostupné možnosti.

2. Dekompilácia v IDE

Pretože väčšina vývoja sa deje v integrovanom vývojovom prostredí (IDE), má zmysel, že dekompilácia by mala prebiehať aj v IDE.

Ďalšie informácie o IDE, s ktorými budeme pracovať, nájdete v našich článkoch o ladení v Eclipse a konfigurácii pre IntelliJ IDEA.

2.1. Zatmenie

Po prvé, v Eclipse potrebujeme doplnok, ako je napríklad Enhanced Class Decompiler (ECD). Tento doplnok používa päť rôznych rozkladačov. Môžeme si ho nainštalovať z Eclipse Marketplace a potom musíme Eclipse reštartovať.

Ďalej ECD vyžaduje malé množstvo nastavenia na priradenie súborov triedy k Prehliadaču dekompilátora triedy:

Musíme tiež spojiť „.trieda bez zdrojových “súborov:

Nakoniec môžeme dekompilátor použiť stlačením Ctrl + ľavé kliknutie na a trieda názov. V zátvorkách vidíme dekompilátor použitý na karte súbor.

V tomto príklade používame FernFlower:

2.2. IntelliJ IDEA

Na rozdiel od Eclipse IntelliJ IDEA poskytuje ako predvolený dekompilátor FernFlower.

Aby sme to mohli jednoducho použiť Ctrl + ľavé kliknutie na názve triedy a prezrite si kód:

Môžeme si tiež stiahnuť zdroj. Stiahnutie zdroja poskytne skutočný kód a komentáre.

Napríklad Komponent trieda anotácií z vyššie uvedeného screenshotu obsahuje Javadoc o používaní Komponent. Rozdiel si môžeme všimnúť:

Aj keď je dekompilácia veľmi užitočná, nie vždy poskytne úplný obraz. Celý zdrojový kód nám poskytuje úplný obraz.

3. Dekompilácia príkazového riadku

Pred doplnkami IDE sa na dekompilovanie tried používal príkazový riadok. Dekompilátory príkazového riadku môžu byť užitočné aj pri ladení bajtkódu Java na vzdialenom serveri, ktorý nie je prístupný pomocou IDE alebo GUI.

Napríklad môžeme dekompilovať s JDCommandLine pomocou jednoduchého príkazu jar:

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

Neopúšťajte parameter ./classes. Definuje výstupný adresár.

Po úspešnej dekompilácii môžeme získať prístup k zdrojovým súborom obsiahnutým vo výstupnom adresári. Teraz sú pripravené na prezeranie prostredníctvom textového editora, ako je Vim.

4. Záver

Pozreli sme sa na dekompiláciu v IDE IDE Eclipse a IntelliJ, ako aj na možnosť príkazového riadku, ak nie sú k dispozícii.

Pozreli sme sa tiež na rozdiel medzi prepojením zdrojového kódu a dekompiláciou.