Under nedladdningen av Android-appar har jag ibland sett appar för armeabi-v7a
och x86
arkitektur.
Jag läste några referenser för armeabi-v7a
och x86
arkitektur. Men i slutet kunde jag inte slutföra vilka mobila processorer och arkitekturer som tillhör armeabi-v7a
och vilka som tillhör x86
.
Enligt min kunskap är mobila processorer som vanligtvis används i Android-enheter Snapdragon (av Qualcomm), MediaTek, Exynos (av Samsung) och Kirin (av Huawei). Nästan alla märken förklarar specifikationer för en smartphone och nästan alla specifikationer säger mobilprocessor är 64-bitars eller inte. Ska jag dra slutsatsen att 64-bitars mobila processorer (Snapdragon, MediaTek, Exynos eller Kirin) tillhör ARM-arkitekturen?
EDIT:
För att förstå vilken SoC som stöder armeabi-v7a
Android-apk och vilken SoC som stöder x86
Android apk, jag har gått igenom specifikationerna för MediaTek Helio X30
och Snapdragon 855
. Specifikationen för Helio X30 säger att den stöder dubbel -core ARM Cortex-A73 och fyrkärnig ARM Cortex-A53 men ARM i s nämns inte någonstans i specifikationen för Snapdragon 855. Så bör jag dra slutsatsen att Helio X30 stöder armeabi-v7a
Android-appar och Snapdragon 855 stöder inte armeabi-v7a
appar?
Förtydliga mina förvirringar.
Svar
Här är mina ofullständiga sammanfattade anteckningar om ämnet, men tillräckligt för att svara på din fråga.
INSTRUKTIONSSET:
Processorer är gjorda av halvledarmunstycken, vanligtvis elektroniskt monokristallint kisel. De kan inte engelska eller något annat mänskligt språk, de förstår bara 0
och 1
. Så berättar designern av processorn oss i vad sekvensen av noll ”och en” kan vi instruera den specifika processorn. Detta numeriska instruktionspråk är standardiserat som Machine Language
och uppsättningen maskininstruktioner kallas Instruction Set
. En processor kan bara agera på specifika typer av instruktionsuppsättningar.
Instruktionsuppsättningar kan vara 8/16/32/64-bitars (definierar hur många instruktioner en processor kan bearbeta åt gången ), de två sista är de vanligaste idag.
SPRÅK MED LÅG NIVÅ:
Men att skriva programkod (instruktioner) direkt på maskinspråk (den körbara filen) är nästan omöjligt eftersom det kommer att ta år att skriva och felsöka ett ganska större program (som vi kan skriva om några timmar idag). att lugna programmerare, Assembly Languag e utvecklades, fortfarande ett processorspecifikt språk men relativt lätt att förstå. Kod skriven på Assembly Language konverteras till maskinkod av Assembler
– ett program skrivet på maskinspråk. Båda dessa kallas lågnivåspråk.
SPRÅK MED HÖG NIVÅ:
För att ytterligare minska mänsklig ansträngning för att kommunicera med hårdvara utvecklades språk på hög nivå som inte är bundna till en specifik instruktionsuppsättning (som anger en specifik arkitektur). Dessa är identiska med mänskliga språk, följaktligen enkla att skriva, förstå, felsöka och tillämpas på flera arkitekturer. Kod skriven på högnivåspråk konverteras till lågnivåspråk av Compiler
– ett program skrivet på lågnivåspråk. Ett av de vanligaste språken på hög nivå är C. Men ibland förkompileras inte kod till maskinkod, utan körs direkt (eller kompileras under körning) av Interpreter
. Java är ett av dessa ”skriv en gång, kör var som helst” (WORA) språk som sammanställs till byte-code
och sedan tolkas av Virtual Machine
– igen ett sammanställt program.
APPLICATION BINARY INTERFACE (ABI):
Eftersom ett arkitekturoberoende program (kod) kan konverteras till arkitekturberoende kod för vilken processor som helst, är det kompilatorns skyldighet att ta hand om alla krav i en specifik arkitektur. Det är vad Application Binary Interface (ABI) definierar. Enkelt uttryckt representerar ett ABI en eller flera specifika arkitekturer. Ytterligare detaljer om inbäddade ABI kräver en inblick i stadier av montering och sammanställning; objektkod, Exekverbart och länkbart format (ELF), statisk (arkivering) och dynamisk länkning av bibliotek etc.
Kommer nu till din fråga:
VAD ÄR x86
OCH ARM
?
x86 är en familj av instruktionsuppsättningar, huvudsakligen utvecklade och tillverkade av Intel och AMD. ARM är en annan familj, designad av en enda enhet ARM Holdings
och licensieras till många tillverkare av inbyggda lösningar inklusive Qualcomm, Mediatek, Samsung och Huawei. Snapdragon, Exynos och Kirin är deras varumärken. De är inte processortillverkare men de har licenser för att inkludera ARM-processorer med sina egna System on Chip (SoC) kretsar.
VAD ÄR SoC?
Ett system på chip (SoC) är en liten krets som inkluderar processorer tillsammans med andra komponenter som GPU, RAM, Flash / eMMC (motsvarande hårddisk eller SSD) , WiFi- och Bluetooth-modul, USB-anslutning, UART (seriella portar), JTAG (ett mycket lägre seriekommunikationsprotokoll), GPS, modem (för mobilanslutning) och möjligen andra.
ARM ABI:
Även om huvuddelen av Android-appar är skrivna i Java kan man programmera på modersmål som C och C ++, som måste kompileras. Android tillhandahåller sitt eget Native Development Kit ( NDK ) inklusive (bibliotek, headerfiler och) en kompilator som kan sammanställa kod för flera ABI inklusive armeabi-v7a
(armhf
i Linux-community) och x86
.
Själva Android-appen (Java) är inte specifikt för en arkitektur. Under appbyggnadsprocessen konverterar Android SDK Java-källa till bytecode (.class
filer) och kompilerar den sedan till D alvik EX ecutable (.dex
) -fil som är packad med .apk
-filer. Denna byvikskod i Dalvik tolkas och körs i en separat instans av Dalvik Virtual Machine
/ ART
för varje app med en process som heter Zygote
. Eller så kan den kompileras permanent till inbyggd maskinkod (.odex
eller ) enligt enhetens arkitektur under installationen av appen (eller senare ). Men om apk (zip) -filen dessutom innehåller ELF-binärer / bibliotek, är de arkitekturspecifika. Utvecklare inkluderar vanligtvis inbyggda bibliotek för flera arkitekturer i sina appar.
Inbyggda applikationer / program / binärer / körbara / bibliotek byggda med kompilatorsviter inriktade på ARM Embedded ABI v7a
( armeabi-v7a ) kan köras på Application profile of 7th version of ARM processors
( Armv7-A ).
Kod sammanställd med verktygskedjor från andra leverantörer, inriktad på samma arkitektur (men med olika ABI-namn) bör också köras på Android-enheter.
32-BIT VS. 64-BIT:
ARM-processor kan vara 32-bitars eller 64-bitars. Det beror på SoC-tillverkare vad de vill bygga med sitt inbäddade system, t.ex. Snapdragon kan vara 32-bitars eller 64-bitars. 32-bitars ARM-processorer förbättrades för prestanda och nya funktioner lades till från version 2 till version 7. 64-bitars stöd introducerades i ARMv8.
För att ta reda på om en enhet är 32-bitars eller 64- bit, måste du kontrollera specifikationerna för SoC och sedan dess processor. Till exempel är SoC i Redmi Note 4 Qualcomm Snapdragon 625 (MSM 8953) , som innehåller processor Cortex-A53
. Det framgår av tekniska specifikationer för Cortex-53 att det är baserat på ARMv8
arkitektur, som kan bearbeta 2 typer av instruktionsuppsättningar: aarch64
(som Android ”s arm64-v8a ABI använder) och aarch32
(vilken Android ”s armeabi-v7a ABI använder dvs bakåtkompatibel med ARMv7
).
Så det kan köra binärer / bibliotek som har sammanställts för båda dessa ABI, men inte för x86 eller armeabi
(kallas armel i Linux-community; som riktade arkitektur ARMv5/v6
och var borttagen i NDK r17
).
RELATERAD: Kan en 64-bitars hårdvaruenhet köra en 32-bitars Android-version?
Kommentarer
Svar
Antalet hårdvaruenheter som använder x86 var aldrig så stort. För några år sedan hade Intel några x86-processorer (Intel Atom) som användes i vissa Android-surfplattor (t.ex. Samsung Galaxy Tab 10.3).
Dessa tabletter nådde dock aldrig en hög volym på marknaden. Och jag är inte säker på om det finns någon x86-smartphone eller surfplatta på marknaden som fortfarande använder en x86-processor.
Det finns dock ett mycket vanligt användningsfall där du stöter på en ”x86 Android-enhet”: Android Emulator.
Eftersom PC: n kör emulatorn vanligtvis använder en x86 CPU-emulatorer som kör en x86-bild (istället för en ARMv7- eller ARMv8 / ARM64-baserad bild) kan de använda CPU-integrerade virtualiseringstekniker som en mycket högre hastighet.
Kommentarer
- Tack för att du förklarade i detalj. Jag skulle vilja ta ett exempel. Om jag har rätt, vare sig det är en processor eller en SoC, är termen x86 samrelaterad med Intel och AMD. Jag vill ta ett exempel.
- Jag har gått igenom länken apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -release för nedladdning av Firefox android apk. Jag har sett två varianter där; Firefox android apk för armeabi-v7a arkitektur och Firefox android apk för x86 arkitektur. Min förvirring började därifrån.
- SoC för välkända Android-enheter är Snapdragon, MediaTek, Exynos, Kirin etc. Därför tror jag att jag måste ladda ner android apk för ARM. Har jag rätt?
- @ user741975 För närvarande om du väljer
armeabi-v7a
kommer den att köras med en chans större än 99%. Om du har en nuvarande medelklass eller avancerad enhet kan ocksåarm64-v8a
vara ett alternativ. Hur som helst kan du bara ladda ner det och försöka installera det. Om arkitekturen är fel kommer installationen bara att misslyckas.
armeabi
endast för bakåtstöd.