Pokemon Go se estrena hoy pero tristemente he visto en algún lugar de Internet que afirma que Niantic ha afirmado que la app es no es compatible con dispositivos con procesador intel (en mi caso asus zenfone 5). Así que me pregunto por qué el tipo de procesador será uno de los factores determinar si la aplicación es compatible con el dispositivo . Se agradece cualquier ayuda. =)
Respuesta
¿Demasiados anuncios?Nota: Esta respuesta cubre otras aplicaciones además de Pokémon Go, ya que Pokémon Go se ha actualizado para funcionar con procesadores x86
Las aplicaciones contienen múltiples partes dependientes e independientes de la arquitectura:
-
Independiente:
- Código Dalvik
- Recursos Android
- el Manifiesto
-
Dependiente:
- Bibliotecas
- Código ensamblador especial en el ejecutable Dalvik (raro pero posible)
Lo más importante son las bibliotecas.
Son objetos compartidos ( .so
), al igual que las DLL de Windows, que contienen bytecode .
Se compilan utilizando el NDK (kit de desarrollo nativo) de Android y se compilan para una arquitectura específica (como la compilación de aplicaciones de Linux utilizando un compilador cruzado, es decir, compilar código ARM en una máquina x86).
En nuestro ejemplo, esta biblioteca sólo puede utilizarse en un entorno ARM si se entiende el bytecode ARM.
Algunos dispositivos Android x86 (teléfonos/tabletas comerciales, no los emuladores) vienen con un kit de herramientas de traducción ARM especial, aka. libhoudini
. Básicamente traduce las instrucciones ARM a instrucciones x86.
Sin embargo, esas instrucciones no están optimizadas para ejecutarse en hardware x86 y, por tanto, dan lugar a un bajo rendimiento y a un elevado uso de la batería (esta última es una de las razones por las que el x86 no se utiliza principalmente en los procesadores para móviles).
Los verdaderos problemas son los desarrolladores :
O bien:
-
Por alguna razón, no compilan sus bibliotecas (que a menudo contienen código propietario) para cualquier otra arquitectura.
-
Utilizan bytecode especializado, sólo disponible en ARM por lo que cualquier traductor ARM o libhoudini falla.
Por suerte, Pokémon Go recibió una actualización que permite a los usuarios de dispositivos x86 ejecutar la aplicación, pero otras aplicaciones (sobre todo los juegos) sí requieren un dispositivo ARM real.