Decompilarea cursurilor în Java

1. Introducere

În acest tutorial, vom discuta despre descompilarea claselor Java. Când codul sursă nu este disponibil, decompilarea claselor Java ajută la depanarea și înțelegerea comportamentului codului sursă.

Să aruncăm o privire la diferitele opțiuni disponibile.

2. Decompilarea în IDE

Deoarece majoritatea dezvoltării se realizează într-un mediu de dezvoltare integrat (IDE), este logic că decompilarea ar trebui să aibă loc și într-un IDE.

Pentru mai multe informații despre IDE-urile cu care vom lucra, consultați articolele noastre despre cum să depanați în Eclipse și configurarea pentru IntelliJ IDEA.

2.1. Eclipsă

În primul rând, în Eclipse avem nevoie de un plugin precum Enhanced Class Decompiler (ECD). Acest plugin folosește cinci decompilatoare diferite. Îl putem instala de pe Eclipse Marketplace și apoi trebuie să repornim Eclipse.

În continuare, ECD necesită o cantitate mică de configurare pentru a asocia fișierele de clasă cu Class Decompiler Viewer:

De asemenea, trebuie să asociem fișiere „ .class fără sursă”:

În cele din urmă, putem folosi decompilatorul apăsând Ctrl + clic stânga pe numele clasei . Vom vedea decompilatorul folosit în fila fișier între paranteze.

În acest exemplu, folosim FernFlower:

2.2. IDEA IntelliJ

Spre deosebire de Eclipse, IntelliJ IDEA oferă decompilatorul FernFlower ca implicit .

Pentru a-l utiliza, pur și simplu Ctrl + Faceți clic stânga pe numele clasei și vizualizăm codul:

De asemenea, putem descărca sursa. Descărcarea sursei va furniza codul și comentariile reale.

De exemplu, clasa de adnotare Component din captura de ecran de mai sus include Javadoc despre utilizarea Componentului . Putem observa diferența:

În timp ce decompilarea este foarte utilă, nu oferă întotdeauna o imagine completă . Codul sursă complet ne oferă o imagine completă.

3. Decompilarea liniei de comandă

Înainte de pluginurile IDE, linia de comandă a fost utilizată pentru decompilarea claselor. Decompilatoarele din linia de comandă pot fi utile și pentru depanarea codului bytec Java pe un server la distanță care nu este accesibil cu un IDE sau GUI.

De exemplu, putem decompila cu JDCommandLine folosind o comandă simplă jar:

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

Nu lăsați parametrul ./classes. Acesta definește directorul de ieșire.

După o decompilare reușită, putem accesa fișierele sursă conținute în directorul de ieșire. Acum sunt gata să fie vizualizate printr-un editor de text precum Vim.

4. Concluzie

Am analizat decompilarea în Eclipse și IntelliJ IDEA IDE, precum și o opțiune de linie de comandă atunci când acestea nu sunt disponibile.

De asemenea, am analizat diferența dintre legarea codului sursă și decompilare.