Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/10/2012, 04:03
Avatar de javih
javih
 
Fecha de Ingreso: agosto-2011
Mensajes: 201
Antigüedad: 12 años, 8 meses
Puntos: 12
Recuperar el código de una aplicación perdida desde una ya instalada en el teléfono

Hola,

Perdí el código de un proyecto y menos mal que tenía la última versión instalada en una tablet y lo pude recuperar, pongo los pasos por si ha alguien le ocurre lo mismo. Es para un proyecto que no utilice ProGuard.

Herramientas

JAD - 'yum install jad' - Jad v1.5.8e.
dex2jar - http://code.google.com/p/dex2jar/ Ver. 0.0.9.9


Paso 1
Descargar la aplicación desde el dispositivo Android: adb pull /data/app/<nombre-del-package>

Paso 2
El anterior paso nos habrá creado un archivo comprimido en formato .zip, ahora creamos una carpeta para hacer las operaciones dentro de ella y copiamos ahí el archivo descargado.

Código:
# mkdir carpeta
# cd carpeta/
[carpeta/]# scp <ruta_archivo/nombre_archivo.zip> .
[carpeta/]# unzip nombre_archivo.zip

Paso 3
Ahora tenemos la estructura de un proyecto Android pero no está la carpeta /src/ con las clases, está todo en el archivo .dex. Para obtener los archivos .class utilizamos la herramienta dex2jar, la podemos descargar en la misma carpeta:

Código:
[carpeta/]#  unzip dex2jar-0.0.9.9.zip
[carpeta/]#  sh dex2jar-0.0.9.9/d2j-dex2jar.sh  classes.dex
Esto genera un archivo .jar nombrado así "classes-dex2jar.jar" para descomprimirlo podemos usar este comando:

Código:
unzip -d classes-dex2jar.jar.tmp classes-dex2jar.jar

Paso 4
Ahora ya solo queda decompilar las clases Java, lo haremos con JAD

(En mi caso tenía varias librerías y me daba algunas excepciones, lo que hice fue borrar todas las carpetas que no tuvieran que ver con el código que quería obtener y no dio más excepciones.)
Código:
[carpeta/]# cd classes-dex2jar.jar.tmp/
[carpeta/]# rm -rf android/ javax/ myjava/ org/
[carpeta/]# cd ..
[carpeta/]# jad -o -r -sjava -dsrc classes-dex2jar.jar.tmp/**/*.class
Y listo, ya tenemos los archivos .java en el directorio 'src'.

Saludos