¿Cómo funciona 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 en cuanto a cómo las aplicaciones nativas/bibliotecas escritas para ARM(netflix, por ejemplo) pueden ejecutarse en este teléfono.

Estaría agradecido si alguien pudiera explicar.

Author: Ayush, 2012-10-22

4 answers

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

Lo que hace esta biblioteca es leer instrucciones ARM sobre la marcha y convertirlas en instrucciones x86 equivalentes. Esta es la razón por la que muchas aplicaciones pueden funcionar como está en x86 sin tener que construir una biblioteca equivalente.

introduzca la descripción de la imagen aquí

 51
Author: Royston Pinto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-22 05:44:53

En realidad puedes incluir código nativo diferente para diferentes arquitecturas, no estoy seguro de cómo se está ejecutando Netflix, pero si abres apk puedes ver /lib/armeabi-v7a/, por lo que asumo que puede haber una carpeta algo como /lib/x86/

Editar: Acabo de comprobar Amazon shopping app tiene código nativo para arm y x86. Así que tal vez así es como netflix lo hace también.

 9
Author: nandeesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-22 05:44:50

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

 0
Author: Sun Junwen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-02 03:09:05
  • Las CPU están "Turing completas" (hasta los límites de memoria)
  • Las CPU tienen un comportamiento determinista simple que se puede simular con máquinas de Turing de memoria finita

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

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

Además de Houdini de Intel, le recomiendo que estudie cómo lo hace QEMU.

QEMU es la forma principal de ejecutar ARM en x86. It GPL software, 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 deben ser similares a la inversa.

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

qemu-arm-static ./executable

Algunas ideas:

  • las instrucciones se traducen en instrucciones de host
  • las llamadas al sistema se reenvían al host
 0
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-12 17:10:46