Category Archives: Android

Como tener una version Debug y PROD de forma simultánea (Android)

Android

Cuando desarrollamos una app Android, nos puede interesar tener diferentes versiones de desarrollo, como por ejemplo, versiones con diferentes funcionalidades, o que la versión de PROD ataque una api diferente a la de DEV. Otro caso también, la de compilar nuestra versión PRO o Free de una aplicación.

Si esto lo intentamos sin ninguna configuración, cuando, por ejemplo, tenemos la versión de producción y queremos seguir desarrollando, nos va a avisar que ya existe una aplicación en el dispositivo y nos dará la opción de sobrescribirla.

Pues con Gradle, tenemos la solución, definiendo Flavors y Build types. Los Flavors de Gradle sirve para definir diferentes caracteristicas de una aplicación, como el siguiente ejemplo:

Como ves, hemos definido un flavor para la versión free, donde la ID de la aplicación será “com.dimaslz.appname” donde el nombre de la version será “v0.0.1 free” y terminado en “.pro” y version “v0.0.1 pro” para la versión de pago (premium) de nuestra app.

Esto es algo muy básico, pero podemos configurar otras caracteristicas como:

  • minSdkVersion
  • targetSdkVersion
  • versionCode
  • versionName
  • package name (sobresscribe el valor del manifiesto)
  • release signing info (keystore, key alias, passwords,…).
  • BuildConfig: Ability to provide custom Java code.
  • NDK ABI filter (Not implemented yet)
  • test info
    • package name for test app (optional, default is <base>.test)
    • InstrumentationTestRunner class (optional)
  • Additionally, Product Flavor can provide their own source code, resources and manifest.

Opciones extraídas de: http://tools.android.com/tech-docs/new-build-system/build-system-concepts (También referencia para consultar sobre Flavors)

Y ahora, supongamos que para cuando estamos desarrollando, queremos que nuestra app, sea independiente de la versión en producción, por lo que en los buildTypes, deberíamos añadir nuestra compilación cuando estemos en modo debug:

Como puedes ver, en este caso tenemos definido que cuando estemos en modo debug, a la app se le añadirá un sufijo “.debug”, por lo que el appID será “com.dimaslz.appname.debug”.

Esto, funcionaría por defecto, pero por ejemplo, si queremos compilar la versión “premium” en modo debug, deberemos ir a la ventana buildVariants  y elegimos la opción “premiumDebug”, esto nos compilará y ejecutará una aplicación con el appID “com.dimaslz.appname.pro.debug”.

Build Variant Android Studio

Es bastante intuitivo, asociaréis enseguida la variante. Tenéis mas información aquí: https://developer.android.com/tools/building/configuring-gradle.html 

Con todo esto, podremos definir resources que sean visibles para cada tipo de build. Por ejemplo, queremos que la versión de Debug, nos aparezca el título “AppName-Debug”, pues creamos un resource llamado “debug.xml” donde sobre-escribimos el nombre de nuestra string “app_name” y le ponemos el texto que gustemos.

Un ejemplo visual:

Ejemplo string version PremiumEjemplo string version FREE

Y como intento acostumbrar, os dejo el ejemplo practico en un repo de Github para que probéis algo muy básico. Hay bastante documentación al respecto y la distribución de recursos ya depende de ti y de la magnitud del proyecto.

Repositorio Github: https://github.com/dimaslz/DemoAndroidThings

tags: , , ,

Gestionar strings en Android

Android, Desarrollo Móvil

Ultimamente publico sobre AngularJS, pero como full stack developer, soy incapaz soy incapaz de casarme con una tecnología, me gusta trastear y complementar mis skills en otros terrenos, y como siempre le estoy dando vueltas a ideas nuevas, en este caso vamos a hablar de algo sobre Android.

Desarrollando una app que ya publicaré, encontré una solución, ya que varías veces había pecado de ignorante, para gestionar textos dinámicos en nuestra app android.

La idea trata de crear un recurso en el string.xml, el cual reusar en diferentes casos, como por ejemplo, la siguiente string:
“Tengo un ejemplo” en singular y “Tengo 5 ejemplos” o “Tengo ejemplos” en plural. La duda es, como reusar esto y que solo altere el número?

En este primer caso, podemos resolver esto con el recurso “plurals” en el archivo string.xml

Y como vamos a continuación, para usarlo tenemos que hacer referencia al recurso “plurals” y pasarle el valor.

Pero en este caso, tenemos un problema si queremos añadir una tercera posibilidad como: “No tengo ejemplos”. En este caso sería si el valor es 0. Pues tenemos otra posibilidad, un poco mas rebuscada pero que nos puede venir bien para strings simples. A continuación planteamos los ejemplos:
“No tengo ejemplos”
“Tengo un ejemplo”
“Tengo 5 ejemplos”

El recurso string sería algo como lo siguiente:

Y su modo de empleo no es otra forma tal como la tradicional, pero usando MessageFormat para pasarle los parámetros definidos en la cadena “{0}”

Esto es al igual que en otros lenguages, podemos pasar valores a cadenas tal como:

Por si queréis ver el ejemplo en marcha, os dejo un repo donde podréis ver como está implementado. https://github.com/dimaslz/DemoAndroidThings

También podemos hacer un condicional “if” que en caso de 0 usamos un recurso y en caso de usar plurales usamos el recurso plurals.

Bueno, espero que os haya servido ;).

PD: Y me olvidaba. Si queréis mas información al respecto: http://developer.android.com/guide/topics/resources/string-resource.html

tags: , ,

Ya tenemos web para el proyecto 12meses12apps

12 meses 12 apps, Android, Desarrollo Móvil

Web 12 meses 12 apps

Día 12 desde que comenzó el proyecto y por fin tenemos un lugar especialmente para el proyecto. Ahora podéis seguir todo en http://12meses12apps.com, donde yo (@dimaslz) y mi compañero Javi (@javi_moralesf), iremos haciendo las actualizaciones a los diferentes proyectos.

Ya vamos por la versión 1.1.2, aunque seguimos en continuo trabajo.

Be Sniper!: https://play.google.com/store/apps/details?id=com.dimore.sniper

Aceptamos feedback, ideas, propuestas y si creéis que tenéis tiempo y podéis sacar a la luz una aplicación en tan solo 1 mes,  con nuestra propuesta (12meses12apps: El Proyecto). Mandadnos un mail a dimor.apps[at]gmail.com con el asunto, “Unirme al reto” y nos pondremos en contacto contigo.

Poco a poco iremos perfilando la web, en contenido. Pero esto es a medida vayamos evolucionando.

 

tags: , , ,

12 meses 12 apps – BeSniper – Android app #1

12 meses 12 apps, Android, Desarrollo Móvil

Después de un tiempo sin postear, vuelvo a intentarlo.

Hace meses que estoy en mis ratos libres, desarrollando aplicaciones para Android. Ya tengo una terminada para uso personal y otra que estoy terminando que espero pronto hablaros de ella.

A vista de aprender, publicar y sacar proyectos dandole a la mollera, con un amigo (Javier Morales), nos hemos propuesto un gran reto, el cual hemos llamado “12 meses 12 apps“. Esto consiste en como mínimo, una vez al mes, reunirnos para pensar, desarrollar y publicar una aplicación. La aplicación, tan solo debe ser un prototipo funcional de una idea. No tiene por que ser perfecta, pero si debe cumplir la idea principal, sin importar el diseño o usabilidad.

Para comenzar este reto, el día 5 de Septiembre, desde las 16:00h, comenzamos a desarrollar hasta las casi 4 de la noche:

BeSniper:

(Ver en Google Play)
Be Sniper, es una aplicación Android, a modo de juego, que consiste en una mirilla al mas puro estilo sniper, con el único objetivo de apuntar a una amigo sin que se dé cuenta, y enviarle la imagen por whatsapp, facebook o cualquier otro medio que tengas disponible en tu dispositivo.

En principio, la aplicación no era exactamente esta idea, mas bien era hacer una aplicación en la que sacaras fotos con un marco que tengas disponible, pero el coste en tiempo y complejidad en ese momento, se nos iba de las manos, ya que había que diseñar algunos marcos, mas o menos coherentes. Por lo que en base a una broma que tenemos entre nosotros y Orestes, decidimos pivotar un poco la idea y tirar por la de hacer un cover de una mira de francotirador que requería menos diseño y nos era mas divertido :).

Comenzamos con lápiz y papel, simplificar lo mas posible la funcionalidad principal.

  • – Una cámara con una imagen encima de esta.
  • – Una vez sacada la foto, unir esas 2 imágenes en una.
  • – Guardar imagen y ver en galería o eliminar.

Pues al no tener experiencia con este tipo de componentes, tuvimos que buscar, probar y ajustar. Por suerte, teníamos unos 4 dispositivos diferentes y diferentes versiones de android y pudimos testearla y sacar un código mas o menos válido.

Objetivo

Ahora, que ya tenemos una base, hemos podido tener algo con el que probar e ir pensando features, por lo que tenemos pendiente hacer mejoras y quede algo mas o menos válido como para estar en la Play Store.

tags: , , ,