Aplikace pro Android pro “ armeabi-v7a ” a “ x86 ” architektura: SoC vs. procesor vs. ABI

Při stahování aplikací pro Android jsem někdy viděl aplikace pro armeabi-v7a a x86 architektura.

Přečetl jsem několik odkazů na armeabi-v7a a x86 architektura. Nakonec jsem ale nemohl dokončit, ke kterým mobilním procesorům a architekturám patří armeabi-v7a a které patří k x86.

Podle mých znalostí jsou mobilními procesory běžně používanými v zařízeních Android Snapdragon (od společnosti Qualcomm), MediaTek, Exynos (od společnosti Samsung) a Kirin (od společnosti Huawei). Téměř všechny značky vysvětlují specifikace smartphonu a téměř všechny specifikace uvádějí mobilní procesor je 64bitový nebo ne. Měl bych dojít k závěru, že 64bitové mobilní procesory (Snapdragon, MediaTek, Exynos nebo Kirin) patří do architektury ARM?

EDIT:
Pochopit, který SoC podporuje armeabi-v7a Android apk a který SoC podporuje x86 Android apk, prošel jsem specifikacemi MediaTek Helio X30 a Snapdragon 855. Specifikace Helio X30 říká, že podporuje dual -core ARM Cortex-A73 a čtyřjádrový ARM Cortex-A53, ale ARM i s není nikde uvedeno ve specifikaci Snapdragon 855. Takže bych měl dojít k závěru, že Helio X30 bude podporovat armeabi-v7a aplikace pro Android a Snapdragon 855 nebude podporovat armeabi-v7a aplikace?

Upřesněte prosím mé zmatky.

Odpověď

Zde jsou mé neúplné shrnuté poznámky k téma, ale dost na zodpovězení vaší otázky.

INSTRUKČNÍ SADA:

Procesory jsou vyrobeny z polovodičových matric, obvykle monokrystalického křemíku elektronické kvality. Neznají anglicky ani žádný jiný lidský jazyk, rozumí pouze 0 a 1. Návrhář procesoru nám tedy říká, v čem posloupnost nula a jedna můžeme instruovat konkrétní procesor. Tento numerický jazyk instrukcí je standardizován jako Machine Language a sada instrukcí stroje se nazývá Instruction Set. Procesor může jednat pouze s konkrétním typem sady instrukcí.
Sady instrukcí mohou být 8/16/32 / 64bitové (definuje, kolik instrukcí může procesor zpracovat současně) ), poslední 2 jsou dnes běžné.

JAZYKY NÍZKÉ ÚROVNĚ:

Psaní programového kódu (pokynů) přímo ve strojovém jazyce (spustitelný soubor) je však téměř nemožné, protože psaní a ladění přiměřeně většího programu (který dnes dokážeme napsat za několik hodin) bude trvat roky. uklidnit programátory, Assembly Languag Byl vyvinut, stále jazyk specifický pro procesor, ale relativně snadno srozumitelný. Kód napsaný v assembleru se převede na strojový kód programem Assembler – napsaným v strojovém jazyce. Oba tyto jazyky se nazývají jazyky nízké úrovně.

JAZYKY NA VYSOKÉ ÚROVNI:

Aby se dále snížilo lidské úsilí při komunikaci s hardwarem, byly vyvinuty jazyky na vysoké úrovni, které nejsou vázány na konkrétní sadu instrukcí (označující konkrétní architekturu). Jsou identické s lidskými jazyky, a proto je snadné je psát, rozumět jim, ladit je a aplikovat na více architektur. Kód napsaný v jazyce vysoké úrovně je převeden do jazyka nízké úrovně pomocí Compiler – programu napsaného v jazyce nízké úrovně. Jedním z nejčastěji používaných jazyků na vysoké úrovni je jazyk C. Ale někdy kód není předkompilován do strojového kódu, místo toho jej přímo spouští (nebo kompiluje během provádění) Interpreter. Java je jedním z takových „psát jednou, spouštět kdekoli“ (WORA) jazyky, který je kompilován do byte-code a poté interpretován Virtual Machine – opět kompilovaný program.

BINÁRNÍ ROZHRANÍ APLIKACE (ABI):

Protože program (kód) nezávislý na architektuře lze převést na kód závislý na architektuře pro jakýkoli procesor, je povinností kompilátoru postarat se o všechny požadavky konkrétní architektury. Definuje aplikační binární rozhraní (ABI). Jednoduše ABI představuje jednu nebo více specifických architektur. Další podrobnosti o vestavěných ABI vyžadují nahlédnutí do fází sestavování a kompilace; objektový kód, spustitelný a spojitelný formát (ELF), statické (archivace) a dynamické propojení knihoven atd.

Nyní přicházím na vaši otázku:

CO JSOU x86 A ARM?

x86 je rodina instrukčních sad, které byly vyvinuty a vyrobeny hlavně společnostmi Intel a AMD. ARM je další rodina navržená jedinou entitou ARM Holdings a je licencována mnoha výrobcům vestavěných řešení včetně společností Qualcomm, Mediatek, Samsung a Huawei. Snapdragon, Exynos a Kirin jsou jejich obchodní značky. Nejsou výrobci procesorů, ale mají licence na zahrnutí procesorů ARM do vlastních obvodů System on Chip (SoC).

CO JE SoC?

Systém na čipu (SoC) je malý okruh, který zahrnuje procesory spolu s dalšími součástmi, jako jsou GPU, RAM, Flash / eMMC (ekvivalent HDD nebo SSD) , WiFi a bluetooth modul, USB připojení, UART (sériové porty), JTAG (sériový komunikační protokol velmi nízké úrovně), GPS, modemy (pro mobilní připojení) a případně další.

ARM ABI:

Ačkoli je hlavní část aplikací pro Android napsána v jazyce Java, lze programovat v nativních jazycích, jako jsou C a C ++, který je třeba kompilovat. Android poskytuje vlastní sadu Native Development Kit ( NDK ) včetně (knihoven, souborů záhlaví a) kompilátoru, který dokáže kompilovat kód pro více ABI včetně armeabi-v7a (armhf v linuxové komunitě) a x86.

Samotná aplikace pro Android (Java) není specifický pro architekturu. Během procesu vytváření aplikace Android SDK převádí zdroj Java na bytecode (.class soubory) a poté jej zkompiluje do D alvik EX ecutable (.dex) soubor, který je nabitý soubory .apk. Tento dalvikovský bytecode je interpretován a spuštěn v samostatné instanci Dalvik Virtual Machine / ART pro každou aplikaci procesem s názvem Zygote. Nebo může být trvale zkompilován do nativního strojového kódu (.odex nebo ) podle architektury zařízení během instalace aplikace (nebo později ). Pokud ale soubor apk (zip) navíc obsahuje binární soubory / knihovny ELF, jsou to specifické pro architekturu. Vývojáři obvykle do svých aplikací zahrnují nativní knihovny pro více architektur.

Nativní aplikace / programy / binární soubory / spustitelné soubory / knihovny vytvořené pomocí sad kompilátorů cílených na ARM Embedded ABI v7a ( armeabi-v7a ) lze spustit na Application profile of 7th version of ARM processors ( Armv7-A ).
Kód zkompilovaný s nástrojovými řetězci poskytnutými jinými dodavateli, cílící na stejnou architekturu (i když s různými názvy ABI), by měl běžet také na zařízeních Android.

32-BIT VS. 64-BIT:

Procesor ARM může být 32bitový nebo 64bitový. Záleží na výrobcích SoC, co chtějí se svým vestavěným systémem postavit, např. Snapdragon může být 32bitový nebo 64bitový. 32bitové procesory ARM byly vylepšeny z hlediska výkonu a od verze 2 do verze 7 byly přidány nové funkce. V ARMv8 byla zavedena 64bitová podpora.

Chcete-li zjistit, zda je zařízení 32bitové nebo 64bitové bit, musíte zkontrolovat specifikace jeho SoC a poté jeho procesoru. Například SoC v Redmi Note 4 je Qualcomm Snapdragon 625 (MSM 8953) , který obsahuje procesor Cortex-A53. Z technických specifikací Cortex-53 je zřejmé, že je založen na ARMv8 architektuře, která dokáže zpracovat 2 typy instrukčních sad: aarch64 (které Android s arm64-v8a ABI používá) a aarch32 (který Android „s armeabi-v7a ABI používá tj. zpětně kompatibilní s ARMv7 ).

Může tedy spouštět binární soubory / knihovny zkompilované pro oba tyto ABI, ale ne pro x86 nebo armeabi (v komunitě Linux se nazývá armel ; která cílila na architekturu ARMv5/v6 a byla odstraněno v NDK r17).


SOUVISEJÍCÍ: Mohlo by 64bitové hardwarové zařízení používat 32bitovou verzi systému Android?

Komentáře

Odpověď

Počet hardwarových zařízení, která používají x86, nebyl nikdy příliš vysoký. Před několika lety měla společnost Intel několik procesorů x86 (Intel Atom), které byly použity v některých tabletech s Androidem (např. Samsung Galaxy Tab 10.3).

Tyto tablety však na trhu nikdy nedosáhly vysokého objemu. A nejsem si jistý, zda je na trhu nějaký smartphone nebo tablet x86, který stále používá procesor x86.

Existuje však jeden velmi běžný případ použití, kdy narazíte na „zařízení x86 pro Android“: Android Emulátor.

Vzhledem k tomu, že počítač se spuštěným emulátorem obvykle používá emulátory CPU x86, které spouští obraz x86 (místo obrazu založeného na ARMv7 nebo ARMv8 / ARM64), mohou využívat techniky integrované virtualizace CPU, které mnohem vyšší rychlost.

Komentáře

  • Děkujeme za podrobné vysvětlení. Chtěl bych si vzít příklad. Pokud mám pravdu, ať už jde o procesor nebo SoC, pojem x86 souvisí s Intel a AMD. Rád bych si vzal příklad.
  • Prošel jsem odkazem apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -vydat pro stažení aplikace Firefox pro Android apk. Viděl jsem tam dvě varianty; Firefox pro Android pro architekturu armeabi-v7a a Firefox pro Android pro architekturu x86. Od té doby můj zmatek začal.
  • SoC známých zařízení se systémem Android jsou Snapdragon, MediaTek, Exynos, Kirin atd. Proto věřím, že si musím stáhnout apk pro Android pro ARM. Mám pravdu?
  • @ user741975 V tuto chvíli, pokud zvolíte armeabi-v7a, bude spuštěna s šancí větší než 99%. Pokud máte aktuální zařízení střední třídy nebo vyšší třídy, může být také arm64-v8a možností. Můžete si jej jednoduše stáhnout a zkusit nainstalovat. Pokud je architektura špatná, instalace selže.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *