Mens jeg lastet ned Android-apper, har jeg noen ganger sett apper for armeabi-v7a
og x86
arkitektur.
Jeg leste noen referanser for armeabi-v7a
og x86
arkitektur. På slutten kunne jeg imidlertid ikke fullføre hvilke mobile prosessorer og arkitekturer som tilhører armeabi-v7a
og hvilke som tilhører x86
.
Så vidt jeg vet, er mobile prosessorer som ofte brukes i Android-enheter Snapdragon (av Qualcomm), MediaTek, Exynos (av Samsung) og Kirin (av Huawei). Nesten alle merker forklarer spesifikasjonene til en smarttelefon, og nesten alle spesifikasjoner sier mobilprosessor er 64-bit eller ikke. Skal jeg konkludere med at 64-biters mobile prosessorer (Snapdragon, MediaTek, Exynos eller Kirin) tilhører ARM-arkitekturen?
EDIT:
For å forstå hvilken SoC som støtter armeabi-v7a
Android apk og hvilken SoC som støtter x86
Android apk, jeg har gått gjennom spesifikasjonene til MediaTek Helio X30
og Snapdragon 855
. Spesifikasjonen til Helio X30 sier at den støtter dual -core ARM Cortex-A73 og quad-core ARM Cortex-A53 men ARM i er ikke nevnt noe sted i spesifikasjonen til Snapdragon 855. Så skal jeg konkludere med at Helio X30 vil støtte armeabi-v7a
Android-apper og Snapdragon 855 vil ikke støtte armeabi-v7a
apps?
Vennligst klargjør forvirringene mine.
Svar
Her er mine ufullstendige oppsummerte notater om emnet, men nok til å svare på spørsmålet ditt.
INSTRUKSJONSSETT:
Prosessorer er laget av halvlederformer, vanligvis elektronisk monokrystallinsk silisium. De kan ikke engelsk eller noe annet menneskelig språk, de forstår bare 0
og 1
. Så designeren av prosessoren forteller oss i hva sekvens av null «og en» s kan vi instruere den spesifikke prosessoren. Dette numeriske instruksjonspråket er standardisert som Machine Language
og settet med maskininstruksjoner kalles Instruction Set
. En prosessor kan bare handle på bestemte typer instruksjonssett.
Instruksjonssett kan være 8/16/32/64-bit (definerer hvor mange instruksjoner en prosessor kan behandle om gangen ), de siste to er de vanligste i disse dager.
LANG NIVÅSSPRÅK:
Men å skrive programkode (instruksjoner) direkte på maskinspråk (den kjørbare filen) er nesten umulig fordi det vil ta år å skrive og feilsøke et rimelig større program (som vi kan skrive om noen få timer i disse dager). for å gjøre programmerere rolige, Assembly Languag e ble utviklet, fremdeles et prosessorspesifikt språk, men relativt lett å forstå. Kode skrevet på Assembly Language konverteres til maskinkode av Assembler
– et program skrevet på maskinspråk. Begge disse kalles språk på lavt nivå.
SPRÅK FOR HØYT NIVÅ:
For ytterligere å redusere menneskelig innsats for å kommunisere med maskinvare ble det utviklet språk på høyt nivå som ikke er bundet til et spesifikt instruksjonssett (som angir en bestemt arkitektur). Disse er identiske med menneskelige språk, og dermed enkle å skrive, forstå, feilsøke og gjelde for flere arkitekturer. Kode skrevet på høyt nivå språk konverteres til lavt nivå språk av Compiler
– et program skrevet på lavt nivå språk. Et av de mest brukte språkene på høyt nivå er C. Men noen ganger blir ikke kode forhåndskompilert til maskinkode, i stedet direkte utført (eller kompilert under utførelse) av Interpreter
. Java er et av slike «skriv en gang, kjør hvor som helst» (WORA) språk som er samlet til byte-code
og deretter tolkes av Virtual Machine
– igjen et kompilert program.
APPLICATION BINARY INTERFACE (ABI):
Siden et arkitekturuavhengig program (kode) kan konverteres til arkitekturavhengig kode for hvilken som helst prosessor, er det kompilatorens plikt å ta seg av alle kravene til en bestemt arkitektur. Det er det Application Binary Interface (ABI) definerer. Enkelt sagt representerer en ABI en eller flere spesifikke arkitekturer. Ytterligere detaljer om innebygde ABI-er krever innsikt i stadier av montering og kompilering; objektkode, Executable and Linkable Format (ELF), statisk (arkivering) og dynamisk kobling av biblioteker etc.
Nå kommer du til spørsmålet ditt:
HVA ER x86
OG ARM
?
x86 er en gruppe instruksjonssett, hovedsakelig utviklet og produsert av Intel og AMD. ARM er en annen familie, designet av en enkelt enhet ARM Holdings
og er lisensiert til mange produsenter av innebygde løsninger, inkludert Qualcomm, Mediatek, Samsung og Huawei. Snapdragon, Exynos og Kirin er deres merkenavn. De er ikke prosessorprodusenter, men de har lisenser til å inkludere ARM-prosessorer med sine egne System on Chip (SoC) -kretser.
HVA ER SoC?
Et system på brikke (SoC) er en liten krets som inkluderer prosessorer sammen med andre komponenter som GPU, RAM, Flash / eMMC (tilsvarende HDD eller SSD) , WiFi og bluetooth-modul, USB-tilkobling, UART (serielle porter), JTAG (en seriell kommunikasjonsprotokoll på veldig lavere nivå), GPS, modemer (for mobiltilkobling) og muligens andre.
ARM ABIs:
Selv om hoveddelen av Android-apper er skrevet på Java, kan man programmere på morsmål som C og C ++, som må kompileres. Android tilbyr sitt eget Native Development Kit ( NDK ) inkludert (biblioteker, headerfiler og) en kompilator som kan kompilere kode for flere ABIer inkludert armeabi-v7a
(armhf
i Linux-fellesskapet) og x86
.
Selve Android-appen (Java) er ikke spesifikk for en arkitektur. Under appbyggingsprosessen konverterer Android SDK Java-kilde til bytekode (.class
filer) og kompilerer den deretter til D alvik EX ecutable (.dex
) fil som er fullpakket med .apk
filer. Denne Dalvik bytecode tolkes og kjøres i en egen forekomst av Dalvik Virtual Machine
/ ART
for hver app ved en prosess som heter Zygote
. Eller den kan kompileres permanent til den opprinnelige maskinkoden (.odex
eller ) i henhold til enhetens arkitektur under installasjonen av appen (eller senere ). Men hvis apk (zip) -filen i tillegg inneholder ELF-binærfiler / biblioteker, er de arkitektoniske. Utviklere inkluderer vanligvis innfødte biblioteker for flere arkitekturer i appene sine.
Innfødte applikasjoner / programmer / binærfiler / kjørbare / biblioteker bygget med kompilatorsuiter rettet mot ARM Embedded ABI v7a
( armeabi-v7a ) kan kjøres på Application profile of 7th version of ARM processors
( Armv7-A ).
Kode samlet med verktøykjeder levert av andre leverandører, og målrettet mot samme arkitektur (men med forskjellige ABI-navn), bør også kjøres på Android-enheter.
32-BIT VS. 64-BIT:
ARM-prosessor kan være 32-biters eller 64-biters. Det avhenger av SoC-produsenter hva de vil bygge med sitt innebygde system, f.eks. Snapdragon kan være 32-biters eller 64-biters. 32-biters ARM-prosessorer ble forbedret for ytelse og nye funksjoner ble lagt til fra versjon 2 til versjon 7. 64-biters støtte ble introdusert i ARMv8.
For å finne ut om en enhet er 32-biters eller 64- bit, må du sjekke spesifikasjonene til SoC og deretter til prosessoren. For eksempel er SoC i Redmi Note 4 Qualcomm Snapdragon 625 (MSM 8953) , som inneholder prosessor Cortex-A53
. Det fremgår av tekniske spesifikasjoner for Cortex-53 at den er basert på ARMv8
arkitektur, som kan behandle To typer instruksjonssett: aarch64
(som Android «s arm64-v8a ABI bruker) og aarch32
(som Android «s armeabi-v7a ABI bruker dvs. bakoverkompatibel med ARMv7
Så den kan kjøre binærfiler / biblioteker samlet for begge disse ABI-ene, men ikke for x86 eller armeabi
(kalt armel i Linux-fellesskapet; som målrettet mot arkitektur ARMv5/v6
, og var fjernet i NDK r17
).
RELATERT: Kunne en 64-bit maskinvareenhet kjøre en 32-biters Android-versjon?
Kommentarer
Svar
Antallet maskinvareenheter som bruker x86 var aldri veldig høyt. For noen år siden hadde Intel noen x86-prosessorer (Intel Atom) som ble brukt i noen Android-nettbrett (f.eks. Samsung Galaxy Tab 10.3).
Disse nettbrettene nådde imidlertid aldri et høyt volum på markedet. Og jeg er ikke sikker på om det er noen x86-smarttelefon eller nettbrett på markedet som fremdeles bruker en x86-CPU.
Det er imidlertid en veldig vanlig brukstilfelle der du støter på en «x86 Android-enhet»: Android Emulator.
Siden PCen som kjører, bruker emulatoren vanligvis en x86 CPU-emulatorer som kjører et x86-bilde (i stedet for et ARMv7- eller ARMv8 / ARM64-basert bilde), kan de bruke CPU-integrerte virtualiseringsteknikker som resulterer i en mye høyere hastighet.
Kommentarer
- Takk for at du forklarer i detalj. Jeg vil gjerne ta et eksempel. Hvis jeg har rett, det være seg en prosessor eller en SoC, er begrepet x86 sammenhengende med Intel og AMD. Jeg vil ta et eksempel.
- Jeg har gått gjennom lenken apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -release for nedlasting av Firefox android apk. Jeg har sett to varianter der; Firefox android apk for armeabi-v7a arkitektur og Firefox android apk for x86 arkitektur. Forvirringen min startet derfra.
- SoC av kjente android-enheter er Snapdragon, MediaTek, Exynos, Kirin etc. Derfor tror jeg at jeg trenger å laste ned android apk for ARM. Har jeg rett?
- @ user741975 Hvis du for øyeblikket velger
armeabi-v7a
, vil den kjøre med en sjanse større enn 99%. Hvis du har en nåværende mid-class eller high-end enhet, kan ogsåarm64-v8a
være et alternativ. Uansett kan du bare laste den ned og prøve å installere den. Hvis arkitekturen er feil, vil installasjonen bare mislykkes.
armeabi
kun for bakoverstøtte.