Android-apps voor “ armeabi-v7a ” en “ x86 ” architectuur: SoC vs. processor vs. ABI

Tijdens het downloaden van Android-apps heb ik soms apps gezien voor armeabi-v7a en x86 architectuur.

Ik heb enkele referenties gelezen voor armeabi-v7a en x86 architectuur. Uiteindelijk kon ik echter niet “afronden welke mobiele processors en architecturen behoren tot armeabi-v7a en welke tot x86.

Voor zover ik weet, zijn de mobiele processors die veel worden gebruikt in Android-apparaten Snapdragon (door Qualcomm), MediaTek, Exynos (door Samsung) en Kirin (door Huawei). Bijna alle merken leggen de specificaties van een smartphone uit en bijna alle specificaties zeggen mobiele processor is 64-bits of niet. Moet ik concluderen dat 64-bits mobiele processors (Snapdragon, MediaTek, Exynos of Kirin) tot de ARM-architectuur behoren?

EDIT:
Om te begrijpen welke SoC armeabi-v7a Android apk ondersteunt en welke SoC x86 Android apk, ik heb de specificaties van MediaTek Helio X30 en Snapdragon 855 doorgenomen. De specificatie van Helio X30 zegt dat het dubbele -core ARM Cortex-A73 en quad-core ARM Cortex-A53 maar ARM i wordt nergens vermeld in de specificatie van Snapdragon 855. Dus moet ik concluderen dat Helio X30 armeabi-v7a Android-apps ondersteunt en Snapdragon 855 geen armeabi-v7a apps?

Verhelder mijn verwarring.

Antwoord

Hier zijn mijn onvolledige samengevatte opmerkingen over het onderwerp, maar voldoende om uw vraag te beantwoorden.

INSTRUCTIESET:

Processors zijn gemaakt van halfgeleider-matrijzen, meestal monokristallijn silicium van elektronische kwaliteit. Ze kennen geen Engels of enige andere menselijke taal, ze begrijpen alleen 0 en 1. Dus de ontwerper van de processor vertelt ons in wat een reeks van nul “s en een” s kunnen we die specifieke processor instrueren. Deze numerieke instructietaal is gestandaardiseerd als Machine Language en de set machine-instructies heet Instruction Set. Een processor kan alleen reageren op specifieke typen instructieset.
Instructiesets kunnen 8/16/32/64-bits zijn (definieert hoeveel instructies een processor tegelijkertijd kan verwerken ), waarbij de laatste 2 tegenwoordig de meest voorkomende zijn.

LAGE NIVEAU TALEN:

Maar programmacode (instructies) rechtstreeks in de machinetaal (het uitvoerbare bestand) schrijven is bijna onmogelijk, omdat het jaren zal duren om een redelijk groter programma te schrijven en te debuggen (dat we tegenwoordig in een paar uur kunnen schrijven). om programmeurs op hun gemak te stellen, Assembly Languag e was ontwikkeld, nog steeds een processorspecifieke taal, maar relatief eenvoudig te begrijpen. Code geschreven in assembleertaal wordt omgezet in machinecode door Assembler – een programma geschreven in machinetaal. Beide worden talen op laag niveau genoemd.

TALEN OP HOOG NIVEAU:

Om de menselijke inspanning bij het communiceren met hardware verder te verminderen, werden talen op hoog niveau ontwikkeld die niet gebonden zijn aan een specifieke instructieset (die een specifieke architectuur aanduidt). Deze zijn identiek aan menselijke talen, dus gemakkelijk te schrijven, begrijpen, debuggen en toepassen op meerdere architecturen. Code geschreven in taal op hoog niveau wordt omgezet in taal op laag niveau door Compiler – een programma geschreven in taal op laag niveau. Een van de meest gebruikte talen op hoog niveau is C. Maar soms wordt code niet voorgecompileerd naar machinecode, maar direct uitgevoerd (of gecompileerd tijdens uitvoering) door Interpreter. Java is een van die “write once, run any” (WORA) talen die is gecompileerd naar byte-code en vervolgens geïnterpreteerd door Virtual Machine – opnieuw een gecompileerd programma.

APPLICATION BINAIRE INTERFACE (ABI):

Aangezien een architectuuronafhankelijk programma (code) kan worden geconverteerd naar architectuurafhankelijke code voor elke processor, is het de plicht van de compiler om te zorgen voor alle vereisten van een specifieke architectuur. Dat is wat Application Binary Interface (ABI) definieert. In eenvoudige bewoordingen vertegenwoordigt een ABI een of meer specifieke architecturen. Verdere details over ingebedde ABIs vereisen inzicht in de fasen van assembleren en compileren; objectcode, uitvoerbare en koppelbare indeling (ELF), statische (archivering) en dynamische koppeling van bibliotheken enz.

Nu komt uw vraag aan:

WAT ZIJN x86 EN ARM?

x86 is een reeks instructiesets, voornamelijk ontwikkeld en geproduceerd door Intel en AMD. ARM is een andere familie, ontworpen door een enkele entiteit ARM Holdings en in licentie gegeven aan vele fabrikanten van embedded oplossingen, waaronder Qualcomm, Mediatek, Samsung en Huawei. Snapdragon, Exynos en Kirin zijn hun merknamen. Het zijn geen processorfabrikanten, maar ze hebben licenties om ARM-processors op te nemen met hun eigen System on Chip (SoC) -circuits.

WAT IS SoC?

Een System on Chip (SoC) is een klein circuit dat processors en andere componenten bevat, zoals GPU, RAM, Flash / eMMC (equivalent van HDD of SSD) , WiFi- en bluetooth-module, USB-connectiviteit, UART (seriële poorten), JTAG (een serieel communicatieprotocol op een lager niveau), GPS, modems (voor mobiele connectiviteit) en mogelijk andere.

ARM ABIs:

Hoewel het grootste deel van Android-apps in Java is geschreven, kan men programmeren in moedertalen zoals C en C ++, dat moet worden gecompileerd. Android biedt zijn eigen Native Development Kit ( NDK ) inclusief (bibliotheken, headerbestanden en) een compiler die code kan compileren voor meerdere ABIs, waaronder armeabi-v7a (armhf in Linux-gemeenschap) en x86.

Android-app (Java) zelf is niet specifiek voor een architectuur. Tijdens het bouwen van een app converteert Android SDK de Java-broncode naar bytecode (.class bestanden) en compileert deze vervolgens naar D alvik EX ecutable (.dex) bestand dat is verpakt met .apk bestanden. Deze Dalvik bytecode wordt geïnterpreteerd en uitgevoerd in een aparte instantie van Dalvik Virtual Machine / ART voor elke app door een proces met de naam Zygote. Of het kan permanent worden gecompileerd naar systeemeigen machinecode (.odex of ) volgens de architectuur van het apparaat tijdens de installatie van de app (of later ). Maar als het apk (zip) -bestand bovendien ELF-binaire bestanden / bibliotheken bevat, zijn die architectuurspecifiek. Ontwikkelaars nemen gewoonlijk native bibliotheken voor meerdere architecturen op in hun apps.

Native applicaties / programmas / binaries / uitvoerbare bestanden / bibliotheken gebouwd met compilersuites die zijn gericht op ARM Embedded ABI v7a ( armeabi-v7a ) kan worden uitgevoerd op Application profile of 7th version of ARM processors ( Armv7-A ).
Code gecompileerd met toolchains geleverd door andere leveranciers, gericht op dezelfde architectuur (hoewel met verschillende ABI-namen), zou ook op Android-apparaten moeten draaien.

32-BIT VS. 64-BIT:

ARM-processor kan 32-bits of 64-bits zijn. Het hangt van SoC-fabrikanten af wat ze willen bouwen met hun embedded systeem, bijv. Leeuwenbek kan 32-bits of 64-bits zijn. 32-bits ARM-processors werden verbeterd voor prestaties en nieuwe mogelijkheden werden toegevoegd van versie 2 tot versie 7. 64-bits ondersteuning werd geïntroduceerd in ARMv8.

Om erachter te komen of een apparaat 32-bits of 64- bit, je moet de specificaties van zijn SoC en vervolgens van zijn processor controleren. SoC in Redmi Note 4 is bijvoorbeeld Qualcomm Snapdragon 625 (MSM 8953) , die processor Cortex-A53. Uit de technische specificaties van Cortex-53 blijkt duidelijk dat deze is gebaseerd op ARMv8 -architectuur, die kan 2 soorten instructiesets: aarch64 (die door Android “s arm64-v8a ABI gebruikt) en aarch32 (die door Android “s armeabi-v7a ABI gebruikt, dwz achterwaarts compatibel met ARMv7 ).

Het kan dus binaire bestanden / bibliotheken uitvoeren die zijn gecompileerd voor beide ABIs, maar niet voor x86 of armeabi (genaamd armel in de Linux-gemeenschap; die gericht was op architectuur ARMv5/v6, en was verwijderd in NDK r17).


GERELATEERD: Kan een 64-bits hardwareapparaat een 32-bits Android-versie draaien?

Opmerkingen

Antwoord

Het aantal hardwareapparaten dat x86 gebruikt, was nooit erg hoog. Enkele jaren geleden had Intel enkele x86-processors (Intel Atom) die werden gebruikt in sommige Android-tablets (bijvoorbeeld Samsung Galaxy Tab 10.3).

Die tablets bereikten echter nooit een hoog volume op de markt. En ik weet niet zeker of er een x86-smartphone of -tablet op de markt is die nog steeds een x86-CPU gebruikt.

Er is echter een veelvoorkomend geval waarin je een x86 Android-apparaat tegenkomt: de Android Emulator.

Aangezien de pc waarop de emulator draait, doorgaans een x86 CPU-emulator gebruikt die een x86-afbeelding uitvoert (in plaats van een op ARMv7 of ARMv8 / ARM64 gebaseerde afbeelding), kunnen deze gebruikmaken van de CPU-geïntegreerde virtualisatietechnieken die resulteren in een veel hogere snelheid.

Opmerkingen

  • Bedankt voor de gedetailleerde uitleg. Ik zou graag een voorbeeld willen nemen. Als ik gelijk heb, of het nu een processor of een SoC is, heeft de term x86 te maken met Intel en AMD. Ik wil een voorbeeld geven.
  • Ik heb de link apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 doorlopen -release voor het downloaden van Firefox android apk. Ik heb daar twee varianten gezien; Firefox android apk voor armeabi-v7a-architectuur en Firefox android apk voor x86-architectuur. Mijn verwarring begon vanaf daar.
  • SoC van bekende Android-apparaten zijn Snapdragon, MediaTek, Exynos, Kirin enz. Daarom moet ik, denk ik, android apk voor ARM downloaden. Heb ik gelijk?
  • @ user741975 Als je op dit moment armeabi-v7a kiest, wordt het uitgevoerd met een kans groter dan 99%. Als je een huidige middenklasse of high-end apparaat hebt, is ook arm64-v8a mogelijk een optie. Hoe dan ook, je kunt het gewoon downloaden en proberen te installeren. Als de architectuur verkeerd is, zal de installatie mislukken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *