Aplicații Android pentru “ armeabi-v7a ” și “ x86 ” arhitectură: SoC vs. Procesor vs. ABI

În timpul descărcării aplicațiilor Android, uneori am văzut aplicații pentru armeabi-v7a și x86 arhitectură.

Am citit câteva referințe pentru armeabi-v7a și x86 arhitectură. Cu toate acestea, la sfârșit, nu am putut finaliza ce procesoare și arhitecturi mobile aparțin armeabi-v7a și care aparțin x86.

Conform cunoștințelor mele, procesoarele mobile utilizate în mod obișnuit pe dispozitivele Android sunt Snapdragon (de Qualcomm), MediaTek, Exynos (de Samsung) și Kirin (de Huawei). Aproape toate mărcile explică specificațiile unui smartphone și aproape toate specificațiile spun procesorul mobil are 64 de biți sau nu. Ar trebui să concluzionez că 64 de biți ai procesoarelor mobile (Snapdragon, MediaTek, Exynos sau Kirin) aparțin arhitecturii ARM?

EDIT:
Pentru a înțelege ce SoC acceptă armeabi-v7a Android apk și care SoC acceptă x86 Android apk, am trecut prin specificațiile MediaTek Helio X30 și Snapdragon 855. Specificația Helio X30 spune că acceptă dual -core ARM Cortex-A73 și quad-core ARM Cortex-A53 dar ARM i Nu sunt menționate nicăieri în specificațiile Snapdragon 855. Așadar, ar trebui să concluzionez că Helio X30 va accepta armeabi-v7a aplicațiile Android și Snapdragon 855 nu va suporta armeabi-v7a apps?

Vă rugăm să clarificați confuziile mele.

Răspunde

Iată notele mele rezumate incomplete despre subiectul, dar suficient pentru a răspunde la întrebarea dvs.

SET DE INSTRUCȚIUNI:

Procesoarele sunt fabricate din matrițe semiconductoare, de obicei siliciu monocristalin de calitate electronică. Nu știu engleza sau orice altă limbă umană, înțeleg doar 0 și 1. Deci, proiectantul procesorului ne spune în ce secvența de zero „s și unu” s putem instrui acel procesor specific. Acest limbaj numeric al instrucțiunilor este standardizat ca Machine Language, iar setul de instrucțiuni ale mașinii se numește Instruction Set. Un procesor poate acționa numai asupra anumitor tipuri specifice de seturi de instrucțiuni.
Seturile de instrucțiuni pot fi 8/16/32/64-bit (definește câte instrucțiuni poate procesa un procesor odată ), ultimele 2 fiind cele obișnuite în zilele noastre.

LIMBI DE NIVEL MIC:

Dar scrierea codului de program (instrucțiuni) direct în limbajul mașinii (fișierul executabil) este aproape imposibil, deoarece va dura ani să scrieți și să depanați un program destul de mare (pe care îl putem scrie în câteva ore în aceste zile). pentru a pune programatorii în largul lor, Assembly Languag A fost dezvoltat, încă un limbaj specific procesorului, dar relativ ușor de înțeles. Codul scris în limbajul asamblării este convertit în cod mașină de Assembler – un program scris în limbaj mașină. Ambele sunt numite limbaje de nivel scăzut.

LIMBI DE NIVEL ÎNALT:

Pentru a reduce în continuare efortul uman în comunicarea cu hardware-ul, au fost dezvoltate limbaje de nivel înalt care nu sunt legate de un anumit set de instrucțiuni (denotând o arhitectură specifică). Acestea sunt identice cu limbajele umane, prin urmare ușor de scris, de înțeles, de depanat și de aplicat la arhitecturi multiple. Codul scris într-un limbaj de nivel înalt este convertit în limbaj de nivel scăzut de Compiler – un program scris într-un limbaj de nivel scăzut. Unul dintre cele mai frecvent utilizate limbaje la nivel înalt este C. Dar uneori codul nu este precompilat cu codul mașinii, ci executat direct (sau compilat în timpul execuției) de către Interpreter. Java este unul dintre astfel de limbaje „scrie o dată, rulează oriunde” (WORA) care este compilat în byte-code și apoi interpretat de Virtual Machine – din nou un program compilat.

INTERFATA BINARĂ A APLICĂRII (ABI):

Deoarece un program (cod) independent de arhitectură poate fi convertit în cod dependent de arhitectură pentru orice procesor, este datoria compilatorului să aibă grijă de toate cerințele unei arhitecturi specifice. Asta este ceea ce Aplicația Binary Interface (ABI) definește. În termeni simpli, un ABI reprezintă una sau mai multe arhitecturi specifice. Mai multe detalii despre ABI încorporate necesită o perspectivă asupra etapelor de asamblare și compilare; cod obiect, format executabil și conectabil (ELF), legare statică (arhivare) și dinamică a bibliotecilor etc.

Acum venim la întrebarea dvs.:

CE SUNT x86 ȘI ARM?

x86 este o familie de seturi de instrucțiuni, dezvoltate și fabricate în principal de Intel și AMD. ARM este o altă familie, proiectată de o singură entitate ARM Holdings și fiind licențiată pentru mulți producători de soluții încorporate, inclusiv Qualcomm, Mediatek, Samsung și Huawei. Snapdragon, Exynos și Kirin sunt numele lor de marcă. Nu sunt producători de procesoare, dar au licențe pentru a include procesoare ARM cu propriile circuite System on Chip (SoC).

CE ESTE SoC?

