Comment fonctionne le code Android natif écrit pour ARM sur x86?

Motorola vient de sortir un téléphone Android basé sur x86. Je suis un peu confus quant à la façon dont les applications/bibliothèques natives écrites pour ARM(netflix par exemple) peuvent fonctionner sur ce téléphone.

Je serais reconnaissant si quelqu'un pouvait expliquer.

29
demandé sur Ayush 2012-10-22 09:15:52

4 réponses

Oui, le code natif ARM s'exécute sur Intel x86 en utilisant une fonctionnalité d'émulation nommée Houdini

Cette bibliothèque lit les instructions ARM à la volée et les convertit en instructions x86 équivalentes. C'est la raison pour laquelle de nombreuses applications peuvent fonctionner telles quelles sur x86 sans avoir à construire une bibliothèque équivalente.

entrez la description de l'image ici

51
répondu Royston Pinto 2012-10-22 05:44:53

Vous pouvez réellement inclure du code natif différent pour différentes architectures, Je ne sais pas comment Netflix fonctionne, mais si vous ouvrez apk, vous pouvez voir /lib/armeabi-v7a/, donc je suppose qu'il peut y avoir un dossier quelque chose comme /lib/x86/

Edit: je viens de vérifier L'application Amazon shopping, il a un code natif pour arm et x86. Alors peut-être que c'est comme ça que netflix le fait aussi.

9
répondu nandeesh 2012-10-22 05:44:50

Dans Trend Micro safe Mobile Workforce , nous avons un runtime ARM (pas Houdini D'Intel) pour la bibliothèque native dans les applications Android. Afin que nous puissions soutenir l'exécution D'APK avec seulement ARM lib sur un puissant serveur x86.

0
répondu Sun Junwen 2015-05-02 03:09:05
  • les processeurs sont "Turing complete" (jusqu'aux limites de mémoire)
  • les processeurs ont un comportement déterministe simple qui peut être simulé avec des machines de Turing à mémoire finie

Par conséquent, il est clair que n'importe quel CPU peut émuler n'importe quel CPU avec suffisamment de mémoire.

La question difficile est de savoir comment le faire rapidement.

Outre Houdini D'Intel, je vous recommande fortement d'étudier comment QEMU le fait.

QEMU est le principal moyen d'exécuter ARM sur x86. Il GPL logiciel, et est utilisé comme le noyau de L'émulateur Android utilisé par les développeurs Android.

X86 sur ARM a moins de support, mais les concepts principaux devraient être similaires à l'inverse.

En particulier, jouez avec le mode d'émulation userland. Avec ce mode, vous pouvez exécuter un exécutable ARM lié statiquement sur un hôte x86 simplement comme:

qemu-arm-static ./executable

Quelques idées:

  • les instructions sont traduites en Instructions de l'hôte
  • les appels système sont transmis à l'hôte
0