¿Cómo se ejecuta el código nativo de Android escrito para ARM en x86?

Motorola acaba de lanzar un teléfono Android basado en x86. Estoy un poco confundido sobre cómo las aplicaciones / bibliotecas nativas escritas para ARM (por ejemplo, netflix) pueden ejecutarse en este teléfono.

Estaría agradecido si alguien pudiera explicar.

Sí, el código nativo ARM se ejecuta en Intel x86 usando una característica de emulación llamada Houdini

Lo que esta biblioteca hace es leer instrucciones ARM sobre la marcha y las convierte en instrucciones x86 equivalentes. Esta es la razón por la cual muchas aplicaciones pueden funcionar igual que en x86 sin tener que crear una biblioteca equivalente.

enter image description here

Puede incluir diferentes códigos nativos para diferentes architectures, no está seguro de cómo se está ejecutando Netflix, pero si abre apk, puede ver /lib/armeabi-v7a/ , así que supongo que puede haber una carpeta como /lib/x86/

Editar: Acabo de revisar la aplicación de compras de Amazon que tiene código nativo para arm y x86. Así que tal vez así es como lo hace Netflix.

En Trend Micro Safe Mobile Workforce , tenemos un tiempo de ejecución ARM (no houdini de Intel) para la biblioteca nativa en las aplicaciones de Android. Para que podamos admitir la ejecución de APK con solo ARM lib en el poderoso servidor x86.

  • Las CPU están “completas” (hasta los límites de memoria)
  • Las CPU tienen un comportamiento determinista simple que se puede simular con máquinas de memoria finita de Turing

Por lo tanto, está claro que cualquier CPU puede emular cualquier CPU que tenga suficiente memoria.

La pregunta difícil es cómo hacerlo rápido .

Además del Houdini de Intel, recomiendo encarecidamente que estudies cómo lo hace QEMU.

QEMU es la mejor manera de ejecutar ARM en x86. Es el software GPL, y se utiliza como el núcleo del emulador de Android utilizado por los desarrolladores de Android.

x86 en ARM tiene menos soporte, pero los conceptos principales deberían ser similares a la inversa.

En particular, juega con el modo de emulación de usuario. Con ese modo, puede ejecutar un ejecutable ARM enlazado estáticamente en el host x86 simplemente como:

 qemu-arm-static ./executable 

Algunas ideas:

  • las instrucciones se traducen en instrucciones de host
  • las llamadas al sistema se envían al host