Opciones de publicación de aplicaciones Android* nativas para la Arquitectura Intel® (x86)

Introducción

En la versión 2.3.7 de Android, Intel y Google anunciaron que trabajarían para que futuras versiones de Android ejecutaran de manera optimizada aplicaciones nativas en x86 (arquitectura Intel®).

Pero publicar y empaquetar aplicaciones basadas en el NDK de Android es importante para aquellos desarrolladores que deseen ofrecer un mejor rendimiento y quieran que el usuario tenga una mejor experiencia en cada arquitectura. En este artículo se presentan varias opciones para empaquetar aplicaciones basadas en el NDK de Android. Para ello, se analizarán algunas aplicaciones de ejemplo específicas escogidas de Google Play. Usted puede elegir la opción que más se adecue a su aplicación.

Opciones de publicación de aplicaciones basadas en el NDK de Android

Tabla 1. Opciones de publicación de aplicaciones basadas en el NDK de Android

Como se muestra en la Tabla 1, por lo general son cuatro las opciones de publicación de aplicaciones basadas en el NDK de Android. Están marcadas con dos colores. En verde figuran “Single APK” (Un APK) y “Multiple APKs” (Múltiples APK), que son las opciones básicas en Google Play. En realidad, con estas dos opciones se pueden abarcar la totalidad de las publicaciones. Pero como todos saben, Android es un sistema operativo muy abierto y flexible. Hay algunas opciones especiales marcadas en amarillo: “Separate APK” (APK separados) y “Tricky APK” (APK astuto). Ninguna de estas dos es una opción oficial de Google Play.

En primer lugar, queremos explicar cómo analizar cada opción desde la perspectiva de ofrecer mayor compatibilidad con x86. En las secciones siguientes, detallaremos las “Ventajas”, las “Desventajas”, los “Posibles riesgos” y “Cómo evitar riesgos”, de manera específica para x86.

Los “Posibles riesgos” son situaciones que podrían ocurrir si el desarrollador adopta esta opción. Se basan en casos reales. También explicaremos cómo evitar esos posibles riesgos en su aplicación.

Un APK

Tabla 2. Características para “Un APK”

Tipo Detalle
Ventajas 1. Siempre es compatible con la versión más reciente de x86.
2. Se encuentra habitualmente en las tiendas de aplicaciones.
Desventajas El APK tiene gran tamaño y por eso ocupa mucha memoria.
Posibles riesgos Podría perder el archivo de biblioteca en /lib/x86 cuando la aplicación se integra a un componente que no es compatible con x86.
Cómo evitar los riesgos Tanto los desarrolladores como las tiendas de aplicaciones deben validar la aplicación en dispositivos x86 antes de presentarla al público.

Google recomienda a los desarrolladores crear y publicar aplicaciones de un APK que sean compatibles con tantas configuraciones de dispositivos como sea posible. Sin dudas, la opción de un APK es la mejor y la más sencilla para la compatibilidad con x86 en la última versión, y es la opción más común en las tiendas de aplicaciones. Pero el binario resulta más grande.

Un riesgo posible es que la aplicación pierda los archivos de biblioteca cuando se integra a un nuevo componente, posiblemente de un tercero, que no sea compatible con x86. En este caso, la aplicación fallará cuando se la inicie y el sistema informará el error de que no se puede encontrar una biblioteca. Para evitar este riesgo, tanto los desarrolladores como las tiendas de aplicaciones deben validar las aplicaciones en dispositivos basados en la Arquitectura Intel antes de presentarlas al público.

La aplicación de ejemplo es Sina Weibo, que empaqueta todos los archivos de bibliotecas nativas juntos, como se muestra en la siguiente captura de pantalla.

 



Figura 1. Bibliotecas de NDK de Sina Weibo

 

La opción de un único APK es muy adecuada para aplicaciones con NDK de poco tamaño, como Sina Weibo. El tamaño total de los cuatro archivos que componen la biblioteca x86 es de solo 235 KB, lo cual es insignificante en comparación con los 20 archivos del APK, que tienen un tamaño total de 809 KB antes de ser comprimidos.



Figura 2. Tamaño de las bibliotecas x86 de Sina Weibo

Múltiples APK

Tabla 3. Características para “Múltiples APK”

Tipo Detalle
Ventajas 1. Menor tamaño del APK.
2. Siempre es compatible con x86.
3. Se encuentra habitualmente en las tiendas de aplicaciones.
Desventajas Google Play recién comenzó a admitir esta modalidad recientemente.
Posibles riesgos La tienda de aplicaciones de un tercero podría enviar un APK basado en x86 a un teléfono ARM y eso lo haría fallar.
Cómo evitar los riesgos La aplicación debería hacer una comprobación de CPU antes de cargar bibliotecas nativas.

La opción de múltiples APK permite a los desarrolladores publicar diferentes APK para la aplicación, cada uno dirigido a una configuración de dispositivo específica, en especial arquitecturas de CPU. Cada APK debe tener el mismo nombre de paquete, pero puede ser una versión independiente y tener tamaños de archivo distintos.

La siguiente es una captura de pantalla de Chrome* para Android tomada de Google Play. Podemos ver que el tamaño y la versión varían según el dispositivo.



Figura 3. Chrome* para Android* en Google Play

La opción de Múltiples APK tiene muchas ventajas. El tamaño del archivo APK que se descarga al dispositivo es menor que en el caso de un solo APK, lo cual hacer ahorrar tiempo a los usuarios y reduce el tráfico de red. Los usuarios siempre pueden recibir la versión nativa x86. Y resulta fácil para los usuarios encontrar el APK para x86, porque cada APK comparte el mismo listado de aplicaciones en Google Play. Parece ser una solución perfecta. Sin embargo, sólo es útil para Google Play; la mayoría de las tiendas de aplicaciones de terceros no admiten esta opción.

El riesgo posible es que una tienda de terceros envíe incorrectamente el APK x86 a un teléfono ARM porque lo considere una versión actualizada de ARM. La razón es que el código de versión del APK para x86 es mayor que el del APK para ARM (para conocer más detalles sobre la regla de códigos de versión, lea: /es-es/articles/google-play-supports-cpu-architecture-filtering-for-multiple-apk). Cuando el usuario inicie la aplicación, se producirá un error.

La mejor manera de evitar este riesgo es que los desarrolladores agreguen a sus aplicaciones la funcionalidad de comprobación de CPU previa a la carga de la biblioteca nativa. Si la arquitectura de la CPU del dispositivo de destino no coincide con la correspondiente del APK, aparecerá un cuadro de mensaje que notificará a los usuarios que deben descargar la versión apropiada.

La mejor solución sería que todas las tiendas de aplicaciones admitieran múltiples APK. Entonces todo funcionaría como debe.

APK separados

Tabla 4. Características para “APK separados”

Tipo Detalle
Ventajas 1. Menor tamaño de APK que en la opción de un solo APK
2. Buena opción para los desarrolladores porque no todas las tiendas admiten múltiples APK.
Desventajas 1. La versión para x86 es difícil de hallar en las tiendas de aplicaciones.
2. La gran cantidad de versiones puede confundir a los usuarios.
Posibles riesgos Los usuarios con dispositivos x86 podrían instalar la versión para ARM.
Cómo evitar los riesgos La aplicación agrega comprobación de CPU antes de cargar bibliotecas nativas y guía a los usuarios para que instalen la versión correcta.

La diferencia más importante entre APK separados y múltiples es el nombre del paquete. Presentamos una aplicación de ejemplo, UC Browser. Podemos ver el sufijo “x86” en el nombre del paquete de UC Browser(X86). Y el sistema Android las considera dos aplicaciones distintas.



Figura 4. Nombre del paquete de UC Browser

