Aplikacje na Androida dla “ armeabi-v7a ” i “ x86 ” architektura: SoC kontra procesor kontra ABI

Podczas pobierania aplikacji na Androida czasami widziałem aplikacje dla armeabi-v7a i x86 architektura.

Czytałem odniesienia do armeabi-v7a i x86 architektura. Jednak ostatecznie nie mogłem określić, które procesory i architektury mobilne należą do armeabi-v7a, a które należą do x86.

Zgodnie z moją wiedzą, procesory mobilne powszechnie używane w urządzeniach z Androidem to Snapdragon (firmy Qualcomm), MediaTek, Exynos (firmy Samsung) i Kirin (firmy Huawei). Prawie wszystkie marki wyjaśniają specyfikacje smartfona i prawie wszystkie specyfikacje mówią procesor mobilny jest 64-bitowy czy nie. Czy powinienem stwierdzić, że 64-bitowe procesory mobilne (Snapdragon, MediaTek, Exynos lub Kirin) należą do architektury ARM?

EDIT:
Aby dowiedzieć się, który SoC obsługuje armeabi-v7a APK na Androida, a który SoC obsługuje x86 APK na Androida, przejrzałem specyfikacje MediaTek Helio X30 i Snapdragon 855. Specyfikacja Helio X30 mówi, że obsługuje podwójne -core ARM Cortex-A73 i czterordzeniowy ARM Cortex-A53, ale ARM i nigdzie nie wspomniano w specyfikacji Snapdragona 855. Powinienem więc stwierdzić, że Helio X30 będzie obsługiwał armeabi-v7a aplikacje na Androida, a Snapdragon 855 nie będzie obsługiwał armeabi-v7a apps?

Proszę wyjaśnić moje niejasności.

Odpowiedź

Oto moje niepełne podsumowanie moich uwag na temat temat, ale wystarczający, aby odpowiedzieć na Twoje pytanie.

ZESTAW INSTRUKCJI:

Procesory są wykonane z matryc półprzewodnikowych, zwykle z monokrystalicznego krzemu klasy elektronicznej. Nie znają angielskiego ani żadnego innego ludzkiego języka, rozumieją tylko 0 i 1. Projektant procesora mówi nam więc, w czym sekwencję zera „si jedynkę” możemy poinstruować dla tego konkretnego procesora. Ten numeryczny język instrukcji jest znormalizowany jako Machine Language, a zestaw instrukcji maszynowych nosi nazwę Instruction Set. Procesor może działać tylko na określonym typie zestawu instrukcji.
Zestawy instrukcji mogą być 8/16/32/64-bitowe (określa, ile instrukcji procesor może przetwarzać jednocześnie ), z których ostatnie 2 są obecnie popularne.

JĘZYKI NISKIEGO POZIOMU:

Jednak pisanie kodu programu (instrukcji) bezpośrednio w języku maszynowym (pliku wykonywalnego) jest prawie niemożliwe, ponieważ napisanie i debugowanie odpowiednio większego programu (który możemy napisać w ciągu kilku godzin w dzisiejszych czasach) zajmie lata. aby uspokoić programistów, język asemblera e został opracowany, nadal jest to język specyficzny dla procesora, ale stosunkowo łatwy do zrozumienia. Kod napisany w asemblerze jest konwertowany na kod maszynowy przez Assembler – program napisany w języku maszynowym. Oba te języki są nazywane językami niskiego poziomu.

JĘZYKI WYSOKIEGO POZIOMU:

Aby jeszcze bardziej zmniejszyć wysiłek człowieka związany z komunikacją ze sprzętem, opracowano języki wysokiego poziomu, które nie są związane z określonym zestawem instrukcji (oznaczającym określoną architekturę). Są one identyczne z językami ludzkimi, dzięki czemu są łatwe do napisania, zrozumienia, debugowania i zastosowania w wielu architekturach. Kod napisany w języku wysokiego poziomu jest konwertowany na język niskiego poziomu przez Compiler – program napisany w języku niskiego poziomu. Jednym z najczęściej używanych języków wysokiego poziomu jest C. Ale czasami kod nie jest wstępnie kompilowany do kodu maszynowego, zamiast tego wykonywany (lub kompilowany podczas wykonywania) bezpośrednio przez Interpreter. Java jest jednym z takich języków „napisz raz, uruchom wszędzie” (WORA) , który jest kompilowany do byte-code, a następnie interpretowany przez Virtual Machine – ponownie skompilowany program.

BINARNY INTERFEJS APLIKACJI (ABI):

Ponieważ program (kod) niezależny od architektury może zostać przekonwertowany na kod zależny od architektury dla dowolnego procesora, obowiązkiem kompilatora jest dbanie o wszystkie wymagania określonej architektury. Application Binary Interface (ABI) definiuje. Mówiąc prosto, ABI reprezentuje jedną lub więcej określonych architektur. Dalsze szczegóły dotyczące wbudowanych ABI wymagają wglądu w etapy asemblacji i kompilacji; kod obiektowy, format wykonywalny i możliwy do połączenia (ELF), statyczny (archiwizacja) i dynamiczne łączenie bibliotek itp.

A teraz do pytania:

CO TO JEST x86 I ARM?

x86 to rodzina zestawów instrukcji, głównie opracowanych i produkowanych przez Intel i AMD. ARM to kolejna rodzina, zaprojektowana przez jeden podmiot ARM Holdings i licencjonowana dla wielu producentów rozwiązań wbudowanych, w tym Qualcomm, Mediatek, Samsung i Huawei. Snapdragon, Exynos i Kirin to ich marki. Nie są producentami procesorów, ale mają licencje na dołączanie procesorów ARM z własnymi obwodami SoC (System on Chip).

CO TO JEST SoC?

System on Chip (SoC) to mały obwód zawierający procesory wraz z innymi komponentami, takimi jak GPU, RAM, Flash / eMMC (odpowiednik HDD lub SSD) , Moduł WiFi i bluetooth, łączność USB, UART (porty szeregowe), JTAG (protokół komunikacji szeregowej bardzo niskiego poziomu), GPS, modemy (do łączności komórkowej) i prawdopodobnie inne.

ARM ABI:

Chociaż większość aplikacji na Androida jest napisana w Javie, można programować w językach natywnych, takich jak C i C ++, który należy skompilować. Android zapewnia własny Native Development Kit ( NDK ), w tym (biblioteki, pliki nagłówkowe i) kompilator, który może kompilować kod dla wielu ABI, w tym armeabi-v7a (armhf w społeczności Linuksa) i x86.

Sama aplikacja na Androida (Java) nie „t jest specyficzne dla architektury. Podczas tworzenia aplikacji Android SDK konwertuje źródło Java do kodu bajtowego (pliki .class), a następnie kompiluje je do D alvik EX ecutable (.dex), który jest spakowany z plikami .apk. Ten kod bajtowy Dalvik jest interpretowany i uruchamiany w oddzielnej instancji Dalvik Virtual Machine / ART dla każdej aplikacji przez proces o nazwie Zygote. Lub może być trwale skompilowany do natywnego kodu maszynowego (.odex lub ) zgodnie z architekturą urządzenia podczas instalacji aplikacji (lub później ). Ale jeśli plik apk (zip) dodatkowo zawiera pliki binarne / biblioteki ELF, są one specyficzne dla architektury. Programiści zwykle uwzględniają w swoich aplikacjach biblioteki natywne dla wielu architektur.

Aplikacje natywne / programy / pliki binarne / pliki wykonywalne / biblioteki utworzone za pomocą zestawów kompilatorów przeznaczonych dla ARM Embedded ABI v7a ( armeabi-v7a ) może działać na Application profile of 7th version of ARM processors ( Armv7-A ).
Kod skompilowany za pomocą łańcuchów narzędzi dostarczonych przez innych dostawców, przeznaczony dla tej samej architektury (choć z różnymi nazwami ABI) powinien również działać na urządzeniach z Androidem.

32-BIT VS. 64-bitowy:

Procesor ARM może być 32- lub 64-bitowy. Od producentów SoC zależy, co chcą zbudować za pomocą swojego systemu wbudowanego, np. Snapdragon może być 32-bitowy lub 64-bitowy. 32-bitowe procesory ARM zostały ulepszone pod kątem wydajności, a nowe możliwości zostały dodane z wersji 2 do wersji 7. W ARMv8 wprowadzono obsługę 64-bitową.

Aby dowiedzieć się, czy urządzenie jest 32-bitowe czy 64- bit, musisz sprawdzić specyfikacje jego SoC, a następnie jego procesora. Na przykład SoC w Redmi Note 4 to Qualcomm Snapdragon 625 (MSM 8953) , który zawiera procesor Cortex-A53. Ze specyfikacji technicznej Cortex-53 wynika, że jest on oparty na architekturze ARMv8, która może przetwarzać 2 typy zestawów instrukcji: aarch64 (których używa Android „s arm64-v8a ABI) i aarch32 (który z Androidem „s armeabi-v7a używa interfejsu ABI tj. kompatybilny wstecz z ARMv7 ).

Może więc uruchamiać pliki binarne / biblioteki skompilowane dla obu tych ABI, ale nie dla x86 lub armeabi (nazywany armel w społeczności Linuksa; który dotyczył architektury ARMv5/v6 i był usunięto w NDK r17).


POWIĄZANE: Czy na 64-bitowym urządzeniu sprzętowym można uruchomić 32-bitową wersję Androida?

Komentarze

Odpowiedź

Liczba urządzeń sprzętowych korzystających z x86 nigdy nie była zbyt duża. Kilka lat temu Intel miał kilka procesorów x86 (Intel Atom), które były używane w niektórych tabletach z Androidem (np. Samsung Galaxy Tab 10.3).

Jednak te tablety nigdy nie osiągnęły dużej ilości na rynku. I nie jestem pewien, czy na rynku jest jakiś smartfon lub tablet x86, który nadal korzysta z procesora x86.

Jest jednak jeden bardzo częsty przypadek użycia, w którym napotykasz „urządzenie z Androidem x86”: Android Emulator.

Ponieważ komputer z uruchomionym emulatorem zwykle używa emulatorów procesora x86, które uruchamiają obraz x86 (zamiast obrazu opartego na ARMv7 lub ARMv8 / ARM64), mogą korzystać z technik wirtualizacji zintegrowanych z procesorem, co skutkuje znacznie większa prędkość.

Komentarze

  • Dziękuję za szczegółowe wyjaśnienie. Chciałbym wziąć przykład. Jeśli mam rację, czy to procesor, czy SoC, termin x86 jest powiązany z Intelem i AMD. Chciałbym wziąć przykład.
  • Przejrzałem przez link apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -release do pobrania aplikacji Firefox dla Androida. Widziałem tam dwa warianty; Firefox Android APK dla architektury armeabi-v7a i Firefox Android APK dla architektury x86. Moje zamieszanie zaczęło się od tego miejsca.
  • SoC dobrze znanych urządzeń z Androidem to Snapdragon, MediaTek, Exynos, Kirin itp. Dlatego uważam, że muszę pobrać aplikację Android dla ARM. Czy mam rację?
  • @ user741975 W tej chwili, jeśli wybierzesz armeabi-v7a, będzie działać z szansą większą niż 99%. Jeśli masz aktualne urządzenie klasy średniej lub wyższej, opcją może być również arm64-v8a. W każdym razie możesz go po prostu pobrać i spróbować zainstalować. Jeśli architektura jest zła, instalacja po prostu się nie powiedzie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *