Captura de pantalla con ADB

Depurar una aplicación de Android en W10 (1)

En los terminales que usan Android como sistema operativo hay dos operaciones que requieren el uso del ordenador. La primera es el Hard Reset y consiste en reinstalar la versión de Android que viene de serie con el terminal restaurando los archivos que se hayan eliminado o modificado. La segunda operación es el modo de depuración (ADB) que permite depurar las aplicaciones que se programan con el PC y acceder a contenido del teléfono que no está accesible directamente. Por ejemplo, con ADB se pueden usar herramientas de copia de seguridad y guardar la información del teléfono (aplicaciones y sus datos) en el PC por si se perdiera el teléfono.

Para usar ADB hace falta instalar los drivers en el PC y configurar el teléfono para que acepte la conexión en las versiones de Android a partir de Kit Kat. Se puede dar el caso que en las instrucciones para hacer el Hard Reset se diga que es necesario instalar los drivers de ADB en los terminales que llevan un SOC de Qualcomm. No es necesario instalarlos si configuramos el teléfono para que se inicie en Fastboot Mode.

Leer más

Preparar el entorno de programación de Pebble

En el reloj Pebble se pueden utilizar esferas (temas) y aplicaciones. Las esferas cambian la apariencia del reloj y muestran diferente información útil mientras que las aplicaciones hacen funciones simples o se comunican con las aplicaciones nativas de Android. Este artículo es el primero de una serie de artículos enfocados a la programación de una esfera y su ejecución en el Pebble clásico. El código fuente estará disponible en GitHub.

La programación se puede hacer de forma local en un equipo con Ubuntu o usando la nube de Pebble. El código de la esfera será el mismo en las dos plataformas. La única diferencia es que en el caso de usar la nube necesitamos una conexión de datos mientras que si trabajamos en local no hace falta dicha conexión. En el artículo veremos los pasos para hacer la instalación en local y dejaré para más adelante el uso de la nube de Pebble.

Leer más

sdk-cube

Depurar una aplicación en Android 4.4 con Windows

Ya hemos visto en un artículo anterior la forma de configurar Ubuntu para que detecte un terminal con Android 4.4. En este artículo veremos algo parecido para el caso de Windows. A diferencia de GNU/Linux existen más casos en los que se usan los drivers de depuración (aparte de la programación). Como ejemplo tenemos la aplicación Helium. Esta aplicación nos permite crear una copia de seguridad del terminal sin necesitar permisos de root.  Para hacer la copia utiliza ADB por debajo. Por esta razón es necesario que Windows tenga bien instalados los drivers y que el terminal permita la conexión del PC.

Leer más

Logo Ubuntu

Depurar una aplicación en Android 4.4 con Ubuntu

Cuando empezamos a programar con Android trabajamos con un entorno que lleva todo integrado (IDE). Estos entornos como Eclipse o Netbeans facilitan la codificación de la aplicación y su depuración tanto en un dispositivo emulado como en uno real. Si trabajamos con un dispositivo emulado podemos probar cualquier combinación de hardware, desde pantallas pequeñas de 4 pulgadas hasta las pantallas que usan las tabletas de 10 pulgadas sin necesidad de comprar el dispositivo real. Aunque el código funciona en el emulador, es importante probarlo en un dispositivo real ya que el comportamiento del emulador no es ideal y la ejecución es varios ordenes de magnitud más lenta (dependiendo del PC que tengamos).

Leer más

Logo SDK

Cursos de programación para dispositivos móviles

En un artículo anterior os comenté algunos cursos relacionados con las programación de aplicaciones móviles en las plataformas Coursera y edX. Ambas plataformas tienen cursos en inglés y esto puede ser un problema para algunos usuarios. Por esta razón os comento hoy el inicio de varios cursos de programación en castellano. El primero de ellos es un mini curso de varias lecciones que dan en la Web de El androide libre mientras que el resto son cursos que aparecen en las plataformas UPV[X] y MiriadaX. Los tres cursos son gratuitos y se pueden seguir con un ordenador y una conexión a Internet. El curso de UPV[X] empieza el próximo Martes y se centra en el sistema operativo Android. Por otra parte, el curso de MiriadaX tiene un planteamiento más generalista al tratar el desarrollo de aplicaciones usando HTML5 y Firefox OS. En el artículo completo podéis encontrar los temarios de los tres cursos.

Curso de El androide libre

Su autor es Jose Angel Zamora. El temario del curso es el siguiente (copiado de la Web del curso):

  • 0. Empezando
  • 1. Fundamentos de una aplicación
  • 2. Recursos de una app
  • 3. La clase Activity
  • 4. La clase Fragment
  • 5. View personalizada
  • 6. Adaptadores (Adapter)
  • 7. La clase Intent
  • 8. Receptores de mensajes broadcast (Broadcast Receiver)
  • 9. Prefencias de una app (Shared Preferences)
  • 10. Bases de datos SQLite
  • 11. Servicios (La clase Service)
  • 12. Tareas asíncronas (La clase AsyncTask)
  • 13. Gestores de contenidos (Content Provider)
  • 14. La barra de acciones ActionBar
  • 15. Notificaciones
  • 16. Orientación del dispositivo
  • 17. Animaciones
  • 18. Widgets
  • 19. Otros conceptos
  • 20. Información adicional

Curso UPV[X]

Su autor es Jesús Tomás Gironés. El temario del curso es el siguiente (copiado de la Web del curso):

  • Unidad 1: Repaso de Java
  • Unidad 2: Introducción a Android y entorno de desarrollo
  • Unidad 3: Diseño del interfaz del usuario – Vistas y Layouts
  • Unidad 4: Actividades, Barra de Acciones y Preferencias
  • Unidad 5: ListView e Intenciones
  • Unidad 6: Ciclo de vida de una Actividad y Seguridad
  • Unidad 7: Posicionamiento y Mapas
  • Unidad 8: Bases de datos en Android

Programación de Aplicaciones móviles unsado HTML5 y Firefox OS (el título lo he reducido)

El temario del curso es el siguiente (copiado de la Web del curso):

  • Módulo 0. Introducción al curso y al programa “Diseño de servicios en la nube para acceso movil con HTML5”       
  • Modulo 1: Introducción a Internet, la nube, la arquitectura de la Web, HTML5 y CSS       
  • Modulo 2: Introducción a JavaScript y a las aplicaciones Web en HTML5, así como la publicación en la nube       
  • Modulo 3. Estructuración y visualización de páginas Web en HTML y CSS adaptadas a un entorno multipantalla con PCs, móviles y tabletas       
  • Módulo 4: Tipos string y boolean de JavaScript, sentencias if/else y for, y caracteristicas avanzadas de objetos, incluyendo acceso al navegador mediante el arbol DOM       
  • Módulo 5: Interacción con el usuario, funciones, eventos, manejadores de eventos, formularios, jQuery y Zepto       
  • Módulo 6: Ejemplo de un cronómetro, eventos tactiles y localStorage, así como su utilización en aplicaciones Web       
  • Modulo 7. Gráficos, multimedia y animación en HTML5: SVG, CANVAS y elementos video y audio       
  • Modulo 8. Arrays, JSON, geolocalización y Mash-ups con otros servicios y aplicaciones, tales como Google Maps
Logo SDK

Cursos de programación en Android (Coursera y edx)

Un curso online masivo es un curso gratuito que se puede realizar desde cualquier lugar del mundo. Existen 3 plataformas principales que ofrecen estos cursos, dos en inglés (Courseray edx) y una en español (MiriadaX). Detrás de estas plataformas se encuentran universidades importantes que ofrecen la posibilidad de certificar los conocimientos obtenidos en el curso con un certificado. El certificado se tiene que pagar pero no es obligatorio hacerlo para seguir el curso. Los cursos se apoyan en vídeos, presentaciones y las redes sociales. Podemos preguntar las dudas en los foros correspondientes y recibiremos respuestas de profesoras y alumnos. El idioma de los cursos es principalmente el inglés en Coursera y edx y el español en MiriadaX.

Leer más

Logo Android

Mejorar la calidad de una aplicación desarrollada en Android

A la hora de probar y verificar una aplicación que hemos desarrollado en Android tenemos varias fases intermedias que, si bien no son obligatorias, ayudan a mejorar la calidad de la aplicación. Podemos distinguir dos tipos de errores. Por una parte tenemos los errores de funcionamiento por otra parte los errores de diseño. Un error de funcionamiento sería que el usuario pierda los datos por un bloqueo de la aplicación mientras que un error de diseño podría ser que el interfaz de la aplicación no se adaptara a la pantalla. Los dos tipos de errores se pueden detectar en la fase de  testeo  que realiza el programador pero en algunas ocasiones quedan enmascarados por el propio programador. Supongamos que un error aparece en unas condiciones concretas que no probamos. Al trabajar siempre de la misma forma no activamos el error pero cuando otro usuario utiliza la aplicación siguiendo otro orden lo encuentra. 

¿De qué forma podemos detectar estos problemas antes de que publiquemos la aplicación en Google Play? Recordad que los usuarios son nuestros clientes aunque la aplicación sea gratuita. Si al usarla encuentran errores es posible que escriban comentarios negativos que se traducirá al final en menos descargas de usuarios nuevos. Cuando la aplicación es de pago los resultados pueden ser peores. La solución de este problema es relativamente sencilla y consiste en verificar de forma adecuada la aplicación antes de su lanzamiento.

Errores de funcionalidad

Los errores de funcionamiento se pueden detectar de forma manual o de forma automatizada (con ciertos límites) si usamos pruebas unitarias. Una prueba unitaria se puede considerar como una función de verificación que llama a la función real de nuestra aplicación, le introduce los datos y comprueba el resultado de la operación. Los datos que introduce los decide el programador y pueden ser datos válidos o erróneos.  La función que esté bajo prueba debe responder de forma adecuada aunque la introducción sera errónea sin que se produzca el cierre de la aplicación. Supongamos que la función original espera un texto de 100 caracteres y le pasamos una cadena que tiene 1000 caracteres. De forma transparente al usuario debemos procesar la información y si es necesario informar al usuario de que el texto tiene que ser más pequeño.

Las pruebas unitarias tienen otra ventaja respecto a las pruebas manuales. Al añadir una función nueva es fácil que afecte a otras partes de la aplicación si comparten datos o se ha cambiado la estructura de los datos. Antes de probar la aplicación en un terminal real pasamos toda la batería de pruebas. Si se produce un error tendremos localizada la función en la que se encuentra y el tipo de datos que se le ha introducido. Un ejemplo de esto puede ser una función que trata con una base de datos. Si la función 1 espera los datos de una forma (de una sentencia SQL) y la función 2 los necesita de otra (con la misma sentencia SQL) podemos romper la función 1 con la función 2.

Errores de diseño

Los errores de diseño muchas veces son evidentes como el ejemplo de la aplicación que se sale de la pantalla pero en ocasiones son más sutiles. El diseño de la aplicación puede ser correcto para una pantalla de 4,5 pulgadas pero ser incomodo si usamos una pantalla más pequeña. Para estos casos es posible aplicar un diseño personalizado para pantallas pequeñas para que la experiencia del usuario sea adecuada. Estos detalles no los podemos ver si hacemos las pruebas siempre en el mismo tipo de dispositivos y de la misma forma. Necesitaremos por tanto que otros usuarios prueben nuestra aplicación y nos ofrezcan realimentación. Según el alcance de la prueba podemos distinguir dos casos:

  • La prueba se realiza en un ámbito local con pocos usuarios.

  • La prueba se realiza en un ámbito global con muchos usuarios.

En el primer caso los usuarios que prueban la aplicación pueden ser conocidos, amigos e incluso familiares. La ventaja de esta forma de trabajar es que controlamos a los usuarios que hacen la prueba pero tiene como inconveniente que la mayoría de los usuarios no serán “clientes” de la aplicación. Con esto me refiero a que si realizamos un contador de viajes para el transporte público los usuarios que prueban la aplicación deberían ser aquellos que la usarían a diario. El resto de usuarios puede probar la aplicación pero no nos dará tanta información útil. En el extremo opuesto está el segundo caso: tenemos usuarios interesados en la aplicación pero no controlamos quien la instala. La elección entre ambos casos no es excluyente sino que podemos realizar una primera etapa con el primer caso y después pasar al segundo.

Acceder a una versión beta (como usuario)

Para realizar la prueba usaremos Google Play y una comunidad de Google+. El funcionamiento es sencillo. Al unirnos a la comunidad de la aplicación que realiza la prueba activaremos una opción “especial” en Google Play. A partir de ese momento cuando instalemos la versión oficial de la aplicación estaremos instalando realmente la versión beta. El proceso es reversible y podemos volver a la versión estable en cualquier momento. Antes de pasar a una versión beta hay que comentar que si bien la versión es suficientemente estable, pueden aparecer errores de diferentes tipos.>Si usamos el terminal con >Android> y una aplicación crítica para el trabajo no hay que pasar a una versión beta de esa aplicación.

Explicaré los pasos para entrar en el programa de beta de la aplicación Todoist. Hay muchas aplicaciones que están siguiendo este tipo de desarrollo, sólo tenéis que investigar un poco por Google Play. Iniciamos la sesión en la cuenta de Gmail y entramos en la comunidad de Todoist.

Comunidad de TodoistComunidad de Todoist

Los pasos para activar el programa de verificación están en la columna derecha de cada página. Tenemos que pulsar en el enlace que nos dan y nos saldrá una pantalla similar a la siguiente:

Programa de beta Programa de beta

Es suficiente con pulsar en el botón y a continuación pulsar en el enlace inferior: Descargar Todoist: Lista de tareas de Play Store. Con esta función podemos como usuarios acceder a versiones en desarrollo y sugerir funciones a las aplicaciones que más usamos en el terminal con Android.

Conclusiones

El desarrollo de una aplicación exige varias habilidades en todas las fases. Durante la creación tenemos que aplicar técnicas de diseño (respetar las guías de estilo de Android), programación (lógica de la aplicación) o marketing (para publicar la aplicación en Google Play).  En cada una de las fases podemos usar diferentes herramientas que facilitan la creación de la aplicación. En el diseño podemos diseñar el interfaz de usuario con Fluid UI en el PC o con la aplicación POP usando bolígrafo y papel en un terminal con Android. Para la programación tenemos Eclipse y la documentación de Android mientras que para el marketing podemos realizar pruebas de la aplicación en grupos reducidos limitados o en grupos amplios perdiendo parte del control de la prueba.

Logo

Crear mockups interactivos en Android con boligrafo y papel

Hemos visto dos formas de hacer mockups (bocetos) de las aplicaciones de Android. La primera consiste en usar un programa de edición fotográfica para crear las pantallas usando la paleta de controles de Android. Su limitación aparece en que las pantallas no son interactivas. El siguiente paso es usar alguna de las aplicaciones Web que permiten crear las pantallas con elementos interactivos como Fluid UI. Estos servicios son útiles pero tienen un coste mensual que es necesario tener en cuenta para diseños complejos. A estas dos formas de trabajar se le suma una tercera con la aplicación POP – Prototyping on Paper. El funcionamiento es similar a Fluid UI con una diferencia importante: el origen de las pantallas no es un diseño en el ordenador sino un diseño en papel. Primero dibujamos las pantallas con bolígrafo y papel y después les hacemos una fotográfica. En la imagen resultante definiremos zonas de acción en los botones y otros componentes y los enlazaremos con las pantallas de destino.

La aplicación es gratuita y está disponible para Android / iOs. Podéis ver la demostración del proyecto en el siguiente enlace. Si pulsáis en una parte de la pantalla en la que no está definida un acción aparecerán en color verde las posiciones que tienen la acción mapeada.

Introducción

Lo normal es que una aplicación tenga varias pantallas. Por comodidad es posible hacer una plantilla en un programa de dibujo que contenga el rectángulo de la pantalla y los elementos estáticos como la barra superior o la barra de controles de manera que sólo tengamos que dibujar los controles. Instalamos la aplicación desde Google Play la ejecutamos. Podemos crear un máximo de dos proyectos en la aplicación. Si creamos una cuenta desde la propia aplicación el número máximo de proyectos es cinco.

Para crear un proyecto pulsamos en el icono +.

Listado de proyectosListado de proyectos

Dentro de cada proyecto tendremos varias fotografías que representan el interfaz de usuario de la aplicación. Antes de escribir el artículo he dibujado en un papel las cuatro pantallas que componen la aplicación del Sudoku (no tengo parado el proyecto). Las pantallas las he dibujado a mano y cada una tiene un tamaño diferente. Por esta razón os comentaba la posibilidad de usar una plantilla para que los tamaños sean similares. Si queremos añadir una pantalla nueva tenemos que usar el icono de la cámara que hay en la barra inferior. El segundo icono nos permite añadir como pantalla una imagen que tengamos guardada en el teléfono. El resto de iconos nos permiten borrar pantallas, entrar en modo interactivo o compartir el proyecto.

Listado de fotografíasListado de fotografías

Pulsamos sobre una de las pantallas para entrar al modo de edición. La idea es simple: dibujamos un rectángulo y después le asociamos una pantalla. El segundo botón de la barra nos permite elegir una animación entre las pantallas mientras que el último se usa para elegir la pantalla de destino.

Selección de las zonasSelección de las zonas

La pantalla actual queda difuminada y sólo tenemos que seleccionar la que queremos de destino.

Pantalla de destinoPantalla de destino

Hemos visto prácticamente todas las opciones de la aplicación. El funcionamiento es sencillo e intuitivo. Si volvemos a la pantalla inicial en la que se ven todas las fotografías del proyecto podemos pulsar el botón Play y probar el diseño.

Demo 01Demo 01
Demo 02Demo 02
Demo 03Demo 03
Demo 04Demo 04

Conclusiones

En este artículo hemos visto otra herramienta que podemos usar para diseñar mockups interactivos. Para compartir un proyecto hace falta crear una cuenta desde la propia aplicación. De momento parece que no funciona esta opción (en el momento de escribir el artículo). Probaré más adelante y haré las correcciones necesarias. POP nos permite trabajar sin un ordenador utilizando sólo el terminal con Android. Si en un proyecto trabajan varias personas es mejor usar otras alternativas como Fluid UI.

Logo Android

Las versiones de Android y su distribución

Cada cierto tiempo Google publica una nueva versión de Android con nuevas funciones y prestaciones. La última versión liberada es Android 4.4 (KitKat). Es importante matizar los términos versión liberada y versión disponible. Podemos pensar que si el fabricante acaba de liberar Android 4.4, la mayoría de los dispositivos debería tener Android 4.3 al ser la versión anterior. Para poder usar una versión de Android concreta en un terminal se tienen que cumplir dos cosas. La primera es que el fabricante la adapte a sus terminales y la segunda que existan drivers para los diferentes chips. Aunque esté disponible el código de Android, sin los drivers correspondientes a los chips de la CPU o la tarjeta gráfica no se puede hacer nada. No importa la marca del terminal que tengamos. Sólo es cuestión de tiempo que el terminal deje de tener soporte y se quede estancado en una versión determinada de Android. A partir de este punto las opciones que tenemos como usuarios son: quedarnos con la última versión disponible del fabricante o esperar a que la comunidad de cocineros haga una adaptación.

Para ver de forma numérica la distribución de cada versión de Android podemos usar la información que proporciona Google. Los datos corresponden a un periodo de 7 días medidos a finales de este mes. Están actualizados en la fecha de publicación de este artículo. Las versiones de Android 2.x aún tienen su uso pero se concentran en un porcentaje que está en torno al 30 %. Estos valores corresponden a terminales antiguos que no tienen actualizaciones y que ya tienen un tiempo en el mercado. Android 3.x era una versión específica para tabletas y por el porcentaje se puede decir que su uso es marginal. Los valores interesantes vienen a continuación.

