Android-apps til “ armeabi-v7a ” og “ x86 ” arkitektur: SoC vs. processor mod ABI

Under download af Android-apps har jeg nogle gange set apps til armeabi-v7a og x86 arkitektur.

Jeg læste nogle referencer til armeabi-v7a og x86 arkitektur. I slutningen kunne jeg dog ikke afslutte, hvilke mobile processorer og arkitekturer der hører til armeabi-v7a og hvilke der hører til x86.

Efter min viden er mobile processorer, der ofte bruges i Android-enheder, Snapdragon (af Qualcomm), MediaTek, Exynos (af Samsung) og Kirin (af Huawei). Næsten alle mærker forklarer specifikationer for en smartphone, og næsten alle specifikationer siger mobilprocessor er 64-bit eller ej. Skal jeg konkludere, at 64-bit af mobile processorer (Snapdragon, MediaTek, Exynos eller Kirin) tilhører ARM-arkitektur?

EDIT:
At forstå, hvilken SoC der understøtter armeabi-v7a Android-apk, og hvilken SoC der understøtter x86 Android apk, jeg har gennemgået specifikationerne for MediaTek Helio X30 og Snapdragon 855. Specifikationen af Helio X30 siger, den understøtter dual -core ARM Cortex-A73 og quad-core ARM Cortex-A53 men ARM i er ikke nævnt nogen steder i specifikationen af Snapdragon 855. Så skal jeg konkludere, at Helio X30 understøtter armeabi-v7a Android-apps og Snapdragon 855 understøtter ikke armeabi-v7a apps?

Vær klar over mine forvirringer.

Svar

Her er mine ufuldstændige opsummerede noter om emnet, men nok til at besvare dit spørgsmål.

INSTRUKTIONSSÆT:

Processorer er lavet af halvlederformer, normalt elektronisk monokrystallinsk silicium. De kender ikke engelsk eller andre menneskelige sprog, de forstår kun 0 og 1. Så designeren af processoren fortæller os i hvad sekvens af nul “og en” s kan vi instruere den specifikke processor. Dette numeriske instruktions sprog er standardiseret som Machine Language og sæt af maskininstruktioner kaldes Instruction Set. En processor kan kun reagere på specifik (e) type (r) instruktionssæt.
Instruktionssæt kan være 8/16/32/64-bit (definerer hvor mange instruktioner en processor kan behandle ad gangen ), de sidste 2 er den almindelige i disse dage.

SPROG MED LAVT NIVEAU:

Men at skrive programkode (instruktioner) direkte på maskinens sprog (den eksekverbare fil) er næsten umulig, fordi det vil tage år at skrive og fejle et rimeligt større program (som vi kan skrive om få timer i disse dage). at sætte programmører på lethed, Assembly Languag e blev udviklet, stadig et processorspecifikt sprog, men relativt let at forstå. Kode skrevet på forsamlingssprog konverteres til maskinkode af Assembler – et program skrevet på maskinsprog. Begge disse kaldes sprog på lavt niveau.

SPROG MED HØJT NIVEAU:

For yderligere at reducere menneskelig indsats for at kommunikere med hardware blev der udviklet sprog på højt niveau, som ikke er bundet til et specifikt instruktions sæt (betegner en bestemt arkitektur). Disse er identiske med menneskelige sprog og er derfor nemme at skrive, forstå, debugge og anvende på flere arkitekturer. Kode skrevet på højt niveau sprog konverteres til lavt niveau sprog med Compiler – et program skrevet på lavt niveau sprog. Et af de mest almindeligt anvendte sprog på højt niveau er C. Men nogle gange kompileres kode ikke på forhånd til maskinkode, men udføres direkte (eller kompileres under udførelse) af Interpreter. Java er et af sådanne “skriv en gang, kør hvor som helst” (WORA) sprog, der er kompileret til byte-code og derefter fortolket af Virtual Machine – igen et kompileret program.

APPLICATION BINARY INTERFACE (ABI):

Da et arkitekturuafhængigt program (kode) kan konverteres til arkitekturafhængig kode for enhver processor, er det kompilatorens pligt at tage sig af alle kravene i en bestemt arkitektur. Det er hvad Application Binary Interface (ABI) definerer. Enkelt sagt repræsenterer en ABI en eller flere specifikke arkitekturer. Yderligere detaljer om indlejrede ABIer kræver et indblik i stadier af samling og kompilering; objektkode, ELF (Executable and Linkable Format), statisk (arkivering) og dynamisk sammenkædning af biblioteker osv.

Kommer nu til dit spørgsmål:

HVAD ER x86 OG ARM?

x86 er en familie af instruktionssæt, hovedsageligt udviklet og produceret af Intel og AMD. ARM er en anden familie, designet af en enkelt enhed ARM Holdings og er licenseret til mange producenter af indlejrede løsninger, herunder Qualcomm, Mediatek, Samsung og Huawei. Snapdragon, Exynos og Kirin er deres mærker. De er ikke processorproducenter, men de har licenser til at inkludere ARM-processorer med deres egne System on Chip (SoC) kredsløb.

HVAD ER SoC?

Et system på chip (SoC) er et lille kredsløb, der inkluderer processorer sammen med andre komponenter såsom GPU, RAM, Flash / eMMC (svarende til HDD eller SSD) , WiFi og bluetooth-modul, USB-tilslutning, UART (serielle porte), JTAG (en meget lavere niveau seriel kommunikationsprotokol), GPS, modemer (til mobilforbindelse) og muligvis andre.

ARM ABIs:

Selvom størstedelen af Android-apps er skrevet i Java, kan man programmere på indfødte sprog som C og C ++, som skal kompileres. Android leverer sit eget Native Development Kit ( NDK ) inklusive (biblioteker, headerfiler og) en compiler, der kan kompilere kode til flere ABIer inklusive armeabi-v7a (armhf i Linux-community) og x86.

Selve Android-appen (Java) er ikke specifik for en arkitektur. Under appbygningsprocessen konverterer Android SDK Java-kilde til bytecode (.class filer) og kompilerer den derefter til D alvik EX ecutable (.dex) -fil, der er pakket med .apk filer. Denne Dalvik bytecode fortolkes og køres i en separat forekomst af Dalvik Virtual Machine / ART for hver app ved en proces med navnet Zygote. Eller den kan permanent kompileres til den indbyggede maskinkode (.odex eller ) i henhold til enhedens arkitektur under installationen af appen (eller senere ). Men hvis apk (zip) -filen desuden indeholder ELF-binære / biblioteker, er disse arkitekturspecifikke. Udviklere inkluderer normalt indfødte biblioteker til flere arkitekturer i deres apps.

Indfødte applikationer / programmer / binærfiler / eksekverbar / biblioteker bygget med kompilersuiter målrettet mod ARM Embedded ABI v7a ( armeabi-v7a ) kan køres på Application profile of 7th version of ARM processors ( Armv7-A ).
Kode kompileret med værktøjskæder leveret af andre leverandører, der målretter mod samme arkitektur (dog med forskellige ABI-navne) skal også køre på Android-enheder.

32-BIT VS. 64-BIT:

ARM-processor kan være 32-bit eller 64-bit. Det afhænger af SoC-producenter, hvad de vil bygge med deres integrerede system, f.eks. Snapdragon kan være 32-bit eller 64-bit. 32-bit ARM-processorer blev forbedret med henblik på ydeevne, og nye muligheder blev tilføjet fra version 2 til version 7. 64-bit support blev introduceret i ARMv8.

At finde ud af, om en enhed er 32-bit eller 64- bit, skal du kontrollere specifikationerne for dens SoC og derefter for dens processor. For eksempel er SoC i Redmi Note 4 Qualcomm Snapdragon 625 (MSM 8953) , som indeholder processor Cortex-A53. Det fremgår af tekniske specifikationer for Cortex-53 , at det er baseret på ARMv8 arkitektur, som kan behandle 2 typer instruktionssæt: aarch64 (som Android “s arm64-v8a ABI bruger) og aarch32 (hvilken Android “s armeabi-v7a ABI bruger dvs. bagudkompatibel med ARMv7

Så det kan køre binære / biblioteker, der er sammensat til begge disse ABIer, men ikke til x86 eller armeabi (kaldet armel i Linux-samfund; som målrettede mod arkitektur ARMv5/v6 og var fjernet i NDK r17).


RELATERET: Kunne en 64-bit hardwareenhed køre en 32-bit Android-version?

Kommentarer

Svar

Antallet af hardwareenheder, der bruger x86, var aldrig meget højt. For nogle år siden havde Intel nogle x86-processorer (Intel Atom), der blev brugt i nogle Android-tablets (f.eks. Samsung Galaxy Tab 10.3).

Disse tablets nåede dog aldrig et stort volumen på markedet. Og jeg er ikke sikker på, om der er nogen x86-smartphone eller tablet på markedet, der stadig bruger en x86-CPU.

Der er dog en meget almindelig brugssag, hvor du støder på en “x86 Android-enhed”: Android Emulator.

Da pcen, der kører, bruger emulatoren typisk en x86 CPU-emulatorer, der kører et x86-billede (i stedet for et ARMv7- eller ARMv8 / ARM64-baseret billede), kan gøre brug af CPU-integrerede virtualiseringsteknikker, som resulterer i en meget højere hastighed.

Kommentarer

  • Tak fordi du forklarede i detaljer. Jeg vil gerne tage et eksempel. Hvis jeg har ret, hvad enten det er en processor eller en SoC, er udtrykket x86 co-relateret med Intel og AMD. Jeg vil gerne tage et eksempel.
  • Jeg har gennemgået linket apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -udgivelse til download af Firefox android apk. Jeg har set to varianter der; Firefox android apk til armeabi-v7a arkitektur og Firefox android apk til x86 arkitektur. Min forvirring startede derfra.
  • SoC af kendte Android-enheder er Snapdragon, MediaTek, Exynos, Kirin osv. Derfor tror jeg, at jeg har brug for at downloade android apk til ARM. Har jeg ret?
  • @ user741975 Hvis du i øjeblikket vælger armeabi-v7a, kører den med en chance større end 99%. Hvis du har en nuværende enhed i mellemklassen eller avanceret enhed, kan arm64-v8a muligvis også være en mulighed. Under alle omstændigheder kan du bare downloade det og prøve at installere det. Hvis arkitekturen er forkert, vil installationen bare mislykkes.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *