2012-10-22 9 views
28

Motorola właśnie wypuściła telefon z systemem Android w wersji x86. Jestem trochę zdezorientowany, jak natywne aplikacje/biblioteki napisane dla ARM (na przykład netflix) mogą działać na tym telefonie.W jaki sposób natywny kod Androida napisany dla ARM działa na x86?

Byłbym wdzięczny, gdyby ktoś mógł wyjaśnić.

+0

Prawdopodobnie macierzysty kod ARM nie może działać na x86 lub przynajmniej potrzebuje emulatora. –

Odpowiedz

48

Tak, ARM natywny kod działa na x86 Intela wykorzystujących funkcję emulacji nazwie Houdiniego

Co to jest biblioteka nie czyta instrukcji ARM w locie i konwertuje je do równoważnych instrukcji x86. To jest powód, dla którego wiele aplikacji może działać tak jak na x86 bez konieczności budowania równoważnej biblioteki.

enter image description here

+0

Wyobrażam sobie, że typ aplikacji, w której programiści celowo używali NDK, jest ciężki i prawdopodobnie w czasie rzeczywistym. Nie wyobrażam sobie, że tłumaczenie kodowe będzie wspaniałą wiadomością. – marko

+1

Czy nie byłoby to możliwe w drugą stronę? Więc X86 do ARM? aby system Windows RT działał z aplikacjami x86? A czy osiągi są ogromne? – Yamcha

+0

To jest tylko na Androida. Nie wiem, jak Windows przenosi swoje aplikacje do obu architektury. Skuteczność jest minimalna. Nie słyszałem o skargach na temat aplikacji walczących na x86. –

9

Rzeczywiście można to inny kod natywny dla innej architekturze, nie wiem, jak Netflix jest uruchomiony, ale jeśli otwarte apk widać /lib/armeabi-v7a/, więc zakładam, że nie może być folder coś /lib/x86/

Edit: Właśnie sprawdzona aplikacja do zakupów w Amazon ma natywny kod dla arm i x86. Więc może tak wygląda Netflix.

+0

Myślę, że katalog główny to 'libs' nie' lib', nadal dobra odpowiedź – Blackbelt

0

W Trend Micro Safe Mobile Workforce, mamy czas pracy ramienia (nie Houdini Intela) dla rodzimej biblioteki w aplikacji na Androida. Abyśmy mogli obsługiwać APK z tylko biblioteką ARM na wydajnym serwerze x86.

0
  • Procesory są „Turing wypełnić” (do ograniczeń pamięciowych)
  • Procesory mają prosty deterministycznego zachowania, które mogą być symulowane z pamięcią skończonej maszyny Turinga

Dlatego oczywiste jest, że jakiekolwiek CPU może emulować dowolny procesor z wystarczającą ilością pamięci.

Trudne pytanie brzmi: jak to zrobić szybko.

Oprócz Houdiniego Intela, zdecydowanie zalecamy zapoznanie się z tym, jak to robi QEMU.

QEMU to wiodący sposób na uruchamianie ARM na x86. Jest to oprogramowanie GPL i jest wykorzystywane jako rdzeń emulatora Androida, z którego korzystają programiści Androida.

x86 na ARM ma mniej wsparcia, ale główne pojęcia powinny być podobne w odwrotnej kolejności.

W szczególności graj w trybie emulacji użytkownika. Z tym trybie można uruchomić statycznie połączonego ARM wykonywalny o gospodarzu x86 po prostu jako:

qemu-arm-static ./executable 

kilka pomysłów:

  • instrukcje są w języku instrukcji gospodarza
  • wywołania systemowe są przekazywane do host
Powiązane problemy