2012-10-22 3 views
28

Motorola hat gerade ein x86-basiertes Android-Handy veröffentlicht. Ich bin ein wenig verwirrt, wie native Apps/Bibliotheken für ARM (Netflix zum Beispiel) auf diesem Telefon ausgeführt werden können.Wie läuft der für ARM geschriebene native Android-Code auf x86?

Ich wäre dankbar, wenn jemand erklären könnte.

+0

Wahrscheinlich ARM native Code kann nicht auf x86 ausgeführt werden, oder zumindest einen Emulator benötigt. –

Antwort

48

Ja, ARM nativen Code läuft auf Intel x86 eine Emulationsfunktion Houdini

Was diese Bibliothek tut, ist liest ARM-Anweisungen im Fluge und wandelt sie in äquivalente x86-Befehle genannt werden. Dies ist der Grund, warum viele Apps wie auf x86 funktionieren, ohne dass tatsächlich eine entsprechende Bibliothek erstellt werden muss.

enter image description here

+0

Ich stelle mir vor, dass die Art der Anwendung, wo Entwickler das NDK absichtlich verwendet haben, rechenintensiv und möglicherweise in Echtzeit sind. Ich kann mir nicht vorstellen, dass Code-Übersetzung eine gute Nachricht sein wird. – marko

+1

Wäre es nicht möglich, es umgekehrt zu machen? Also x86 zu ARM? damit Windows RT mit x86-Apps funktioniert? Und ist die Leistung riesig? – Yamcha

+0

Dies ist nur für Android. Ich weiß nicht, wie Windows seine Apps auf beide Archs portiert. Performance-Hit ist ziemlich minimal. Ich habe noch nie von Beschwerden über Apps gehört, die auf x86 kaempfen. –

9

Sie sind tatsächlich verschiedene native Code für unterschiedliche Architektur, nicht sicher, wie Netflix läuft, aber wenn Sie offen apk Sie /lib/armeabi-v7a/ sehen können, so nehme ich an es

bearbeiten einen Ordner so etwas wie /lib/x86/ sein kann: nur ich überprüfte Amazon Shopping App hat es nativen Code für Arm und x86. Vielleicht ist das auch Netflix.

+0

Ich denke, dass Verzeichnisstamm ist 'libs' nicht' lib', immer noch eine nette Antwort – Blackbelt

0

In Trend Micro Safe Mobile Workforce haben wir eine ARM-Laufzeit (nicht Intels Houdini) für native Bibliothek in Android-Apps. Damit können wir das Ausführen von APK mit nur ARM lib auf einem leistungsfähigen x86-Server unterstützen.

0
  • CPUs „Turing vervollständigt“ (bis Speicherbegrenzungen)
  • CPUs hat ein einfaches deterministisches Verhalten, die mit endlichen Speichern Turing Maschinen simuliert werden können

Daher ist es klar, dass jede CPU kann jede CPU emulieren, die genügend Speicher hat.

Die schwierige Frage ist, wie das zu tun schnell.

Neben Intels Houdini empfehle ich dringend, dass Sie studieren, wie QEMU es tut.

QEMU ist der führende Weg, um ARM auf x86 laufen zu lassen. Es GPL-Software, und wird als Kern des Android-Emulators von Android-Entwicklern verwendet.

x86 auf ARM hat weniger Unterstützung, aber die wichtigsten Konzepte sollten umgekehrt ähnlich sein.

Spielen Sie insbesondere mit dem Userland-Emulationsmodus. Mit diesem Modus können Sie eine statisch gelinkte ARM ausführbare Datei auf x86-Host ausgeführt werden einfach als:

qemu-arm-static ./executable 

ein paar Ideen:

  • Befehle werden in Hostinstruktionen übersetzt
  • Systemaufrufe an die weitergeleitet werden host
Verwandte Themen