miércoles, 18 de julio de 2012

Tres tips sobre: ejecución de aplicaciones en Android

Algunos tips que pueden aportar para el desarrollo de aplicaciones GeneXus para Android

Tip 1: ¿ejecutar vía Knowledge Base Navigator o la aplicación compilada?
Tip 2: ¿qué se ejecuta?
Tip 3: ¿en qué emulador o device se ejecuta?



Tip 1: ¿ejecutar vía Knowledge Base Navigator o la aplicación compilada?

Las aplicaciones Genexus se pueden ejecutar utilizando el KBN, que si bien puede tener diferencias con la aplicación "compilada" (IPA, JAD o APK), evita el proceso de compilación de la aplicación (Java u Objective-C) lo cual es costoso en tiempo. 


En definitiva para prototipar o en el comienzo del desarrollo puede servir, sobre el final del desarrollo, para ajustes "finos" o para funcionalidades especificas como las "notifications" es conveniente/necesario compilarla.


Más información sobre ejecución de aplicaciones en Android


Tip 2: ¿qué se ejecuta?

Cuando se ejecuta (f5), si no se tiene "startup object" seteado, entonces se levanta el browser con el Developer Menu y en el emulador/device se ejecuta el KBN mostrando todos los objetos "main" de la KB.

Si se tiene un "startup object" entonces se hace un "build" de ese objeto (y todo su arbol) lo cual significa especificar, generar, compilar y ejecutar solo ese "main" y sus dependencias. 
Esto significa que si ese objeto es Web, una vez compilado, se levanta el browser con ese objeto y si es SD se levanta el emulador/device, se copia al mismo el APK compilado y se ejecuta el mismo.

Hay algunas opciones en Tools/options/Build que pueden cambiar un poco este comportamiento, puede leer más aquí


Como ayuda a la ejecución, en el developer menu, se disponibilizan links con QRCodes para poder instalar la aplicación en el device leyendo los mismos o usando el KBN. Puede leer más en aqui

Es importante considerar que si se hacen cambios y se tiene un startup object, los objetos "no alcanzables" por ese "startup object" no se generarán, compilarán, etc. Por lo cual en algunos casos puede requerirse un "rebuild all" o boton derecho/build sobre un main para que el mismo se especifique/genere/compile.

En particular a mi me pasó que tenia un objeto Web como startup y al ejecutarlo aparecían los QR para instalar la APK en mi device. Sin embargo esos APK estaban "viejos" porque si bien los habia compilado en algun momento, el F5 no los re-compilaba por tener un startup object.

Tip 3: ¿en qué emulador/device se ejecuta?

Si no se tiene ningún device conectado (USB) al PC ni ningún emulador levantado, entonces se levanta  el emulador con un AVD (Android Virtual Device) llamado myGXAvd. Puede leer más aquí

Esto tiene dos corolarios:
1. Si se quiere probar en un device solo se requiere conectarlo al PC y la aplicación se copiará/ejecutará en el mismo.
2. Si se quieren probar diferentes emuladores o configuraciones de AVD (por ejemplo: Android 4.0, otra resolución, etc) solo es necesario levantar el emulador antes de ejecutar la aplicación desde GX. De este modo como ya está levantado se copia/ejecuta en ese y no se levanta la myGXAvd.

En mi experiencia es muchisimo mejor ejecutar en el device que en el emulador porque no consume recursos del PC y hace mucho más "ágil" el desarrollo. La ventaja del emulador es que permite emular diferentes dispositivos. 


Si bien los emuladores avanzan, por ejemplo las nuevas versiones usan la propia cámara del PC como cámara del emulador con lo cual se pueden leer QRcodes, sacar fotos, etc tienen limitaciones importantes como no poder instalar aplicaciones de los stores, etc.


En fin, cada uno verá su escenario pero durante el desarrallo la diferencia es notoria entre el device y el emulador.





5 comentarios:

  1. Como debo configurar las propiedades del generador, para tener acceso al servidor a traves del telefono conectado por USB??
    Es que me da el siguiente error: Error de red tratando de comunicarse con el servidor (Unable to resolve host: "user-pc"): No address associated with hostname).

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Usa la Ip de tu pc, ademas configura tu DBMS para que acepte conexiones remotas en caso de que sea SQL Server te dejo este link util (https://carlosariash.wordpress.com/2015/01/29/habilitar-conexiones-remotas-en-sql-server-2012/), idealmente usa Autentificacion Mixta y no te olvides de especificar el usuario y password, el puerto puedes dejarlo en blanco ya que por defecto toma el 1433, ojalá te haya servido mi aporte... Saludos

      Eliminar
    3. Hoa Manuel, pudiste resolver este error? Tengo el mismo error al querer grabar desde el telefono conectado por USB.

      Eliminar
  2. Muchas gracias Leonardo, pude solucionar mi problema, he usado MySQL, he probado también por WiFi, funciona perfectamente.
    La cuestion era la propiedad web root(la ip en vez de localhost) y la server name(del DataStores).
    Previamente configurado el DBMS.
    También tuve que desactivar el firewall, no se por qué. Pero así me funcionó.

    ResponderEliminar