Ver Mensaje Individual
  #3  
Viejo 18/04/12, 00:08:19
Array

[xs_avatar]
raulgm raulgm no está en línea
Usuario muy activo
· Votos compra/venta: (14)
 
Fecha de registro: jul 2008
Localización: Badaloní
Mensajes: 5,033
Modelo de smartphone: Iphone 11
Tu operador: O2
2.- Decompilación y compilación de apk's

Compilar en ámbito informático es obtener el objeto ejecutable del código fuente tecleado en el proceso de desarrollo, por tanto al proceso de reingenieria que partiendo de un archivo apk obtiene como resultado el código fuente del apk lo llamamos decompilar.


El código fuente de android está escrito en un lenguaje prácticamente idéntico a java, teniendo en archivos classes.dex el objeto ejecutable de un apk. De este archivo .dex no podemos obtener los archivos .java pero el desarrollador jesusfreke creo una herramienta llamada smali/Baksmali que lo que permite es ensamblar/desensamblar (smali/baksmali es la traducción de ensamblar/desensamblar del islandés), ya que el resultado obtenido es una especie de lenguaje ensamblador, un apk.


Si quereis indagar más ->
http://code.google.com/p/smali
Además debeis saber que el código smali esta basado en el código jasmin -> http://jasmin.sourceforge.net/guide.html

Por tanto el proceso que hacemos para obtener el código de un apk no es realmente decompilar aunque comunmente todo el mundo lo denomine así.


Bien pues después de este desarrollo, otro desarrollador en este caso Brut.All construyó una herramienta llamada apktool que lo que hacia era automatizar los proceso de ensamblaje/desensamblaje (a partir de ahora compilado/decompilado) de un apk y que no solo permitia obtener el código fuente de un apk (smali) sino que también es capaz de obtener las imagenes y los recursos.


2.1 Deodexar/Odexar


Antes era un proceso complejo, ahora es más sencillo, solo os voy a decir eso a modo de introducción. Deodexar, es el hecho de incluir el fichero classes.dex dentro del apk. Originalmente las apks del sistema de las roms son odexados, es decir tienen el fichero apk, y ademas tienen un fichero con mismo nombre y extensión .odex que es el que contienen el classes.dex (y por tanto el código fuente) pues bien, la mayoria de customs roms y de cara a obtener la mayor posibilidad de personalización son deodexadas, es decir que incluyen en un único archivo todo. Porque digo la mayor posibilidad de personalización? pues simple, el apktool decompila el apk completo. Por tanto de un tirón has decompilado la parte de imagenes, recursos y además el código fuente.


Más información:
http://code.google.com/p/smali/wiki/DeodexInstructions

En el capítulo 4 veremos los sencillo que realizar deodexaciones con la cocina de dsixda, pero a partir de ahora daremos por sentado que todo lo que se explica es sobre una rom DEODEXADA


2.2 Apktool


Como os he dicho antes, esta es una herramienta para el decompilado de apk, y su sintaxis es la siguiente:

java -jar apktool.jar <opcion> <archivo>

Donde las posibles opciones son muchas pero destacaré 3:
* if -> carga los recursos del archivo especificado
* d -> decompila el archivo especificado
* b -> compila (contstruye, build) la carpeta especificada


En el apktool casí siempre encontrareis un apktool.bat para agilizar las llamadas y que funcione únicamente escribiendo, por ejemplo:

Apktool if framework-res.apk

Pero un momento! No os apresureis a descargarla de su pagina oficial en google code, pues os voy a ofrecer una solución más simple aún. A partir de apktool han ido apareciendo otras herramientas creando entornos algo más agrables que tener que teclear comandos desde la ventana ms-dos (Aunque para algunos casos veremos que seguirá siendo necesario) una de ellas es Apk Manager.

El problema desde la aparición de ICS es que no han hecho más que petar las herramientas de decompilación/compilación debido a cambios realizados en las classes por Google. Además Samsung ha modificado unos valores en sus binarios que tampoco permitian la decompilación correcta de los archivos, y desde entonces han ido apareciendo versiones más nuevas de apktool que decompilaban bien pero compilaban mal, y viceversa. Han existido mil tutos de cómo compilar y decompilar en ICS pero el compañero wanam en xda se ha currado un Apk manager con los archivos apktool.jar y aapt.exe parcheados para poder compilar y decompilar correctamente, así además nos podremos beneficiar a la hora de trabajar con el apk en un entorno más agradable (desde ms-dos, pero más agradable)

Lo podeis bajar de aquí

Bien, como funciona? Pues simplemente descomprimir, y poner en la carpeta place-apk-here-for-modding el apk que querais decompilar (ojo las dependencias y recursos) yo por si acaso pondria también siempre en esta carpeta el framework-res.apk de la rom que esteis usando ya que en caso necesario él solo coge sus dependencias




Pues nada esto es tan simple como pulsar opción 9 + intro, al cabo de unos segundos tendreis dentro de la carpeta Apk_Manager_ICS/projects una carpeta con el nombre de vuestro apk decompilado



Ahora ya podeis editar a vuestro antojo los xml’s, imágenes y smali que querais.

Una vez finalizado ya podeis compilar (opción 11 + intro). Tened en cuenta cuando editeis apk del sistema que hay que intentar mantener las firmas originales de los apks, pero no os preocupeis, el propio apk manager en el momento de la compilación os preguntará si es una aplicación del sistema (de las que van a /system)



En caso que respondais que si, os preguntará que si para mantener las firmas originales y preveer errores quereis copiar todos los archivos originales que no hayais modificado en el archivo apk resultante, en este caso también teneis que responder que si, lo que provocará que apk manager extraiga todas las imágenes y xml del apk original en la carpeta keep.




Una vez hecho esto el apk manager os dirá que borreis los archivos que hayais modificado de la carpeta keep y que además si habeis tocado codigo xml o smali, elimineis también el resources.arsc



Una vez echo esto obtendréis en la carpeta place-apk-for-modding un archivo con el mismo nombre que el que estabais editando pero con el prefijo unsigned, ya podeis coger el apk, llevarlo a otro sitio para renombrarlo, eliminar el unsigned y pasarlo al teléfono, ahora dependerá de vuestras modificaciones que este funcione o no



Esto es lo que concierne al decompilado de apks, ahora vamos con el decompilado de jar

... en desarrollo ....


__________________
Su publicidad aquí por solo 3.99€ al mes

Última edición por raulgm Día 18/04/12 a las 23:58:22.
Responder Con Cita
Los siguientes 19 usuarios han agradecido a raulgm su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]