A los desarrolladores les gusta esta opción porque no necesitan mantener la rama x86 para cada versión de la aplicación. Como la internet móvil cambia rápidamente, los desarrolladores tienen que actualizar sus aplicaciones para dispositivos móviles con mucha frecuencia para mantener el ritmo de las tendencias, pero los recursos de ingeniería de los desarrolladores son limitados. Con la opción de APK separados, se transige para posibilitar a los desarrolladores admitir más arquitecturas con un esfuerzo mínimo. La desventaja es que la versión x86 es difícil de hallar porque muy pocas veces se descarga como aplicación nueva.

El posible riesgo es que los usuarios que todavía no conocen la diferencia entre x86 y ARM instalen la versión para ARM. Si la aplicación agrega comprobación de CPU previa a la carga de la biblioteca nativa, evitará este riesgo y guiará a los usuarios hacia la descarga de la versión correcta.

Esta solución de APK separados es temporaria, no a largo plazo, y desaparecerá cuando más tiendas de aplicaciones admitan múltiples APK.

APK astuto

Tabla 5. Características para “APK astuto”

Tipo Detalle
Ventajas 1. Menor tamaño de APK que en la opción de un solo APK
2. Mejor rendimiento en cada dispositivo según CPU.
Desventajas Dos pasos de instalación.
Posibles riesgos N/D
Cómo evitar los riesgos N/D

Esta es una opción especial. La idea básica es descargar la biblioteca nativa en dos pasos. Se puede pensar en esta opción como un mecanismo de actualización controlado por la aplicación misma.

MoboPlayer es un ejemplo de aplicación que usa esta solución. Hay más información en la siguiente captura de pantalla.

 



Figura 3. Instalación en dos pasos de las bibliotecas del NDK de MoboPlayer

 

MoboPlayer es un reproductor multimedia Android basado en el proyecto de código fuente abierto FFMPEG. Tiene un solo APK. Para comenzar, el usuario se limita a descargar la aplicación sin tener que descargar incómodos archivos de bibliotecas del NDK. Cuando el usuario ejecuta por primera vez la aplicación, esta comprueba el tipo de CPU y luego guía al usuario a la descarga de los binarios optimizados para la arquitectura de CPU correspondiente, de modo que el usuario pueda obtener el máximo rendimiento.

Resumen

Existen varias soluciones para empaquetar y publicar aplicaciones basadas en el NDK de Android. Los desarrolladores deben conocer a fondo sus aplicaciones, en especial lo relativo al código nativo. ¿Cuál es su prioridad? ¿Optimizar el rendimiento y el consumo de energía? ¿El tamaño del APK? ¿La compatibilidad con varias arquitecturas de CPU? etc. A la vez, deben evitar el posible riesgo de descargar un APK erróneo, y para ello deben agregar en el código la comprobación de CPU, lo cual garantizará que se descargue la biblioteca nativa correcta. También hay que incluir un control de excepciones y ayuda para el usuario por si se produce una discordancia de APK. El objetivo final es que la experiencia del usuario sea la mejor en todas las arquitecturas de CPU.

Enlaces y recursos relacionados

Si desea conocer más acerca de las herramientas de Intel dedicadas a los desarrolladores para Android, visite la Zona para desarrolladores Intel® para Android.

Enlaces de consulta

https://software.intel.com/es-es/android

http://developer.android.com/google/play/publishing/multiple-apks.html

https://software.intel.com/es-es/articles/google-play-supports-cpu-architecture-filtering-for-multiple-apk

https://play.google.com/store/apps/details?id=com.sina.weibo

https://play.google.com/store/apps/details?id=com.android.chrome

https://play.google.com/store/apps/details?id=com.UCMobile.intl

https://play.google.com/store/apps/details?id=com.UCMobile.intl.x86

https://play.google.com/store/apps/details?id=com.clov4r.android.nil

http://www.moboplayer.com/moboplayer_en.html

Copyright © 2013 Intel Corporation. Todos los derechos reservados.

*Es posible que la propiedad de otros nombres y marcas corresponda a terceros.