Android Cuerdas turno de números aleatorios después de la ofuscación Proguard
Pregunta
Me acaba de utilizar la nueva herramienta ProGuard en Eclipse a la ofuscación mi solicitud. El I descompilado usando dex2Jar y JD-GUI para inspeccionar lo que pasó.
Me di cuenta de que todo, desde la clase I se ha convertido en un número aleatorio como la siguiente.
new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt);
2130903058 era un archivo de diseño. Cuerdas de un matrices reciben el mismo tratamiento.
No hay clase I en el código decompilados, donde ha ido? ¿Dónde están las referencias a las cadenas originales?
Solución
Todas las referencias son números enteros. Si nos fijamos en R.string
, se dará cuenta de todos los miembros son int
s . Esto se debe a que son punteros para las cadenas reales. Por ejemplo, android.R.string.cancel
está siempre 17039360
, lo que apunta a la cadena Cancel
. Lo que hace es que ProGuard reemplaza estas referencias con los números reales que representan, por lo que si se utiliza android.R.string.cancel
, lo reemplazará con 17039360
.
Editar:. No hay clase I, ya que no se necesita más (todas las referencias a él han sido sustituidos)