martes, febrero 21, 2012

Ingeniería inversa en Android

 Todo desarrollador en alguna oportunidad ha tenido la necesidad o la curiosidad de realizar la "Ingeniería Inversa" a un programa para verle las tripas. 

En mi caso lo he realizado alguna vez para investigar el código de algo que me llamaba la atención, en particular lo hice muchas veces con la gxclassr.zip de GeneXus hasta que publicaron el código fuente. 

En la actualidad me encuentro investigando Android por lo que me puse a buscar herramientas que a partir de un ".apk"  me permitieran ver el código fuente. En internet encontré un documento PDF que explica muy claramente como realizar Ingeniería inversa básica en Android, de todas formas hago un resumen para los que no les gusta leer mucho.

En otro post explique que son los APK por lo que voy directo al grano:

a) Descomprimir el APK con cualquier herramienta que tengan a mano, en mi caso winrar
b) Tomar el classes.dex (Dalvik Executable) y usar el dex2jar para convertirlo a jar
c) Tomar el JAR y pasarlo por el JD-GUI

Siguiendo estos pasos podemos tener el código fuente de un apk, siempre nos podemos topar con algún código "ofuscado" o protegido con proGuard pero siempre existe forma por lo que usa google y tendrás resultados.

lunes, febrero 20, 2012

Soap 1.1 y Soap 1.2 en el mismo WSDL

Hace unos días tuve que participar en un proyecto con algo muy pequeño que básicamente consiste en consumir un servicio web con varios métodos. En principio esto no debería traer ningún problema ya que simplemente desde GeneXus ejecuto el WSDL Inspector y listo. 

El problema estaba a la hora de compilar ya que me daba error de métodos duplicados, por ej. Existía un método llamado "TienePermiso" que a la hora de compilar me decía que ya estaba definido.


Compiling plogin.java
.\Sdtuy_Gup_wsdl__wsGup.java:182: tienepermiso(SdtTienePermiso_Param) is already defined in Sdtuy_Gup_wsdl__wsGup
   public SdtTienePermiso_Result tienepermiso( SdtTienePermiso_Param gxTp_TienePermiso_Param )
                                 ^
1 error
NMAKE : fatal error U1077: 'C:\SoftGXJava\java16\bin\javac.exe' : return code '0x1'
Stop.
 
Realmente estuve un par de días que no encontraba la causa por lo que ya estaba desarrollando el consumo de estos servicios a mano hasta que el proveedor del servicio me comento que el wsdl tenía la definición en Soap 1.1 y Soap1.2. Mi sorpresa era que no tenía idea que se podía hacer esto y menos que el WSDL Inspector lo iba a consumir sin problemas pero que me iba a dar error recién en la compilación.

Después de luchar un rato solo me quedaba modificar el archivo ARI y el XML que se genera cuando se usa el WSDL Inspector, en mi caso uso GeneXus 9.0 por lo que los archivos se encontraban bajo la carpeta kbdata.

En síntesis borre del archivo lo que estaba duplicado, regenere y  la aplicación quedo funcionando sin problemas. No tengo claro si en GeneXus Ev. 1 pasa esto pero lo dejo documentado por si alguien sigue trabajando con GeneXus 9.0.








domingo, febrero 19, 2012

Android Para Principiantes

La idea es compartir con la comunidad los pasos que tuve que seguir a la hora de empezar a investigar Android y que a pesar de que existe mucha documentación siempre es bueno aportar información en español para que otros puedan aprovecharla como lo hago yo a diario.


Preparando el ambiente de desarrollo para Android

Hola Mundo en Android

Errores varios trabajando con Android

sábado, febrero 18, 2012

Instalar ADT para Eclipse

A la hora de desarrollar para Android existe un plugin para Eclipse llamado ADT (Android Developer Tools), esto nos provee una herramienta para que podamos trabajar desde Eclipse con Android y hacerlo de forma rápida y sencilla.

Para instalar el ADT solo tengo que abrir mi Eclipse e ir al menú Help>Install New Software...>, en la ventana presionar el botón ADD y agregar la fuente de instalación. Eclipse nos abrirá una ventana para agregar un nuevo repositorio:


En Name podemos poner ADT y en Location: https://dl-ssl.google.com/android/eclipse/

Esto nos quedara como repositorio como muestra la siguiente imágen:


Después de configurar el nuevo repositorio solo tengo que seleccionar las opciones disponibles y presionar el botón "Finish", con esto me queda instalado el plugin ADT y solo me queda comenzar a trabajar con Android.


Preparando el ambiente de desarrollo para Android

En esta oportunidad quiero describir los pasos resumidos que se deben seguir para preparar nuestro ambiente de desarrollo a la hora de trabajar con Android utilizando Eclipse.

Lo primero que hay que hacer a la hora de preparar nuestro ambiente es empaparnos en el tema entrando en la documentación oficial que expone google para los desarrolladores Android, el sitio se llama Android Developers. En este sitio se encuentra toda la información necesaria para poder utilizar esta plataforma, pero si quieren ahorrar tiempo y buscan algo mas resumido pueden seguir los siguientes pasos:

  1. Descargar la última versión de Eclipse llamada INDIGO
  2. Descargar el SDK de Android
  3. Configurar el ADT para Eclipse o consultar la guía paso a paso
 Al finalizar estos pasos tengo pronto mi ambiente para poder desarrollar el clásico Hola Mundo para android.

viernes, febrero 17, 2012

Errores varios Trabajando con Android

La idea es documentar los problemas que voy encontrando a la hora de retomar mi trabajo con Android, los errores que se pueden encontrar son de ambiente o por inexperiencia.

La mayoría ya se encuentran documentados en la web pero siempre es bueno hacer un pequeño aporte, todo lo que encuentre lo voy a ir poniendo en esta nota.

 ERROR: Unknown command 'crunch'... Este error me daba a la hora de ejecutar una aplicación, el error se desplegaba justo antes de ejecutar el Emulador.

Lo primero que me puse a pensar fue que cosas podían haber cambiado desde la última prueba que había realizado en Android, por suerte había cambiado desde la versión de Eclipse hasta la versión del ADT por lo que me imagine que tenía que ver con incompatibilidad entre versiones o algo por el estilo. 

La solución fue abrir el SDK Manager y actualizar las Tools (Android SDK Tools y Android SDK Platform-tools) , fue lo primero que hice ya que en la imagen se puede visualizar que existía una actualización para realizar.





 ERROR: Debug Certificate expired on dd/mm/yy

Un error común es que el certificado que se utiliza para android expire, tenemos dos formas de solucionarlo:
a) Borrar el archivo debug del directorio ".android"



b) Utilizar la herramienta keytool para generar el certificado nuevamente con una fecha mayor a la que le pone Android por defecto.



Hola Mundo en Android

Siempre que comenzamos a investigar un lenguaje de programación siempre comenzamos con el clásico "Hola Mundo" y como no podía ser de otra manera vamos a explicar paso a paso como hacerlo con Android utilizando Eclipse como herramienta de desarrollo.

a) Crear un nuevo Proyecto para Android




b)Poner como nombre del proyecto HolaMundo




c) Seleccionar para que versión se piensa desarrollar



d) Ingresar los datos de la aplicación



Una vez creado el proyecto Eclipse me presenta el contenido del proyecto, lo que hago es ir a la Actividad llamada HolaMundoActivity para modificarla y agregar la leyenda "Hola Mundo".



La modificación que voy a realizar es agregar un TextView, para que el código quede de la siguiente manera:


La imágen muestra la pequeña modificación que hice para desplegar el Hola Mundo. Para ejecutar nuestra aplicación tenemos que ejecutar el emulador que nos mostrara el siguiente resultado:


domingo, noviembre 21, 2010

Blogs y sitios dedicados a Android en Uruguay

La gran cantidad de comentarios sobre Android y la fuerza que se le está dando desde la comunidad GeneXus me hizo investigar si realmente Android tiene fuerza en Uruguay.

Lo que hice fue buscar en google “Android Uruguay” y realmente encontré varios blogs que hacen referencia a Android fuera de la comunidad genexus, pero lo que realmente me llamo la atención y me dio una grata sorpresa fue que encontré un blog y un sitio web dedicados exclusivamente a Android.

Los recursos son los siguientes:
http://www.androiduy.com
http://zona-android-uruguay.blogspot.com

Estos sitios se encargan de difundir Android y tienen varios post interesantes sobre diversos temas de Android.

Lo otro que me llamo la atención en los resultados que me tiro google fue que en buscojobs había un pedido de Desarrollador Android.

No se si estas cosas se pueden tomar como un indicador pero realmente antes de hacer esta búsqueda pensé que en Uruguay se le daba menos bola al tema de Android.

Estas cosas ayudan a motivarnos a decidirnos por Android ya que hasta hace un par de años la única motivación existente es que pertenecía a Google.

viernes, noviembre 19, 2010

Google Apps en cyanogenmod 6

Hace un par de días actualice la versión de mi HTC Magic a Android 2.2 utilizando la rom de cyanogen, el problema estaba en que la rom viene sin las aplicaciones de google por un tema de licenciamiento.

Si no entendí mal google le mando una carta en donde le pedía que no distribuyeran mas dentro de su rom las aplicaciones de google ya que podrían llegar a violar algunas licencias. Por este motivo la gente de cyanogenmod lo que hizo fue crear la rom sin las aplicaciones de google y por otro lado en el sitio deja un zip que contiene todas las aplicaciones de google.

En síntesis si utilizan alguna rom de cyanogenmod superior a la 6.0X deben bajarse las aplicaciones que correspondan, hay que tener cuidado ya que depende del móvil el paquete a instalar.

En mi caso tuve que bajar el archivo gapps-mdpi-tiny-20101020-signed.zip y lo instale en modo recovery desde la opción “Flash zip from sdcard” obviamente que antes había copiado el zip en la sdcard.

La información completa la pueden obtener del siguiente link: http://wiki.cyanogenmod.com/index.php?title=Latest_Version