Un descompilador de Java vuelve a convertir un archivo .class
en un .java
archivo. Si bien el código descompilado no es perfecto (sin comentarios, a veces nombres ofuscados, etc.), puede ser útil durante las competencias de piratería, o para liberar sus datos bloqueados por software propietario, o para satisfacer la curiosidad.
Hay algunos descompiladores de código abierto, pero ninguno me satisface, ya que los que probé colapsaron en grandes proyectos de Java, o produjeron nombres de variables no óptimos, o usaron un formato de código que no se ajusta a las convenciones de código de Java. .
El descompilador debe ser capaz de comprender y mostrar claramente todos los conceptos recientes (por ejemplo, genéricos).
Usé CFR y la salida se ve bien. Entiende genéricos, el formato es limpio. No estoy seguro si nombrar (variable local) puede ser mejor. Aquí hay un ejemplo que muestra el problema de los nombres.
Ver salida de java.util.ArrayDequeue(
private void doubleCapacity() {
int n;
assert (this.head == this.tail);
int n2 = this.head;
int n3 = this.elements.length;
int n4 = n3 - n2;
if ((n = n3 << 1) < 0) {
throw new IllegalStateException("Sorry, deque too big");
}
Object[] arrobject = new Object[n];
System.arraycopy(this.elements, n2, arrobject, 0, n4);
System.arraycopy(this.elements, 0, arrobject, n4, n2);
this.elements = arrobject;
this.head = 0;
this.tail = n3;
}
Compara eso con el original
private void doubleCapacity() {
assert head == tail;
int p = head;
int n = elements.length;
int r = n - p; // number of elements to the right of p
int newCapacity = n << 1;
if (newCapacity < 0)
throw new IllegalStateException("Sorry, deque too big");
Object[] a = new Object[newCapacity];
System.arraycopy(elements, p, a, 0, r);
System.arraycopy(elements, 0, a, r, p);
elements = (E[])a;
head = 0;
tail = n;
}
Obtener un nombre basado en el contexto estará fuera del alcance de la mayoría de los descompiladores.
El autor tiene un enlace al proyecto de sus amigos, procyon, opensource . Tiene su propia página de comparación . De la pagina...
El descompilador Procyon maneja mejoras de lenguaje de Java 5 y posteriores que la mayoría de los otros descompiladores no lo hacen. También sobresale en áreas donde otros se quedan cortos. A Procyon en particular le va bien con:
Enum declarations Enum and String switch statements (only tested against javac 1.7 so far) Local classes (both anonymous and named) Annotations Java 8 Lambdas and method references (i.e., the :: operator).
Usé Java Decompiler de Emmanuel Dupuy . Para mí es un buen descompilador de archivos jar. Tengo el código fuente. Usé la versión GUI de Windows para descompilar el archivo jar.
Para mí fue una buena solución y es muy rápido.
jens piegsa
Nicolás Raúl
Jayán