Cómo desarrollar y evaluar aplicaciones Android* de 64 bits en plataformas x86 Intel®

Introducción

Cada vez hay más dispositivos móviles para el público en general que cuentan con arquitectura de 64 bits. Utilizar Android* de 64 bits es una excelente manera de acceder al mercado. En este artículo se presentará Android en arquitectura Intel® de 64 bits y se analizarán sus compatibilidades particulares, detalles técnicos, mejoras de rendimiento, problemas y soluciones disponibles para Android en plataformas basadas en procesadores Intel® Atom™.

Intel incorpora continuamente nuevas funcionalidades de avanzada en sus procesadores de 64 bits. Los desarrolladores que quieran aprovechar las Nuevas Instrucciones Estándar de Encriptación Avanzada Intel® (Intel® AES-NI) y otras innovaciones solo tienen que compilar sus aplicaciones en este modo de bits. Intel está trabajando con miras a optimizar Android para las arquitecturas de 64 bits y crear SDK que expongan la funcionalidad de la CPU a desarrolladores de mayor nivel.

Con la publicación reciente de Google de su imagen de emulador Android 5.0 x86 de 64 bits, los desarrolladores pueden crear aplicaciones de 64 bits para dispositivos basados en procesadores Intel Atom.

Android de 32 bits vs. Android de 64 bits

Muchas plataformas de 64 bits de la actualidad, incluidas Solaris, AIX*, HP-UX*, Linux*, OS X*, BSD e IBM z/OS*, usan el modelo LP64. Como Android está basado en el kernel de Linux, las plataformas Android de 64 bits también usan el modelo LP64 [1]. El tipo de datos se muestra en la Figura 1.


Figura 1: Diferentes tamaños de tipo de datos en modelos LP32 y LP 64

Las CPU de 64 bits Intel tienen modo de compatibilidad con 32 bits. Si bien las aplicaciones de 32 bits se pueden ejecutar en procesadores de 64, compilar con un compilador que optimice para 64 les permite aprovechar los beneficios de arquitectura de los entornos de 64 bits.

Cómo compilar aplicaciones Android para 64 bits

Para las aplicaciones Android basadas en el NDK, hay que compilar las bibliotecas nativas de modo que sean compatibles con los sistemas de 64 bits. Una manera de hacerlo es seguir estos pasos:

  1. Descargue e instale la versión apropiada del NDK.
    Puede obtenerla en el sitio web oficial [2] o compilarla usted mismo a partir del Proyecto Android Open Source (AOSP).
    (Atención: hay dos versiones del NDK para sistemas de 32 y 64 bits, comenzando con NDK R10).
    Tanto para sistemas Windows* como Linux, es necesario descomprimir el archivo del NDK y establecer la ruta correcta en la variable de entorno PATH del sistema.

  2. Compile las bibliotecas de manera que admitan sistemas de 64 bits.
    Recuerde usar ABI x86_64 para compilar su proyecto, con la instrucción “ndk-build APP_ABI=x86_64”. Esta es la mejor manera de compilar bibliotecas nativas para sistemas Android de 64 bits en plataformas x86. Para otras plataformas es necesario establecer APP_ABI como “arm64-v8a” o “mips64”. Otra opción es agregar la línea “APP_ABI = x86_64” a Application.mk y utilizar directamente la instrucción “ndk-build”.
    En la mayoría de los casos, la instrucción recién indicada funciona bien, pero a veces se producen errores. Deberá corregir su código nativo a partir de la información de error.

  3. Vuelva a compilar todo el proyecto para obtener la nueva aplicación.
    Ahora puede instalar su aplicación recién creada y probarla en un emulador o en los dispositivos objetivo.

Cómo ejecutar aplicaciones de 64 bits en emuladores