Versión Nombre API Distribución
2.2 Froyo 8 2.2%
2.3.3 –
2.3.7
Gingerbread 10 28.5%
3.2 Honeycomb 13 0.1%
4.0.3 –
4.0.4
Ice Cream Sandwich 15 20.6%
4.1.x Jelly Bean 16 36.5%
4.2.x 17 10.6%
4.3 18 1.5%

Android 4.0.x (Ice Cream Sandwich) supuso un cambio importante en la forma de trabajar con Android y unificó los interfaces de teléfono y tableta. Entre las versiones 4.0.x y 4.1.x tenemos aproximadamente el 56 % de todos los dispositivos del mercado. Conforme subimos de versión el porcentaje baja de forma drástica. Android 4.2.x está en el 10 % de los dispositivos mientras que la penúltima versión de Android sólo tiene un 1,5 %. En la Wikipedia podemos encontrar un gráfica generada por Fjmustak con la distribución de las versiones. Está actualizada a Septiembre de este año e incluye hasta Android 4.2.

Android historical version distribution sep 2013 (Fjmustak)Android historical version distribution sep 2013 (Fjmustak)

Como usuarios tenemos algunas opciones y se centran básicamente en usar ROMs cocinadas cuando el terminal tiene un tiempo en el mercado. A modo de ejemplo pongo mi HTC Desire que lleva Android 4.2.2. La versión oficial que puedo usar es Android 2.3 con ciertas limitaciones. En la actualidad esa versión tiene una cuota de mercado del 28,5 %. Al principio puede dar respeto rootear un terminal o instalarle un sistema operativo que no es “oficial”, pero los beneficios superan a los riesgos y la comunidad de cocineros crea ROMs muy buenas que pueden ampliar la vida útil de un terminal. No es obligatorio como antes pasaba por ejemplo con los Nokia comprar un terminal nuevo si querías usar una versión más moderna de Symbian.

Conclusiones

En este pequeño resumen con datos podemos ver que aunque un dispositivo que tenemos, ya sea un teléfono o una tableta, no tenga la última versión de Android no quiere decir que estemos desfasados. Android Jelly Bean está en torno al 48 % del mercado. Cualquier terminal moderno debería tenerlo. Si vamos a comprar un terminal y no lo lleva es mala idea hacerlo. Ya ha pasado el tiempo en el que los terminales salían con Android 2.x y con suerte se actualizaban a Android 4.x.

Las aplicaciones de Android pueden trabajar a partir de una versión mínima del SDK. Si usamos Android 4.x podremos usar prácticamente todas las aplicaciones disponibles en Google Play. En el caso de tener una versión anterior (2.x) conviene revisar si existen ROMs de terceros y actualizar. Al usar una ROM de terceros eliminamos todas las aplicaciones que incluyen las operadoras de telefonía y que acaban gastando recursos del terminal o penalizando el rendimiento.

Logo Android

Recursos de programación para Android

Cuando queremos realizar una aplicación en Android tenemos muchos recursos disponibles para trabajar y aprender. Algunos de ellos son los típicos como la documentación que proporciona Google mientras que otros se enfocan en el uso de comunidades. Si tenemos una cuenta de Gmail, al mismo tiempo tenemos una cuenta en la red de Google llamada Google+ (queramos o no). El alta es automática y no requiere registrarse como ocurre en otras redes sociales. Dentro de Google+ tenemos las Comunidades que actúan como una especie de foro simplificado. Cada usuario pregunta y los miembros de la comunidad le responden.

Cada comunidad tiene unas reglas concretas aunque suelen seguir el sentido común: no hacer SPAM, mantener un ambiente cómodo, etc. Algunas de las comunidades relacionadas con la programación son:

Este artículo no es estático sino que lo iré ampliando a medida que encuentre recursos de diferentes tipos. Por ejemplo, en un futuro puedo añadir también foros enfocados a la programación con Android para resolver dudas en castellano.