Podczas pobierania aplikacji na Androida czasami widziałem aplikacje dla armeabi-v7a
i x86
architektura.
Czytałem kilka odniesień do armeabi-v7a
i x86
architektura. Jednak ostatecznie nie udało mi się określić, które mobilne procesory i architektury należą do armeabi-v7a
, a które 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ę zer i jedynek 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 językiem specyficznym 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 do wielu architektur. 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, a zamiast tego wykonywany (lub kompilowany podczas wykonywania) bezpośrednio przez Interpreter
. Java jest jednym z takich języków „pisz raz, uruchom wszędzie” (WORA) , który jest kompilowany do byte-code
, a następnie interpretowany przez Virtual Machine
– ponownie skompilowany program.
APPLICATION BINARY INTERFACE (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.
Teraz przechodzę do Twojego 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 na kod bajtowy (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żna uruchomić na Application profile of 7th version of ARM processors
( Armv7-A ).
Kod skompilowany z łańcuchami narzędzi dostarczonymi 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-BIT:
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
(w którym Android „s armeabi-v7a ABI jest kompatybilny wstecz z ARMv7
).
Może więc uruchamiać pliki binarne / biblioteki skompilowane dla obu tych ABI, ale nie dla x86 lub armeabi
(zwany armel w społeczności Linuksa; który dotyczył architektury ARMv5/v6
i był usunięty 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żego wolumenu na rynku. I nie jestem pewien, czy na rynku jest jakikolwiek 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 PC, na którym działa emulator, zwykle używa emulatorów procesora x86, które uruchamiają obraz x86 (zamiast obrazu opartego na ARMv7 lub ARMv8 / ARM64), mogą korzystać ze zintegrowanych technik wirtualizacji procesora, 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. 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.
armeabi
tylko dla obsługi wstecznej.