Osztályok dekompilálása Java-ban
1. Bemutatkozás
Ebben az oktatóanyagban a Java osztályok dekompilálását tárgyaljuk. Ha a forráskód nem érhető el, a Java osztályok dekompilálása segít a hibakeresésben és a forráskód viselkedésének megértésében.
Vessünk egy pillantást a rendelkezésre álló különböző lehetőségekre.
2. Dekompilálás IDE-ben
Mivel a legtöbb fejlesztés integrált fejlesztői környezetben történik (IDE), van értelme, hogy a dekompilálásra egy IDE-ben is sor kerüljön.
Ha további információra kíváncsi az IDE-kről, amelyekkel együttműködni fogunk, olvassa el az Eclipse hibakeresését és az IntelliJ IDEA konfigurálását bemutató cikkünket.
2.1. Fogyatkozás
Először is, az Eclipse-ben szükségünk van egy beépülő modulra, mint például az Enhanced Class Decompiler (ECD). Ez a bővítmény öt különböző dekompilert használ. Telepíthetjük az Eclipse piactérről, majd újra kell indítanunk az Eclipse alkalmazást.
Ezután az ECD-nek kis mennyiségű beállításra van szüksége az osztályfájlok társításához a Class Decompiler Viewer programmal:

Emellett társítanunk kell a.osztály forrás nélkül ”fájlok:

Végül a visszafejtőt használhatjuk a megnyomásával Ctrl + bal egérgombbal rajta osztály név. A fájl fülön zárójelben látjuk a dekompilert.
Ebben a példában a FernFlower-t használjuk:

2.2. IntelliJ ÖTLET
Az Eclipse-vel ellentétben Az IntelliJ IDEA alapértelmezés szerint a FernFlower dekompilátort biztosítja.
Használatához egyszerűen Ctrl + bal egérgombbal az osztály nevén, és tekintse meg a kódot:

Ezenkívül letölthetjük a forrást. A forrás letöltésével megkapja a tényleges kódot és megjegyzéseket.
Például a Összetevő a fenti képernyőkép kommentálási osztálya tartalmaz Javadoc-ot a Összetevő. Észrevehetjük a különbséget:

Bár a dekompilálás nagyon hasznos, nem mindig ad teljes képet. A teljes forráskód teljes képet ad.
3. Parancssor dekompilálása
Az IDE bővítmények előtt a parancssort használták az osztályok dekompilálására. A parancssori dekompilátorok szintén hasznosak lehetnek a Java bytecode hibakeresésében egy távoli kiszolgálón, amely nem érhető el IDE vagy GUI segítségével.
Például egy egyszerű jar paranccsal dekompilálhatunk a JDCommandLine segítségével:
java -jar JDCommandLine.jar $ {TARGET_JAR_NAME} .jar ./classes
Ne hagyja ki a ./classes paramétert. Meghatározza a kimeneti könyvtárat.
Sikeres dekompilálás után hozzáférhetünk a kimeneti könyvtárban található forrásfájlokhoz. Most már készen állnak a megtekintésre egy olyan szövegszerkesztőn keresztül, mint a Vim.
4. Következtetés
Megvizsgáltuk az Eclipse és az IntelliJ IDEA IDE dekompilálását, valamint egy parancssori opciót, ha ezek nem állnak rendelkezésre.
Megvizsgáltuk a különbséget a forráskód összekapcsolása és a dekompilálás között is.