Un sistem pe cip (SoC) este un circuit mic care include procesoare împreună cu alte componente precum GPU, RAM, Flash / eMMC (echivalent cu HDD sau SSD) , Modul WiFi și bluetooth, conectivitate USB, UART (porturi seriale), JTAG (un protocol de comunicație serială de nivel foarte scăzut), GPS, modemuri (pentru conectivitate celulară) și posibil altele.

ARI ABI:

Deși cea mai mare parte a aplicațiilor Android este scrisă în Java, se poate programa în limbi native precum C și C ++, care trebuie compilat. Android oferă propriul kit de dezvoltare nativă ( NDK ), incluzând (biblioteci, fișiere antet și) un compilator care poate compila cod pentru mai multe ABI, inclusiv armeabi-v7a (armhf în comunitatea Linux) și x86.

Aplicația Android (Java) în sine nu este specific unei arhitecturi. În timpul procesului de construire a aplicației, SDK-ul Android convertește sursa Java în bytecode (fișiere .class) și apoi o compilează în D alvik EX ecutable (.dex) fișier care este împachetat cu fișiere .apk. Acest bytecode Dalvik este interpretat și rulat într-o instanță separată de Dalvik Virtual Machine / ART pentru fiecare aplicație printr-un proces numit Zygote. Sau poate fi compilat permanent în codul mașinii native (.odex sau ) conform arhitecturii dispozitivului în timpul instalării aplicației (sau ulterior ). Dar dacă fișierul apk (zip) conține, în plus, binare / biblioteci ELF, acestea sunt specifice arhitecturii. Dezvoltatorii includ de obicei biblioteci native pentru arhitecturi multiple în aplicațiile lor.

Aplicații native / programe / binare / executabile / biblioteci construite cu suite de compilare care vizează ARM Embedded ABI v7a ( armeabi-v7a ) poate fi rulat pe Application profile of 7th version of ARM processors ( Armv7-A ).
Codul compilat cu lanțuri de instrumente furnizate de alți furnizori, care vizează aceeași arhitectură (deși cu nume ABI diferite) ar trebui să ruleze și pe dispozitivele Android.

32-BIT VS. 64-BIT:

Procesorul ARM poate fi pe 32 de biți sau pe 64 de biți. Depinde de producătorii de SoC ce vor să construiască cu sistemul lor încorporat, de ex. Snapdragon poate fi pe 32 de biți sau pe 64 de biți. Procesoarele ARM pe 32 de biți au fost îmbunătățite pentru performanță și au fost adăugate noi capacități de la versiunea 2 la versiunea 7. Suportul de 64 de biți a fost introdus în ARMv8.

Pentru a afla dacă un dispozitiv are 32 de biți sau 64- bit, trebuie să verificați specificațiile SoC și apoi ale procesorului său. De exemplu, SoC în Redmi Note 4 este Qualcomm Snapdragon 625 (MSM 8953) , care conține procesor Cortex-A53. Este evident din specificațiile tehnice ale Cortex-53 că se bazează pe arhitectura ARMv8, care poate procesa 2 tipuri de seturi de instrucțiuni: aarch64 (pe care Android le utilizează arm64-v8a ABI) și aarch32 (care Android „s armeabi-v7a ABI folosește, de exemplu, compatibil cu ARMv7 ).

Deci poate rula binare / biblioteci compilate pentru ambele ABI, dar nu pentru x86 sau armeabi (numit armel în comunitatea Linux; care viza arhitectura ARMv5/v6 și era eliminat în NDK r17).


LEGATE: Ar putea un dispozitiv hardware pe 64 de biți să ruleze o versiune Android pe 32 de biți?

Comentarii

Răspuns

Numărul de dispozitive hardware care utilizează x86 nu a fost niciodată foarte mare. În urmă cu câțiva ani, Intel avea unele procesoare x86 (Intel Atom) care erau utilizate pe unele tablete Android (de exemplu, Samsung Galaxy Tab 10.3).

Cu toate acestea, tabletele respective nu au atins niciodată un volum mare pe piață. Și nu sunt sigur dacă există pe piață vreun smartphone x86 sau tabletă care utilizează în continuare un procesor x86.

Cu toate acestea, există un caz de utilizare foarte frecvent în care întâlniți un „dispozitiv x86 Android”: Android Emulator.

Deoarece PC-ul care rulează emulatorul folosește de obicei un emulator CPU x86 care rulează o imagine x86 (în loc de o imagine bazată pe ARMv7 sau ARMv8 / ARM64) se poate folosi tehnicile de virtualizare integrate CPU care au ca rezultat o viteză mult mai mare.

Comentarii

  • Vă mulțumim că ați explicat în detaliu. Aș dori să iau un exemplu. Dacă am dreptate, fie că este un procesor sau un SoC, termenul x86 este corelat cu Intel și AMD. Aș dori să iau un exemplu.
  • Am trecut prin linkul apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -lansare pentru descărcarea apk-ului Firefox pentru Android. Am văzut acolo două variante; Android apk Firefox pentru arhitectura armeabi-v7a și apk android Firefox pentru arhitectura x86. Confuzia mea a început de acolo.
  • SoC al dispozitivelor Android cunoscute sunt Snapdragon, MediaTek, Exynos, Kirin etc. Prin urmare, cred, trebuie să descarc apk-ul Android pentru ARM. Am dreptate?
  • @ user741975 În acest moment, dacă alegeți armeabi-v7a, acesta va rula cu o șansă mai mare de 99%. Dacă aveți un dispozitiv actual de clasă medie sau de ultimă generație, de asemenea, arm64-v8a poate fi o opțiune. Oricum o puteți descărca și încerca să o instalați. Dacă arhitectura este greșită, instalarea va eșua.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *