Durante il download di app Android, a volte ho visto app per armeabi-v7a
e x86
architettura.
Ho letto alcuni riferimenti per armeabi-v7a
e x86
architettura. Tuttavia, alla fine, non sono riuscito a definire quali processori e architetture mobili appartengono a armeabi-v7a
e quali appartengono a x86
.
Per quanto ne so, i processori mobili comunemente utilizzati nei dispositivi Android sono Snapdragon (di Qualcomm), MediaTek, Exynos (di Samsung) e Kirin (di Huawei). Quasi tutti i marchi spiegano le specifiche di uno smartphone e quasi tutte le specifiche dicono il processore per dispositivi mobili è a 64 bit o meno. Devo concludere che i processori per dispositivi mobili a 64 bit (Snapdragon, MediaTek, Exynos o Kirin) appartengono allarchitettura ARM?
EDIT:
per capire quale SoC supporta armeabi-v7a
APK Android e quale SoC supporta x86
Android apk, ho esaminato le specifiche di MediaTek Helio X30
e Snapdragon 855
. La specifica di Helio X30 dice che supporta dual -core ARM Cortex-A73 e quad-core ARM Cortex-A53 ma ARM i non è menzionato da nessuna parte nelle specifiche dello Snapdragon 855. Quindi devo concludere che Helio X30 supporterà le armeabi-v7a
app Android e Snapdragon 855 non supporterà armeabi-v7a
app?
Per favore, chiarisci le mie confusioni.
Risposta
Ecco le mie note riassunte incomplete su loggetto, ma sufficiente per rispondere alla tua domanda.
SET DI ISTRUZIONI:
I processori sono costituiti da stampi semiconduttori, solitamente silicio monocristallino di qualità elettronica. Non conoscono linglese o qualsiasi altra lingua umana, capiscono solo 0
e 1
. Quindi il progettista del processore ci dice in cosa sequenza di zero “se uno” possiamo istruire quel processore specifico. Questo linguaggio numerico di istruzioni è standardizzato come Machine Language
e il set di istruzioni della macchina è chiamato Instruction Set
. Un processore può agire solo su tipi specifici di set di istruzioni.
I set di istruzioni possono essere a 8/16/32/64 bit (definisce quante istruzioni un processore può elaborare alla volta ), gli ultimi 2 sono quelli più comuni in questi giorni.
LINGUE DI BASSO LIVELLO:
Ma scrivere il codice del programma (istruzioni) direttamente in linguaggio macchina (il file eseguibile) è quasi impossibile perché ci vorranno anni per scrivere ed eseguire il debug di un programma ragionevolmente più grande (che possiamo scrivere in poche ore in questi giorni). per mettere a proprio agio i programmatori, Assembly Languag È stato sviluppato e, ancora un linguaggio specifico del processore ma relativamente facile da capire. Il codice scritto in linguaggio Assembly viene convertito in codice macchina da Assembler
, un programma scritto in linguaggio macchina. Entrambe sono chiamate lingue di basso livello.
LINGUE DI ALTO LIVELLO:
Per ridurre ulteriormente lo sforzo umano nella comunicazione con lhardware, sono stati sviluppati linguaggi di alto livello che non sono vincolati a uno specifico set di istruzioni (denotando una specifica architettura). Questi sono identici ai linguaggi umani, quindi facili da scrivere, comprendere, eseguire il debug e applicare a più architetture. Il codice scritto in un linguaggio di alto livello viene convertito in un linguaggio di basso livello da Compiler
, un programma scritto in un linguaggio di basso livello. Uno dei linguaggi di alto livello più comunemente usati è C. Ma a volte il codice non è precompilato in codice macchina, ma direttamente eseguito (o compilato durante lesecuzione) da Interpreter
. Java è uno di questi linguaggi “scrivi una volta, esegui ovunque” (WORA) compilato in byte-code
e quindi interpretato da Virtual Machine
– di nuovo un programma compilato.
INTERFACCIA BINARIA DELLAPPLICAZIONE (ABI):
Poiché un programma (codice) indipendente dallarchitettura può essere convertito in codice dipendente dallarchitettura per qualsiasi processore, è dovere del compilatore prendersi cura di tutti i requisiti di unarchitettura specifica. Definisce linterfaccia binaria dellapplicazione (ABI). In termini semplici, un ABI rappresenta una o più architetture specifiche. Ulteriori dettagli sugli ABI incorporati richiedono una visione approfondita delle fasi di assemblaggio e compilazione; codice oggetto, formato eseguibile e collegabile (ELF), collegamento statico (archiviazione) e dinamico di librerie ecc.
Ora arrivo alla tua domanda:
COSA SONO x86
E ARM
?
x86 è una famiglia di set di istruzioni, principalmente sviluppati e prodotti da Intel e AMD. ARM è unaltra famiglia, progettata da una singola entità ARM Holdings
e concessa in licenza a molti produttori di soluzioni incorporate tra cui Qualcomm, Mediatek, Samsung e Huawei. Snapdragon, Exynos e Kirin sono i loro marchi. Non sono produttori di processori ma dispongono di licenze per includere processori ARM con i propri circuiti System on Chip (SoC).
CHE COSÈ SoC?
Un System on Chip (SoC) è un piccolo circuito che include processori insieme ad altri componenti come GPU, RAM, Flash / eMMC (equivalente di HDD o SSD) , Modulo WiFi e bluetooth, connettività USB, UART (porte seriali), JTAG (un protocollo di comunicazione seriale di livello molto inferiore), GPS, modem (per connettività cellulare) e possibilmente altri.
ARM ABIs:
Sebbene la maggior parte delle app Android sia scritta in Java, è possibile programmare in linguaggi nativi come C e C ++, che deve essere compilato. Android fornisce il proprio Kit di sviluppo nativo ( NDK ) che include (librerie, file di intestazione e) un compilatore in grado di compilare codice per più ABI incluso armeabi-v7a
(armhf
nella comunità Linux) e x86
.
la stessa app Android (Java) non è specifico di unarchitettura. Durante il processo di creazione dellapp, lSDK di Android converte lorigine Java in bytecode (file .class
) e quindi lo compila in D alvik EX ecutable (.dex
) file compresso con file .apk
. Questo bytecode Dalvik viene interpretato ed eseguito in unistanza separata di Dalvik Virtual Machine
/ ART
per ogni app tramite un processo denominato Zygote
. Oppure può essere compilato in modo permanente nel codice macchina nativo (.odex
o ) in base allarchitettura del dispositivo durante linstallazione dellapp (o più tardi ). Ma se il file apk (zip) contiene anche binari / librerie ELF, questi sono specifici dellarchitettura. Gli sviluppatori di solito includono librerie native per più architetture nelle loro app.
Applicazioni / programmi / binari / eseguibili / librerie native create con suite di compilatori destinate a ARM Embedded ABI v7a
( armeabi-v7a ) può essere eseguito su Application profile of 7th version of ARM processors
( Armv7-A ).
Il codice compilato con toolchain forniti da altri fornitori, che ha come target la stessa architettura (sebbene con nomi ABI diversi) dovrebbe essere eseguito anche su dispositivi Android.
32 BIT VS. 64 BIT:
Il processore ARM può essere a 32 o 64 bit. Dipende dai produttori di SoC cosa vogliono costruire con il loro sistema embedded, ad es. Snapdragon può essere a 32 o 64 bit. I processori ARM a 32 bit sono stati migliorati per le prestazioni e sono state aggiunte nuove funzionalità dalla versione 2 alla versione 7. Il supporto a 64 bit è stato introdotto in ARMv8.
Per scoprire se un dispositivo è a 32 bit o 64- bit, è necessario controllare le specifiche del suo SoC e poi del suo processore. Ad esempio il SoC in Redmi Note 4 è Qualcomm Snapdragon 625 (MSM 8953) , che contiene processore Cortex-A53
. È evidente dalle specifiche tecniche di Cortex-53 che si basa sullarchitettura ARMv8
, che può elaborare 2 tipi di set di istruzioni: aarch64
(utilizzato da Android “s arm64-v8a ABI) e aarch32
(quale Android “s armeabi-v7a ABI utilizza ie retrocompatibile con ARMv7
).
Quindi può eseguire binari / librerie compilati per entrambi questi ABI, ma non per x86 o armeabi
(chiamato armel nella comunità Linux; che aveva come target larchitettura ARMv5/v6
ed era rimosso in NDK r17
).
CORRELATO: Un dispositivo hardware a 64 bit può eseguire una versione Android a 32 bit?
Commenti
Risposta
Il numero di dispositivi hardware che utilizzano x86 non è mai stato molto alto. Alcuni anni fa Intel aveva alcuni processori x86 (Intel Atom) che venivano utilizzati in alcuni tablet Android (ad esempio Samsung Galaxy Tab 10.3).
Tuttavia, questi tablet non hanno mai raggiunto un volume elevato sul mercato. E non sono sicuro che sul mercato esista uno smartphone o un tablet x86 che utilizza ancora una CPU x86.
Tuttavia, esiste un caso duso molto comune in cui si verifica un “dispositivo Android x86”: Android Emulatore.
Poiché il PC su cui è in esecuzione lemulatore utilizza in genere emulatori CPU x86 che eseguono unimmagine x86 (invece di unimmagine basata su ARMv7 o ARMv8 / ARM64) possono utilizzare le tecniche di virtualizzazione integrate della CPU che risultano in una velocità molto più alta.
Commenti
- Grazie per aver spiegato in dettaglio. Vorrei fare un esempio. Se ho ragione, che si tratti di un processore o di un SoC, il termine x86 è correlato a Intel e AMD. Vorrei fare un esempio.
- Ho utilizzato il link apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -release per scaricare lapk Android di Firefox. Ho visto due varianti lì; Firefox android apk per larchitettura armeabi-v7a e Firefox android apk per larchitettura x86. La mia confusione è iniziata da lì.
- SoC di noti dispositivi Android sono Snapdragon, MediaTek, Exynos, Kirin ecc. Pertanto, credo, devo scaricare lapk Android per ARM. Ho ragione?
- @ user741975 Al momento se scegli
armeabi-v7a
verrà eseguito con una probabilità maggiore del 99%. Se disponi di un dispositivo attuale di fascia media o di fascia alta, anchearm64-v8a
potrebbe essere unopzione. Ad ogni modo puoi semplicemente scaricarlo e provare a installarlo. Se larchitettura è sbagliata, linstallazione fallirà.
armeabi
solo per il supporto allindietro.