Posts by: sergi

Seguimos con Maven. Plantillas.

¡Hola!

Yo sigo erre que erre con Maven. El siguiente paso ha sido crearme una plantilla que contenga la info común en los proyectos Android. Esto es, por supuesto, aplicable a cualquier tipo de proyecto. Los pasos son:

Crear un proyecto nuevo para el POM

En Eclipse creamos un proyecto nuevo de tipo Maven, Maven Project y hacemos clic en siguiente.

Seleccionamos Create a simple project (skip archetype selection) y next.

Introducimos la información del pom. En este caso hablamos de como nos referiremos a nuestra plantilla. Por ejemplo:

  • GroupId: com.sergiandreplace.template
  • ArtifactId: android
  • Version: 0.0.1-SNAPSHOT
  • Packaging: pom <– Aquí está la clave del asunto!!!
  • Name: Android POM template

Por último hacemos clic en Finish y nos creará el proyecto.

Crear el POM base

En este caso, el pom es parecido al que creamos en el último post sobre maven, pero con algunos cambios.

Y con esto tendriamos la plantilla. Básicamente, he extraido los valores que cambian de proyecto en proyecto a variables, y además he creado una sección con valores por defecto.

Para publicarlo en nuestro repo local, tan sólo debemos ejecutar un mvn install y el sólo nos lo añadirá.

Ya tenemos la plantilla lista.

Heredar la plantilla

Ahora en nuestro proyecto Android con maven (recordad el mavenize project) tan sólo necesitamos tener el siguiente pom:

Como veis, aquí le indico, por un lado, de que proyecto hereda la configuración, y por otro lado que valores debe utilizar para las variables. Si  mirais el POM efectivo, vereis que contiene toda la configuración correctamente establecida.

Consideraciones finales

Recordad que si trabajais en equipo, es necesario que todo el mundo tenga las mismas plantillas o la podeis liar muy parda. En ese caso, os recomiendo tener algún repositorio de Maven (p.ej.: Nexus) y tener las plantillas publicadas en el servidor.

El uso de plantillas hace más sencillo el aplicar nuevas configuraciones y opciones a los proyectos existentes, y nos permite configurar los proyectos nuevos de forma más rápida.

Ale, gozadlo.

Ejemplos y comentarios del Barcelona Startup Weekend Bootcamp

El pasado sábado tuve la suerte de poder impartir el Bootcamp del Barcelona Startup Wekeend. Durante esta sesión, vimos una introducción al servicio de GAE para montar un servidor rest y como utilizar la libreria AndroidAnnotations para hacer aplicaciones Android de forma rápida.

Por razones que no acababa de entender, no conseguimos hacer funcionar la libreria AndroidAnnotations como cliente rest, y como sospechaba que era un tema de librerias, prometí mirarlo con calma y postear un proyecto que funcionase.

Después de mucho investigar he encontrado la causa de los problemas y he podido solucionarlos.

Usar Maven con Android

La idea de este artículo es presentar los pasos necesarios para configurar Eclipse para utilizarlo con Maven en proyectos Android. Estos pasos son:

Descargar herramientas

Descargamos Eclipse si no lo tuviesemos (en mi caso utilizo Eclipse Classic 3.7.2) desde http://www.eclipse.org/downloads/.