Si no tiene ningún dispositivo totalmente compatible con la tecnología de 64 bits, pruebe sus aplicaciones en un emulador. Afortunadamente, Android Dev anunció que ya se puede obtener el emulador Android L de 64 bits para la arquitectura Intel x86 [3]. Puede descargar e instalar la imagen de sistema de 64 bits para el procesador Intel Atom por medio de Android SDK Manager. Como muestra la Figura 2, el Android SDK Manager permite elegir esta imagen de nombre “Intel x86 Atom_64 System Image” en Android 5.0 (API 21) e instalarla.


Figura 2: Casilla de “Intel® x86 Atom_64 System Image” en Android* SDK Manager

Cree un nuevo dispositivo virtual Android (AVD) basado en la imagen de sistema de 64 bits para el procesador Intel Atom y abra el AVD Manager en SDK Manager o ADT. Luego haga clic en “crear” y llene los campos como se muestra en la Figura 3. Ahora el emulador de AVD de 64 bits está listo para ejecutarse.


Figura 3: Creación de una imagen x64 en dispositivo virtual Android

Siga estos pasos para ejecutar la aplicación de 64 bits en el emulador:

  • Edite ./jni/application.mk como APP_ABI := x86_64
  • Compile sus archivos nativos
  • Ejecute como aplicación Android en AVD


Figura 4: Una aplicación llamada “x86_64 Hello-JNI” ejecutándose en AVD x64

Rendimiento en la plataforma Android x86 de 64 bits

Según nuestras pruebas, las aplicaciones son más rápidas en los sistemas de 64 bits. Ejecutamos una aplicación de demostración de encriptación en un dispositivo de Arquitectura Intel de 64 bits, de nombre clave Bay Trail. Esta demo se beneficia tanto de la versión más reciente de Android como de Intel AES-NI. En la Figura 5 se muestran los resultados de encriptar un archivo mp4. Sin contar el tiempo de E/S, el tiempo total fue de 1.56 s en un sistema Android 5.0 de 32 bits, frente a 1.49 s en un sistema Android 5.0 de 64 bits, una mejora de rendimiento del 5 % [4].


Figura 5: Tiempo para encriptar un mp4 por medio de Intel® AES-NI

Los resultados detallados de las pruebas se muestran en la tabla siguiente.

Tabla 1: Resultados detallados de la prueba de ejecución de una aplicación de encriptación

Total Time(+SD R/W)
(seconds)

Encryption Time(-SD R/W)
(seconds)

Android* 5.0
64-bit

Android 5.0
32-bit

Android 5.0
64-bit

Android 5.0
32-bit

7.046

7.379

1.498

1.649

7.152

7.27

1.49

1.529

7.011

7.368

1.529

1.57

7.151

7.196

1.487

1.522

7.182

7.282

1.468

1.548

7.1084

7.299

1.4944

1.5636

 

También compilamos un FFMPEG de 64 bits y verificamos el rendimiento en Android 5.0. El resultado mostró que el promedio de fotogramas por segundo de la versión de 64 bits fue aproximadamente un 7 % mejor que el de la versión de 32 bits en la misma plataforma Bay Trail [4].


Figura 7: FPS de la reproducción de un archivo MP4 1080p con FFMPEG en Android* de 64 bits

Los siguientes son dos ejemplos más que muestran las ventajas de rendimiento de Android de 64 bits en plataformas Intel. Los bancos de pruebas de rendimiento de varias aplicaciones de proveedores independientes de China muestra mejoras de rendimiento de 7 a 8 % [4] por el uso de sistemas de 64 bits en lugar de los de 32 bits.

Para una aplicación de decodificación multimedia de un proveedor de software independiente:

Esta prueba comparativa muestra que, en general, el rendimiento en la reproducción de todos los formatos (3gp, avi, flv, mkv, mov, mp4, rmvb, wmv) aumentó en aproximadamente 20 % (mejora de rendimiento al usar 64 bits en comparación con el uso de 32 bits) [4].


Figura 8: FPS de la aplicación de decodificación multimedia en Android* de 64 bits

Para una aplicación de reconocimiento de voz de un proveedor de software independiente:

El motor de combinación de voces habilitado para Android de 64 bits muestra un aumento del rendimiento de aproximadamente ~40 % con 64 bits + ART (alrededor de 10 % de mejora de rendimiento con el uso de 64 bits en comparación con el uso de 32 bits) [4].


Figura 9: Tiempo de inicialización del motor de combinación de voces en Android* de 64 bits

Analizamos los módulos de esta demo de conversión de texto a voz en Android tanto de 64 como de 32 bits, incluido el costo de get token, de sty cpy, de stream y de getline (en ms):


Figura 10: Costo de módulos claves de conversión de texto a voz en Android* de 64 bits

Los resultados muestran las ventajas de la aplicación de 64 bits, especialmente en las E/S de memoria y la operación de transmisión en secuencias.

Resumen

Android L con tecnologías de 64 bits para plataformas basadas en procesadores Intel Atom puede ayudar ahora a los desarrolladores a optimizar sus aplicaciones. Compilar aplicaciones Android para 64 bits es igual de fácil que hacerlo para las tradicionales de 32. Ahora es posible usar el emulador de 64 bits de Android oficial para ejecutar y depurar aplicaciones de esa cantidad de bits. Para someter a prueba el rendimiento de las plataformas Android x86 de 64 bits, recompilamos varios proyectos de código fuente abierto para 64 bits e hicimos que varios de los proveedores de software independientes más importantes de China compilaran versiones de 64 bits de sus aplicaciones. Los bancos de pruebas muestran mejoras de rendimiento de entre 7 y 8 % (e incluso 20 % en un caso especial) por el uso de la tecnología de 64 bits en lugar de la de 32 bits.

Artículos relacionados

Sistema operativo Android de 64 bits:
https://software.intel.com/en-us/android/articles/64-bit-android-os

Cómo entender las diferencias de alineación de memoria entre x86 y ARM en Android:
https://software.intel.com/en-us/blogs/2011/08/18/understanding-x86-vs-arm-memory-alignment-on-android

Enlaces de consulta

[1] http://en.wikipedia.org/wiki/64-bit_computing
[2] http://developer.Android.com/tools/sdk/ndk/index.html
[3] https://plus.google.com/+AndroidDevelopers/posts/XG1WmNDMe8H
[4] El software y las cargas de trabajo usados en la pruebas de rendimiento puede que hayan sido optimizados para rendimiento en microprocesadores Intel solamente. Las pruebas de rendimiento, tales como SYSmark* y MobileMark*, se miden con sistemas informáticos, componentes, software, operaciones y funciones específicos. Todo cambio en cualquiera de esos factores puede hacer que varíen los resultados. Debe consultar más información y otras pruebas de rendimiento que lo ayuden a evaluar íntegramente las compras que contemple hacer, incluido el rendimiento del producto al combinarlo con otros. Configuraciones: [Asus T100 (CPU-Intel Atom Baytrail T Z3740, Memory-2G, SSD), prueba comparativa, por Zhang Li y Zhou Zhen]. Encontrará más información en http://www.intel.com/performance

Acerca de los autores

Zhen Zhou obtuvo una licenciatura en ingeniería de software en la Universidad Jiaotong de Shanghái. Se sumó a Intel en 2011 como ingeniero de aplicaciones del Equipo de Asistencia para Aplicaciones Móviles de la División de Relaciones con los Desarrolladores. Trabaja con personal interno y con proveedores de software independientes, proveedores de servicios y operadores de telefonía externos en la nueva iniciativa de modelo de uso y el desarrollo de prototipos en el procesador Intel Atom, la arquitectura Intel tradicional y plataformas con arquitectura Intel integrada.

Zhang Li es ingeniero de aplicaciones del Grupo de Software y Soluciones (SSG) de Intel, como parte del Equipo de Asistencia para Empresas en Aplicaciones Móviles de la División de Relaciones con los Desarrolladores. Su tarea principal es asistir en el desarrollo de aplicaciones para Android.

Para obtener información más completa sobre las optimizaciones del compilador, consulte nuestro Aviso de optimización.