Android-alkalmazások a “ armeabi-v7a ” és “ x86 ” architektúra: SoC vs. Processor vs ABI

Android-alkalmazások letöltése közben néha láttam alkalmazásokat a következőhöz: armeabi-v7a és x86 architektúra.

Olvastam néhány hivatkozást a armeabi-v7a és a x86 architektúra. A végén azonban nem tudtam véglegesíteni, hogy mely mobil processzorok és architektúrák tartoznak a armeabi-v7a és melyek a x86.

Tudomásom szerint az Android-eszközökben általában használt mobil processzorok a Snapdragon (Qualcomm), a MediaTek, az Exynos (a Samsung) és a Kirin (a Huawei) által. Szinte minden márka elmagyarázza az okostelefon specifikációit, és szinte az összes specifikáció szerint a mobil processzor 64 bites vagy sem. Meg kell-e állapítanom, hogy a 64 bites mobil processzorok (Snapdragon, MediaTek, Exynos vagy Kirin) az ARM architektúrához tartoznak?

SZERKESZTÉS:
Annak megértése, hogy melyik SoC támogatja az armeabi-v7a Android apk alkalmazást, és melyeket támogatja a x86 Android apk, átnéztem a MediaTek Helio X30 és a Snapdragon 855 specifikációkat. A Helio X30 specifikációja szerint a kettős -core ARM Cortex-A73 és négymagos ARM Cortex-A53, de ARM i A Snapdragon 855 specifikációiban sehol nem említik. Tehát arra a következtetésre kell jutnom, hogy a Helio X30 támogatja az armeabi-v7a androidos alkalmazásokat, a Snapdragon 855 pedig a armeabi-v7a alkalmazások?

Kérjük, tisztázza zavaraimat.

Válasz

Itt vannak a hiányos összefoglaló megjegyzéseim a tárgy, de elég a kérdés megválaszolásához.

UTASÍTÁS:

A processzorok félvezető matricákból készülnek, általában elektronikus minőségű monokristályos szilíciumból. Nem tudnak angolul vagy más emberi nyelvet, csak 0 és 1 értenek. Tehát a processzor tervezője elmondja nekünk, mit nulla “s” és egy “s sorrendet utasíthatjuk az adott processzorra. Az utasítások ezt a numerikus nyelvét Machine Language néven szabványosítják, a gépi utasítások halmazát pedig Instruction Set. A processzor csak az utasításkészlet meghatározott típusa (i) alapján tud működni.
Az utasításkészletek lehetnek 8/16/32/64 bitesek (meghatározza, hogy egy processzor hány utasítást tud egyszerre feldolgozni) ), az utóbbi 2 napjainkban a közös.

ALACSONY NYELVEK:

De a programkód (utasítások) közvetlen gépi nyelven történő írása (a futtatható fájl) szinte lehetetlen, mivel egy ésszerűen nagyobb program megírása és hibakeresése évekbe telik (amit manapság néhány órán belül írhatunk). hogy könnyedén vigyük a programozókat, a Assembly Language e kifejlesztésre került, még mindig processzor-specifikus nyelv, de viszonylag könnyen érthető. Az Assembly Language-ben írt kódot Assembler – gépi nyelven írt program alakítja gépkódokká. Ezeket mind alacsony szintű nyelveknek nevezzük.

MAGAS SZINTŰ NYELVEK:

Annak érdekében, hogy tovább csökkentsük az emberi erőfeszítéseket a hardverrel való kommunikáció során, olyan magas szintű nyelveket fejlesztettek ki, amelyek nem kötődnek egy adott utasításkészlethez (egy adott architektúrát jelölnek). Ezek megegyeznek az emberi nyelvekkel, ezért könnyen írhatók, megérthetők, hibakereshetők és több architektúrára alkalmazhatók. A magas szintű nyelven írt kódot Compiler – alacsony szintű nyelven írt program alakítja alacsony szintű nyelvvé. Az egyik leggyakrabban használt magas szintű nyelv a C. De néha a kódot nem fordítják előre gépi kódra, hanem közvetlenül a Interpreter hajtja végre (vagy fordítja össze a végrehajtás során). A Java egy ilyen “egyszer ír, futtass bárhova” (WORA) nyelv egyike, amelyet byte-code fordítanak, majd a – ismét egy lefordított program.

ALKALMAZÁS BINÁRIS FELÜLET (ABI):

Mivel egy architektúrától független program (kód) bármely processzor számára átalakítható architektúra-függő kódra, a fordító feladata, hogy gondoskodjon egy adott architektúra összes követelményéről. Az alkalmazás bináris interfésze (ABI) meghatározza. Egyszerűbben fogalmazva, az ABI egy vagy több sajátos architektúrát képvisel. A beágyazott ABI-kkel kapcsolatos további részletek betekintést igényelnek az összeállítás és az összeállítás szakaszaiba; objektumkód, futtatható és összekapcsolható formátum (ELF), statikus (archiválás) és a könyvtárak dinamikus összekapcsolása stb.

Most válaszolok a kérdésedre:

MI VAGY x86 ÉS ARM?

Az x86 az utasításkészletek családja, amelyet főleg az Intel és az AMD fejlesztett és gyárt. Az ARM egy másik család, amelyet egyetlen entitás ARM Holdings tervezett, és amelyet számos beágyazott megoldás-gyártó, köztük a Qualcomm, a Mediatek, a Samsung és a Huawei licencelt. A Snapdragon, az Exynos és a Kirin a márkanevük. Nem processzorgyártók, de licencük van arra, hogy ARM processzorokat vegyenek fel a saját System on Chip (SoC) áramkörökkel.

MI A SoC?

A System on Chip (SoC) egy kicsi áramkör, amely processzorokat és egyéb alkatrészeket, például GPU-t, RAM-ot, Flash / eMMC-t (a HDD vagy SSD megfelelője) tartalmaz , WiFi és bluetooth modul, USB-csatlakozás, UART (soros portok), JTAG (nagyon alacsony szintű soros kommunikációs protokoll), GPS, modemek (a mobilkapcsolathoz) és esetleg mások.

ARM ABI-k:

Bár az Android-alkalmazások nagy része Java nyelven íródott, az anyanyelveken, például C és C ++, amelyet össze kell állítani. Az Android biztosítja a saját natív fejlesztőkészletét ( NDK ), beleértve (könyvtárak, fejlécfájlok és) egy fordítót, amely képes összeállítani több ABI kódot, beleértve a armeabi-v7a (armhf Linux közösségben) és x86.

Maga az Android (Java) alkalmazás nem “specifikus egy architektúrára. Az alkalmazás építési folyamata során az Android SDK konvertálja a Java forrást bytecode (.class fájlokká), majd lefordítja D alvik EX ecutable (.dex) fájl, amely .apk fájlokkal van tele. Ezt a Dalvik bytecode-ot a Dalvik Virtual Machine / ART minden alkalmazáshoz egy Zygote nevű folyamat segítségével. Vagy véglegesen lefordítható natív gépi kódra (.odex vagy ) az eszköz architektúrájának megfelelően az alkalmazás telepítése során (vagy később ). De ha az apk (zip) fájl emellett tartalmaz ELF bináris fájlokat / könyvtárakat, akkor ezek architektúra-specifikusak. A fejlesztők általában több architektúrához tartozó natív könyvtárakat tartalmaznak az alkalmazásaikba.

Natív alkalmazások / programok / bináris fájlok / futtatható / könyvtárak fordítói csomagokkal épültek, amelyek célzása ARM Embedded ABI v7a ( armeabi-v7a ) Application profile of 7th version of ARM processors ( Armv7-A <) futtatható / a>).
Más gyártók által biztosított
eszközláncokkal összeállított, ugyanazt az architektúrát célzó (bár eltérő ABI-nevű) kódnak Android-eszközökön is futnia kell.

32 bites VS. 64-BIT:

Az ARM processzor lehet 32 bites vagy 64 bites. A SoC gyártóktól függ, hogy mit akarnak építeni beágyazott rendszerükkel pl. A Snapdragon lehet 32 bites vagy 64 bites. A 32 bites ARM processzorok teljesítményének javítása érdekében új képességeket adtak a 2-es verziótól a 7-es verzióig. 64 bites támogatást vezettek be az ARMv8-ban.

Annak kiderítésére, hogy egy eszköz 32 bites vagy 64 bites bit, akkor ellenőriznie kell a SoC, majd a processzor specifikációit. Például a Redmi 4. megjegyzés SoC Qualcomm Snapdragon 625 (MSM 8953) , amely tartalmazza processzor Cortex-A53. A Cortex-53 műszaki specifikációiból kiderül, hogy ARMv8 architektúrára épül, amely képes feldolgozni 2 típusú utasításkészlet: aarch64 (amelyet az Android “s arm64-v8a ABI használ) és aarch32 (amelyet az Android “s armeabi-v7a ABI használ, azaz kompatibilis a ARMv7 ).

Tehát mindkét ABI-hez lefordított bináris fájlokat / könyvtárakat futtathat, de x86 vagy ( armel néven a Linux közösségben; amely az architektúrát ARMv5/v6 célozta meg, és eltávolítva itt: NDK r17).


KAPCSOLÓDÓ: Egy 64 bites hardvereszköz futtathat 32 bites Android verziót?

Megjegyzések

Válasz

Az x86-ot használó hardvereszközök száma soha nem volt túl magas. Néhány évvel ezelőtt az Intel rendelkezett néhány x86-os processzorral (Intel Atom), amelyeket egyes Android-táblagépeken (pl. Samsung Galaxy Tab 10.3) használtak.

Azonban ezek a táblagépek soha nem értek el nagy mennyiséget a piacon. És nem vagyok biztos benne, van-e olyan x86 okostelefon vagy táblagép a piacon, amely továbbra is használ x86 processzort.

Van azonban egy nagyon gyakori használati eset, amikor “x86 Android eszközzel” találkozik: az Android Emulátor.

Mivel az emulátort futtató számítógép általában x86 képfeldolgozó x86 processzor emulátorokat használ (ARMv7 vagy ARMv8 / ARM64 alapú kép helyett), használhatják a CPU integrált virtualizációs technikáit, amelyek sokkal nagyobb sebesség.

Megjegyzések

  • Köszönjük, hogy részletesen elmagyarázta. Szeretnék példát venni. Ha igazam van, legyen az processzor vagy SoC, az x86 kifejezés az Intel és az AMD között van. Szeretnék példát venni.
  • Végigmentem a apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 linken -kiadás a Firefox android apk letöltéséhez. Két változatot láttam ott; Firefox android apk az armeabi-v7a architektúrához és a Firefox android apk az x86 architektúrához. Zavarom onnan indult.
  • A jól ismert androidos eszközök SoC-je a Snapdragon, a MediaTek, az Exynos, a Kirin stb. Ezért úgy gondolom, hogy le kell töltenem androidos apk-t az ARM-hez. Igazam van?
  • @ user741975 Jelenleg, ha a armeabi-v7a lehetőséget választja, akkor 99% -nál nagyobb eséllyel fog futni. Ha jelenlegi középkategóriás vagy csúcskategóriás készüléke van, akkor a arm64-v8a is választható. Egyébként csak letöltheti és megpróbálhatja telepíteni. Ha az architektúra hibás, akkor a telepítés sikertelen lesz.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük