Optimización de aplicaciones Android para arquitectura X86

Como parte del concurso App Latina los desarrolladores registrados recibieron un entrenamiento sobre "Cómo optimizar aplicaciones para arquitectura X86". Los ganadores de la primera ronda recibieron también una tablet Android con arquitectura Intel para testear su app y prepararla para la segunda ronda. Les compartimos ahora la presentación completa del entrenamiento técnico, con notas y links para seguir profundizando sus conocimientos sobre las mejores prácticas, las herramientas disponibles, etc.

Cómo llevar una aplicación Android a la plataforma x86? Es necesario optimizar? Cómo optimizo para Android x86?
Éstas son algunas de las preguntas que vamos a responder a lo largo de la presentación en el artículo.
Un recorrido que comienza con las bases del desarrollo nativo en Android con Native Development Kit, una breve introducción a Java Native Interface, cómo migrar una aplicación Android a la plataforma x86 teniendo en cuenta distintos escenarios y un conjunto de buenas prácticas a tener en cuenta al momento de desarrollar código nativo, cómo optimizar para Android x86, teniendo en cuenta el compilador por defecto GCC e Intel® C++ Compiler for Android y finalmente, herramientas de Intel para desarrollar y optimizar aplicaciones Android para la plataforma x86. Además, presentamos algunos frameworks y motores de juegos con soporte para x86 que pueden ser utilizados y aquellos que no tienen soporte, algunas alternativas disponibles.

Las aplicaciones Android se pueden categorizar en dos grandes grupos a partir de su naturaleza: aplicaciones Dalvik y aplicaciones NDK. La diferencia está en la estructura de las mismas, la relación entre los componentes que la conforman y el acceso a determinadas features de la plataforma. Una aplicación NDK está desarrollada con Android Native Development Kit (NDK), el cual consiste en un conjunto de herramientas y build scripts que permite implementar partes de una aplicación en código nativo como C/C++ y generar librerías para las distintas plataformas como x86.
Incorporar código nativo en la aplicación Android extiende las capacidades de la misma, como la posibilidad de acceder a las capacidades del CPU y GPU, aplicar distintas técnicas de optimización para mejorar la performance y tomar ventaja de las capacidades del hardware de los dispositivos, entre otras.
Un componente clave al momento de desarrollar una aplicación nativa para Android es Java Native Interface (JNI), framework que permite comunicar de forma bidireccional código Java en una instancia de Dalvik Virtual Machine con código nativo dependiente de la plataforma.

Al momento de migrar y optimizar una aplicación existente a la plataforma x86, nos encontramos con distintos escenarios y alternativas de acción que implican un menor o mayor costo y esfuerzo. Estos escenarios van desde una aplicación Dalvik desarrollada con código Java y HTML5, NDK con código nativo no dependiente de la plataforma, NDK que incluye instrucciones ARM y NDK con librerías de terceros que pueden ser o no compatibles con x86.
Una vez aplicadas las técnicas para llevar estas aplicaciones a Android x86, es momento de optimizar. La optimización de la performance es un objetivo que todo desarrollador persigue y que debe aplicarse con cuidado. Para esto utilizamos distintas herramientas como Intel® Graphics Performance Analyzer Tool para detectar puntos de optimización en la aplicación y determinar los flags para el compilador.
Finalmente, a la hora de testear en múltiples dispositivos en un mercado fragmentado presentamos las alternativas que son, emuladores, servicios en el cloud y dispositivos reales, con sus ventajas y desventajas.