Mejores prácticas para Desarrollo de Android apps

En este artículo se tratan cuestiones relacionadas con el diseño de aplicaciones para tabletas: el diseño de la interfaz de usuario, la duración de las sesiones, las adaptaciones a las diferencias entre usuarios y la localización. Se analizan procedimientos de depuración y optimización. También nos ocupamos del impacto que tienen diferentes métodos de despliegue en las funcionalidades disponibles de las aplicaciones. Con los consejos de este artículo, estará preparado para crear una aplicación que se distinga, dirigida a sus clientes que usen tabletas Intel® Android*.

Introducción

Compartimos en este artículo un resumen de lo que hemos visto y aprendido, con la esperanza de que ayude también a los lectores a lograr el éxito.

Desde el concepto hasta el diseño y la implementación, los desarrolladores tienen la oportunidad de que sus aplicaciones sobresalgan. La integridad conceptual, la eficiencia de diseño, la elección del entorno y la selección de herramientas son algunos de los muchos aspectos fundamentales con los que los desarrolladores deben hacer malabares. En este artículo se ofrecen sugerencias que conviene tener presentes para aprovechar el potencial de los dispositivos.

Mantenerse enfocados

Los mejores juegos y aplicaciones tienen una idea básica que respetan a la perfección. Si ya tienes la idea central para tu juego o app reducida a su esencia, esto te facilitará tomar la mayoría de las demás decisiones relacionadas con el desarrollo. Si la finalidad no es clara, tendrás un producto con características que no vienen al caso, y los usuarios no la utilizarán porque prefieren inclinarse por aplicaciones que hagan una sola cosa realmente bien. Con la integridad conceptual apropiada, detectarás oportunidades de mejorar el diseño y evitar perder tiempo en desarrollar funcionalidades que los usuarios ya reciben de otras aplicaciones.

Diseñar para la mayor cantidad posible de dispositivos

Si bien es conviene tener en mente un dispositivo objetivo, es importante que tu aplicación se adapte bien a una amplia variedad de plataformas. Para que las pantallas pequeñas muestren fielmente los aspectos visuales, diseña para la pantalla más grande en la que se vaya a ejecutar tu aplicación y luego reduce el tamaño para que se ajuste al área visible. Hay varios métodos para lograr compatibilidad con diferentes tamaños de pantallas.

ui elements

Figura 1: Los elementos de tamaño fijo de la interfaz de usuario pueden verse demasiado pequeños en pantallas de tabletas grandes.

Otra cuestión que se debe considerar es que todos los controles y el texto deben ser útiles en las pantallas más pequeñas. https://developer.android.com/design/index.html

Diseñar para movilidad

El usuario promedio consulta el teléfono entre 100 y 900 veces al día, las sesiones de juego informales duran unos 3 minutos y los lugares de uso son muy distintos (de la propia casa al trabajo, y todo lo que haya en el medio, como transporte público, restaurantes, etc.); por ello, la variación de entornos de las aplicaciones y los juegos móviles repercuten de manera considerable en su facilidad de uso.

Si estás creando un juego, la duración general de las sesiones se reduce a pocos minutos. Esto no quiere decir que estén prohibidas las aventuras épicas inacabables, pero sí significa que debe haber un mecanismo para que los usuarios hagan una pausa casi en cualquier momento y no tengan problemas para regresar al juego. Más allá de si el mecanismo es incorporar batallas cortas o separar rompecabezas con pantallas de selección de nivel, o un sencillo menú permanente para hacer una pausa o continuar jugando que incluya en resumen de lo que está ocurriendo en el juego, la mayoría de los usuarios necesitan tener la posibilidad de abandonar sus dispositivos.

De manera similar, si la aplicación exige silencio absoluto y una iluminación perfecta, muy pocos podrán usarla fuera de casa, y quizá ni siquiera allí. Todo, desde el color que se elija hasta la modulación del sonido, es importante para asegurarse de que la experiencia del usuario sea buena.

Diseña para personas

Si está creando aplicaciones para un conjunto muy reducido de la población, puede ajustar el diseño a sus necesidades, pero esta es una situación poco común. La mayoría de las aplicaciones no puede darse ese lujo. Deben poder usarlas la mayor cantidad de gente posible.

Además de lo que ya mencionamos sobre los entornos de uso, como el transporte público, hay más de 360 millones de personas con problemas de audición, 285 millones con discapacidad visual y 280 millones con daltonismo en todo el mundo. La mayoría de los usuarios que necesitan algún tipo de asistencia ya tendrán alguna solución preparada, pero de todos modos este es un aspecto del diseño y el desarrollo que requiere de atención. Si existe alguna manera de agregar indicaciones sonoras a las aplicaciones con muchas imágenes, subtítulos a las partes habladas de los juegos y símbolos identificables para diferenciar entre objetos de colores, o una paleta distinguible para daltónicos en la cual todos los colores importantes tengan distinta luminosidad, estará mucho más cerca de lograr que todo aquel que descargue su producto pueda usarlo.

La localización es otro terreno al que muchos juegos y aplicaciones terminan por dedicar tiempo de desarrollo y dinero con el único fin de llegar a otros países. Como el costo puede llegar a ser de 10.000 a 15.000 dólares estadounidenses por idioma, conviene reducir al mínimo el texto que se necesite localizar. ¿Puede su aplicación hacerse entender por el usuario mediante símbolos comprensibles en todo el mundo? ¿Pueden los personajes del juego usar emojis universales para comunicarse, en lugar de palabras? Cada paso que se acerque a interactuar directamente con la mente del usuario en lugar de con su vocabulario aumentará el público potencial, sin costo adicional.

Elegir el tipo de ejecutable adecuado

Si tu aplicación no va a utilizar un motor de juego ya existente, una de las primeras decisiones que se deben tomar en cuanto a la implementación es qué tipo de ejecutable tendrá: nativo, web o híbrido.

Nativo. Las aplicaciones nativas son de bajo nivel, lo cual permite acceder a recursos de hardware más potentes, pero impone más restricciones al desarrollo y la portación a otras plataformas. El lenguaje más común para el desarrollo Android nativo es Java, generalmente por medio del SDK (Kit de Desarrollo de Software) para Android* básico o el NDK (Kit de Desarrollo Nativo). Herramientas tales como Intel® INDE (Experiencia Integrada de Desarrollo Nativo de Intel®) se centran tanto en Java como en C++. Intel INDE no solo contiene compiladores, sino también herramientas de análisis que ayudan a identificar y corregir problemas de rendimiento de las aplicaciones.

Web. Las aplicaciones web, desde los juegos para navegadores hasta las herramientas online, son versátiles y de fácil distribución, pero a menudo les falta potencia y, como lo implica su nombre, por lo general necesitan conectividad a internet para funcionar. HTML5 y JavaScript* son la norma para estas aplicaciones. Si la aplicación funciona simplemente como una interfaz a alguna herramienta del lado del servidor, la opción web es excelente; la parte negativa es que cada uno de los usuarios accede a los servidores, lo que eleva los costos de alojamiento para satisfacer la demanda.

Híbrido. Para aprovechar la flexibilidad natural de las aplicaciones web y la potencia del hardware de los dispositivos móviles, se puede optar por aplicaciones híbridas: tecnología web integrada en una envoltura nativa. Intel XDK (Cross-platform Development Kit) y otras herramientas de este tipo son ideales para elaborar aplicaciones híbridas. Las mismas aplicaciones web en JavaScript que mencionamos antes se pueden importar, potenciadas con llamadas a API que saquen provecho del hardware, y darles un toque final con código “listo para el dispositivo”, para crear paquetes nativos en plataformas móviles.

executable impacts

Figura 2: La elección de un ejecutable es algo que lo afectará a usted y a sus clientes.

La decisión de optar por una aplicación nativa, web o híbrida depende en gran medida del uso que se le pretenda dar, los recursos y la funcionalidad requeridos, y la familiaridad del desarrollador con los distintos lenguajes. A la vez, esta decisión determina la manera en que se puede distribuir, usar y monetizar la aplicación.

Hacer lo más ligera posible

Una interfaz fácil de usar brinda muchos beneficios, pero para aprovechar al máximo la aplicación desarrollada, es necesario que no exija demasiado al dispositivo. Las descargas de tamaños inmanejables, el uso exagerado de recursos y el pedido de permisos innecesarios son barreras que dificultan la adopción o la continuidad de uso (y obstaculizan las ventas por el boca en boca).

Una manera de reducir el tamaño de la descarga inicial es con descargas posteriores de “archivos adicionales”. Lamentablemente, esto quizá moleste a los usuarios y trae consigo un problema más importante que también puede afectar el rendimiento: el manejo subóptimo de recursos redundantes. Las bibliotecas de texturas, los modelos y los sonidos que constituyen la mayor parte del tamaño del archivo tendrán que cargarse en la memoria (y si no es así, hay otros problemas), lo que hará más lenta la aplicación. Si se resuelve la causa de origen, no solo la aplicación funcionará mejor, sino que la descarga inicial y las siguientes se reducirán sustancialmente.

La solución para muchas aplicaciones es un procedimiento que apunta a la reutilización y que se ideó en las viejas épocas del desarrollo con limitaciones de memoria. Usar las mismas imágenes y sonidos con diferentes paletas y máscaras puede proporcionar la variedad necesaria y a la vez reducir al mínimo el espacio y los recursos requeridos. Incluso si no hay posibilidad de recurrir a la reutilización en el sentido estricto, reducir al mínimo los archivos a los que sea necesario acceder aumentará el rendimiento de manera demostrable. Por ejemplo, World of Goo crea atlas de texturas para fines específicos durante la carga de niveles, de esta manera incluso los recursos de imagen que se usan en otros lugares se combinan en un solo recurso. Este incremento del rendimiento dará réditos en el paso siguiente: análisis y optimización.

Eliminar errores y simplificar la ejecución

Lo ideal sería que la aplicación se ejecutara sin ningún inconveniente la primera vez y que no fuera necesario hacer mejoras. Pero el mundo real no es así. En toda aplicación más compleja que un ejemplo para recién iniciados, invariablemente habrá errores. Los peores errores no impiden que funcione la aplicación, sino que la hacen más lenta, en cuanto al rendimiento o la latencia, y la experiencia del usuario se ve perjudicada. Asimismo, el sobredibujo y los búferes dobles sin utilizar son dos ejemplos de problemas que, aunque no son errores, reducen el rendimiento y la duración de la batería. Todas estas son oportunidades de mejorar aún más su aplicación. La mejor manera de encontrar oportunidades como estas es con herramientas de análisis de perfiles y analizadores de rendimiento.

Intel® XDK ofrece depuración en el emulador, depuración remota en dispositivos Android conectados en la pestaña Debug e información de análisis de rendimiento en la pestaña Profile.

Intel® XDK

Figura 3: Intel® XDK facilita el desarrollo de aplicaciones híbridas

¿No usa Intel XDK? Los Analizadores de Rendimiento de Gráficos Intel® (Intel® GPA) son un conjunto de herramientas de análisis de rendimiento ideadas con el fin de ayudar a identificar áreas subóptimas para mejorarlas. Aunque estas herramientas son perfectamente aptas para aplicaciones que usan todo el poder ofrecido por las PC, también funcionan con aplicaciones Android, y ganan su lugar por derecho propio entre las otras herramientas nativas de Intel® INDE.

Resumen

Hay muchísimos factores que se deben tener en cuenta cuando se desarrollan aplicaciones o juegos móviles. La integridad conceptual es clave para decidir entre la enormidad de opciones y acotar el infinito espacio creativo. Cada aspecto del desarrollo puede repercutir en los anteriores y los que le siguen, por ello son fundamentales la planificación y la reiteración. Las convenciones sobre interfaces táctiles, globalización y diseño de imagen y sonido para dispositivos móviles constituyen puntos de partida valiosos y materia para reflexionar en este ejercicio.

Intel® INDE ofrece un enorme conjunto de herramientas para desarrolladores de aplicaciones nativas. Intel® XDK ayuda a los desarrolladores web en todo lo que puedan necesitar: desarrollo, emulación, pruebas, depuración y empaquetado. Ambos tienen abundante documentación y asistencia en foros que continuarán creciendo.

Los métodos y herramientas que se incluyen en este artículo se tomaron de lecciones que los ingenieros de Intel han aprendido de ayudar a muchos desarrolladores de aplicaciones. Son de suma utilidad para maximizar la probabilidad de que su aplicación logre popularidad y pase a formar parte de la vida de sus clientes. Buscar un concepto, un diseño y una implementación óptimos es una empresa exigente en extremo, pero que termina siendo provechosa.