Configuramos el sdk de Android i el ADT (http://android.com)

Descargamos Maven desde http://maven.apache.org/download.html (para el ejemplo usamos 3.0.4)

Asumimos que instalamos las herramientas en D:eclipse, D:android-sdk-windows y en D:maven si tu ruta es diferente, cambialo donde toque.

Instalar plugin de Eclipse para Maven (m2Eclipse)

Desde http://www.eclipse.org/m2e/download/ podemos ver las diferentes rutas de descarga.

En nuestro caso, en Eclipse, vamos a Help, Install New Software… e introducimos http://download.eclipse.org/technology/m2e/releases como url.

Configurar el plugin de Maven

En mi caso configuro siempre lo siguiente:

En la venta de preferencias (Window, Preferences) seleccionamos MavenInstallations. Allí podemos añadir el ejecutable de Maven. Así nos aseguramos que el plugin y la linea de comandos utilizan la misma versión.

Instalar el conector de Android para Maven

Ahora hay que decirle al plugin que “entienda” los proyectos de Android. Para eso tenemos que instalar el conector de Android. Dentro de la pantalla de preferencias, en MavenDiscovery, hacemos clic en Open Catalog. Se nos abrirá el listado de conectores.

Buscamos ‘Maven Integration for Android Development Tools’ (escribe Android y acabarás antes) y lo instalamos.

Ya estamos listos para trabajar con Maven para Android.

Configurar un proyecto para usar Maven

Nunca he conseguido que creando un proyecto nuevo de Maven directamente funcione. Lo que hago es crear un proyecto normal, y luego, podemos hacer clic con el botón derecho sobre la raiz del proyecto, y seleccionar Configure, Convert to Maven Project.

Así se nos transformará en un proyecto de Maven, pero nos toca configurar el POM. Básicamente, utilizo la siguiente plantilla:

Y aquí algunos de los valores a configurar:

  • GROUP_ID_DEL_PROYECTO: la ruta canónica del paquete (p.ej.: com.sergiandreplace)
  • NOMBRE_DEL_PROYECTO: el identificador del paquete que completa la ruta canónica.
  • VERSION_DE_ANDROID: la versión de Android que utilizamos en la app. Ojo que no valen todas, sólo aquellas que estén en el repositorio. Podemos consultar la lista aquí: http://mvnrepository.com/artifact/com.google.android/android
  • NOMBRE_FINAL_APK: pues eso, el nombre que tendrá el fichero final cuando compilemos.
  • VERSION_DE_API: versión de api utilizada para compilar en formato numérico. P.ej: 7 para 2.1

Si ahora ejecutamos desde la linea de comandos en la carpeta del proyecto

Se nos instalaran las dependencias necesarias
Ahora si ejecutamos

Se nos compilará e instalará en los moviles disponibles desde adt.

También podemos hacer un compilado/ejecución de toda la vida en Eclipse.

Quedan cosas por configurar (donde hacer deploy, certificados, etc) pero esto ya depende de cada proyecto, aquí sólo he mostrado lo mínimo para empezar.

Jugando con Unity

Llevo unos dias jugueteando con Unity (no, el infecto escritorio de Ubuntu no, me refiero a la herramienta de creación de aplicaciones 3d).

La verdad, es indecentemente fácil hacer cosas con ella. Subo un ejemplillo para que veais que se hace en un par de horitas con algo de scripting.

Appunta: demo disponible!

Hola

He subido una demo de funcionalidades de Appunta al Market.

Podéis encontrarla en el Market de Android

Si alguien se la baja y me comenta si funciona o no funciona, si da problemas o no va bien, lo agradecería enormemente (cervezas gratis para el mejor bughunter!!!)

También he subido el código al repositorio por si queréis ojearlo. Ah! y he comprado el dominio appunta.com. Algún dia pondré cosas en el, de momento hay un bonito wordpress dedicado al LoremIpsumismo, pero necesito dormir más de 5 horas por lo menos un día.

Ah, y si tenéis ideas para crear nuevos sistemas de visualización de geodatos, pues estaré encantado de oirlas, que ahora toca engordar la librería con widgets. Así a bote pronto se me ocurre, por ejemplo, un visor de rutas de senderismo donde el azimuth no señale al norte geográfico, si no al último punto de la ruta, así vemos el camino “delante nuestro”. Igual luego implementado es una castaña muy gordo. Igual no.

¿Y algún conejillo de indias con ganas de implementar en su app una librería que cambia casi cada día? ¿Algún amante del riesgo?

Gracias y buenas noches

P.D.: mañana toca catbeer, así que a los androideros tímidos os invito a venir a conocer a la gente de Catdroid, son todos muy majos, bueno, bastante majos, bueno, casi todos 😛

P.P.D: el icono/logotipo es horrendo, lo se, pero de momento no he podido hacer más, está en la lista de cosas “que son importantes, pero no urgentes y no tengo ni idea de cuando las haré”. Se aceptan ayudas y los autores mantienen la autoría, of course :)

 

Appunta saca la otra patita, y oiga, es una pata muy gorda

Hola!

Segundo dia del cuaderno de bitácora de Appunta. Y francamente, estoy pletórico. He conseguido armar algo muy potente con una arquitectura muy, muy sencilla (todavía no he llegado a la docena de clases), y por una vez me quedo lejos de la sobreingeniería.

¡¡¡Y tengo una captura de pantalla!!!

En las últimas 48h he implementado un montón de cosas:

  • Generada la clase abstracta AppuntaView. Esta se encarga de dibujar la vista utilizando tres métodos. Esta es la explicación extraida del Javadoc

This is the base class in order to create Views using the Appunta system. The class has all needed calculations and values to retrieve info from points.

It’s important to understand how this will work. All the stuff happens in the onDraw Method.

The onDraw method has three phases: preRender, pointRendering & postRender.

  • The preRender phase triggers the method preRender, used to draw all needed elements used in the background.
  • In the pointRendering phase, the method calculatePointCoordinates(Point) is invoked per each on of the points, in order to calculate the screen coordinates for each one of them. Then, they are painted by calling their PaintRenderer.
  • In the Post render phase, the postRender(Canvas) method is invoked in order to paint the latest layer
  • Este sistema permite implementar nuevas formas de mostrar “geodatos” de forma rápida y sencilla. Pintamos un fondo, decidimos las coordenadas de cada punto dentro del canvas, y barnizamos. Y arreando.
  • A partir de esta implementación, RadarView es como 10 veces más pequeño.
  • Implementada nueva view (también hereda de AppuntaView) que muestra un panorama donde la distancia se coloca con la altura. Esto con una cámara detras a toda pantalla es una AR de las de diploma.
  • Con el objetivo de montarlo bien, he creado una clase que hereda de SurfaceView para mostrar la cámara.
  • Tengo que mirar la diferencia entre View y SurfaceView, que me da en la nariz que la segunda me va a venir bien para estas cosas.
  • También he documentado más
  • ¡Y he subido un bonito sample! muestra algunas ciudades alrededor de Barcelona. Ojo que el punto central no se mueve y constantemente cree que estás en Barcelona. Los LocationServices para otro día. El sample está aquí: http://code.google.com/p/appunta/downloads/detail?name=appunta-sample-20120117.apk

De momento eso es todo (que no es poco). Ahora toca hacer un poco de limpieza y documentación, pero en general estoy muy satisfecho con el trabajo conseguido.

Supongo que huelga decir lo de que se agradecen comentarios, vivas, bravos, bughunters,  donaciones, cheques sopresa, corticoles y cualquier aportación que se desee dar al autor.

Appunta – un motor de AR

Hola

Estoy haciendo un motor de Realidad Aumentada GeoLocalizada. Tengo el proyecto al 40%, pero ya se puede enseñar.

Al contrario de otros como Mixare que funcionan como una caja negra, este funciona con un conjunto de pequeños componentes que se comunican entre ellos, permitiendo un alto nivel de personalización, aunque funciona out-of-the-box

De momento el único componente publicado es un View que permite mostrar puntos en una brújula.

El código es OS con licencia Apache 2.0. Así que, comparte y disfruta, pero menciona y agradece.

Encontrareis el proyecto en http://code.google.com/p/appunta/

Espero tener el módulo de AR “enseñable” en los próximos días. Os mantendré informados.

En el apartado de wiki hay algo de documentación, no mucha, pero habrá más en los próximos días.

Si os bajáis el source, es una app de prueba que muestra el radar con 4 puntos (Madrid, Zaragoza, Toulousse y París). El centro está fijo en BCN, así que estés donde estés ves los mismos puntos. El módulo de posicionamiento está a medias y no lo he publicado. Ojo, que la parte de la activity es sólo para pruebas, con lo que la calidad del código de esa parte deja mucho que desear, ya que es mi pequeño campo de pruebas.

Se aceptan sugerencias, bug-hunting, bug-fixing, groupies y jamones a la dirección de siempre.

Saludos!

 

Imágenes con esquinas redondeadas

Hola

A partir del video del otro día de Erik Burke, Taming Android UI (http://www.youtube.com/watch?v=jF6Ad4GYjRU ¿no lo has visto? flagélate pues!!!) he hecho una pequeña clase que es una vista para mostrar imágenes con esquinas redondeadas.

La gracia estriba en que no sólo hace eso, si no que mantiene el ratio que especifiquemos. Por defecto usa el ratio de las cartas de Magic :) pero podemos establecer uno nuevo con setImageHeightRatio y setImageWidthRatio. También podemos hacerlas cuadradas con setImageSquareRatio

Una vez establecido el ratio, cada vez que cambiemos el tamaño, el control se ajustará al ratio establecido.

Se aceptan comentarios, sugerencias y bug-hunting.

Lo tenéis en mi repositorio de BitBucket

La licencia es Apache, ergo, haced lo que os de la gana con el mientras mencioneis de donde sale.

Saludos!

HierarchyViewer a lo loco

HierarchyViewer a lo loco

Gracias a Fernando Cejas (@fernando_cejas, un gran tipo) de Android 10, llego a un pequeño módulo escrito por Romain Guy que sirve para utilitzar Activites en un dispositivo Android real como servidor de vistas para HierarchyViewer.

¿Lo que de lo cualo? Calma, que ahora me explico. Ya sabes…. “leer más”….
Gracias a Fernando Cejas (@fernando_cejas, un gran tipo) de Android 10, llego a un pequeño módulo escrito por Romain Guy que sirve para utilitzar Activites en un dispositivo Android real como servidor de vistas para HierarchyViewer.

¿Lo que de lo cualo? Calma, que ahora me explico. Ya sabes…. “leer más”….

Fragmentación de Android (pero la buena)

Vamos a ver cómo empezar a trabajar con los Fragments de Android.

¿Pero no se suponía que la fragmentación de Android era algo malo?

Sí, pero no hablo de esa fragmentación.

Cuando hablamos de Fragments hablamos de un nuevo elemento añadido a la API a partir de HoneyComb. Los fragments son “pedazos” de la interfaz que colocamos en nuestros layouts.

Y direis “pues eso es un View”. Y yo os diré “pues no”. Y si no le dais al botón de leer más, os quedareis con el misterio.

Vamos a ver cómo empezar a trabajar con los Fragments de Android.

¿Pero no se suponía que la fragmentación de Android era algo malo?

Sí, pero no hablo de esa fragmentación.

Cuando hablamos de Fragments hablamos de un nuevo elemento añadido a la API a partir de HoneyComb. Los fragments son “pedazos” de la interfaz que colocamos en nuestros layouts.

Y direis “pues eso es un View”. Y yo os diré “pues no”. Y si no le dais al botón de leer más, os quedareis con el misterio.

3 of 4
1234