contacto[arroba]digitallearning.es

Optimizar Aplicaciones Android para la maquina virtual ART

Post Series: Android 5 Lollipop

Completamos el artículo anterior sobre la nueva máquina virtual ART, mostrando algunos de los puntos a tener en cuenta para optimizar Apps Android para ART y que son funcionales en Dalvik.

Como explicamos, ART utiliza el sistema de compilación AOT (‘Ahead of Time’, literalmente ‘por anticipado’ / ‘por adelantado’), ya que mediante la herramienta dex2oat es posible compilar la aplicación durante la instalación de ésta. Además se han implementado mejoras en el recolector de basura, que aumentarán el rendimiento en favor de una respuesta más fluida, y por lo tanto se producirá un menor consumo de energía, pero que afectarán en las necesidades de un mayor almacenamiento de binarios compilados.

Después de lo comentado inicialmente, y ante la duda de si las aplicaciones actualmente será compatibles con esta nueva máquina virtual, es necesario aclarar que ART es compatible con el sistema de archivos DEX, que no son más que archivos ejecutables de Dalvik, que proporcionan un compilado intermedio de la aplicación. Una vez se ha aclarado dicha compatibilidad, desde la plataforma de desarrolladores del fabricante intel, se recomienda revisar los siguientes puntos para un mayor control y optimización de las aplicaciones para su uso con ART:

  • En primer lugar será necesario comprobar el valor devuelto a partir de la siguiente instrucción, para comprobar la versión de la máquina virtual implementada (el valor devuelto deberá ser 2.0.0 o superior):
  • En el supuesto de utilizar JNI para ejecutar código C/C++, es necesario utilizar CheckJNI y establecer debuggable=»true» dentro del Android Manifest.
    Más información sobre este proceso.
  • Actualizar las herramientas de ART, debido a que su sistema es más estricto que Dalvik en la verificación de código, no siendo compatible con técnicas de ofuscación para ocultar su funcionalidad.
  • Eliminar aquellas excepciones que ya no serán necesarias con la nueva máquina virtual, pero teniendo muy presente que Dalvik seguirá funcionando durante un tiempo.
  • Eliminar las llamadas a System.gc(), especialmente al tipo de concurrencia GC_FOR_ALLOC.
  • Tener en cuenta el nuevo sistema de colores que utiliza Android 5.0 Lollipop para las notificaciones que se reciben:
    • Uso de los canales alfa sólo para los iconos de notificaciones e iconos de acción.
    • Uso de android.app.Notification.Builder.setColor() para establecer el color del círculo situado justo detrás de la imagen del icono de notificación.
    • Comprobar el aviso de notificaciones flotantes para aquellas que se establezcan con fullScreenIntent, o para notificaciones de alta prioridad con sonido o vibración:
  • Uso de la última versión del framework de pruebas Mockito para definir correctamente un Proxy mediante la llamada InvocationHandler.invoke().
  • Eliminar cualquier dependencia de instalación de archivos .odex de las rutas /system/framework , /data/dalvik-cache , o dentro del directorio de salida del cargador de clases DexClassLoader.
  • No guardar punteros para instancias de datos de un objeto, ya que podría corromper la memoria.
  • No visualizar los campos de Object (clase raíz de la jerarquía de clases de Java, de la que heredan todos los tipos no primitivos incluyendo arrays), ya que presenta campos privados.
  • Prestar especial atención a las especificaciones JNI (Java Native Interface), en el que CallNonvirtual<type>Method(), requiere de un método para declarar una clase.