Android-Apps für “ armeabi-v7a ” und “ x86 ” Architektur: SoC vs. Prozessor vs. ABI

Beim Herunterladen von Android-Apps habe ich manchmal Apps für und x86 Architektur.

Ich habe einige Referenzen für armeabi-v7a und x86 Architektur. Am Ende konnte ich jedoch nicht abschließen, welche mobilen Prozessoren und Architekturen zu armeabi-v7a und welche zu x86 gehören.

Meines Wissens sind Snapdragon (von Qualcomm), MediaTek, Exynos (von Samsung) und Kirin (von Huawei) die in Android-Geräten häufig verwendeten mobilen Prozessoren. Fast alle Marken erklären die Spezifikationen eines Smartphones und fast alle Spezifikationen sagen dies aus Der mobile Prozessor ist 64-Bit oder nicht. Sollte ich zu dem Schluss kommen, dass 64-Bit-mobile Prozessoren (Snapdragon, MediaTek, Exynos oder Kirin) zur ARM-Architektur gehören?

EDIT:
Um zu verstehen, welcher SoC armeabi-v7a Android apk unterstützt und welcher SoC x86 Android apk, ich habe die Spezifikationen von MediaTek Helio X30 und Snapdragon 855 durchgesehen. Die Spezifikation von Helio X30 besagt, dass es Dual unterstützt -core ARM Cortex-A73 und Quad-Core ARM Cortex-A53, aber ARM i s wird in der Spezifikation von Snapdragon 855 nirgends erwähnt. Daraus sollte ich schließen, dass Helio X30 armeabi-v7a Android-Apps unterstützt und Snapdragon 855 armeabi-v7a apps?

Bitte klären Sie meine Verwirrungen.

Antwort

Hier sind meine unvollständigen zusammengefassten Anmerkungen zu das Thema, aber genug, um Ihre Frage zu beantworten.

ANWEISUNGSSATZ:

Prozessoren bestehen aus Halbleiterchips, normalerweise monokristallinem Silizium in elektronischer Qualität. Sie sprechen kein Englisch oder eine andere menschliche Sprache, sie verstehen nur 0 und 1. Der Designer des Prozessors sagt uns also, worin Folge von Nullen und Einsern können wir diesen bestimmten Prozessor anweisen. Diese numerische Befehlssprache ist standardisiert als Machine Language und der Satz von Maschinenbefehlen heißt Instruction Set. Ein Prozessor kann nur auf bestimmte Arten von Befehlssätzen reagieren.
Befehlssätze können 8/16/32 / 64-Bit sein (definiert, wie viele Befehle ein Prozessor gleichzeitig verarbeiten kann ), wobei die letzten 2 heutzutage die übliche sind.

SPRACHEN MIT NIEDRIGEM NIVEAU:

Das Schreiben von Programmcode (Anweisungen) direkt in der Maschinensprache (der ausführbaren Datei) ist jedoch nahezu unmöglich, da das Schreiben und Debuggen eines einigermaßen größeren Programms (das wir heutzutage in wenigen Stunden schreiben können) Jahre dauern wird um Programmierer zu beruhigen, Assembly Languag Es wurde entwickelt, immer noch eine prozessorspezifische Sprache, aber relativ leicht zu verstehen. In Assemblersprache geschriebener Code wird von Assembler – einem in Maschinensprache geschriebenen Programm – in Maschinencode konvertiert. Beide werden als Low-Level-Sprachen bezeichnet.

SPRACHEN MIT HOHEM NIVEAU:

Um den menschlichen Aufwand bei der Kommunikation mit Hardware weiter zu reduzieren, wurden Hochsprachen entwickelt, die nicht an einen bestimmten Befehlssatz gebunden sind (der eine bestimmte Architektur bezeichnet). Diese sind mit menschlichen Sprachen identisch und daher leicht zu schreiben, zu verstehen, zu debuggen und auf mehrere Architekturen anzuwenden. In Hochsprache geschriebener Code wird von Compiler – einem in Niedrigsprache geschriebenen Programm – in eine Niedrigsprache konvertiert. Eine der am häufigsten verwendeten Hochsprachen ist C. Manchmal wird Code jedoch nicht in Maschinencode vorkompiliert, sondern direkt von Interpreter ausgeführt (oder während der Ausführung kompiliert). Java ist eine dieser „einmal schreiben, überall ausführen“ (WORA) -Sprachen, die zu byte-code kompiliert und dann von – wieder ein kompiliertes Programm.

ANWENDUNGSBINÄRE SCHNITTSTELLE (ABI):

Da ein architekturunabhängiges Programm (Code) für jeden Prozessor in architekturabhängigen Code konvertiert werden kann, ist es die Pflicht des Compilers, sich um alle Anforderungen einer bestimmten Architektur zu kümmern Application Binary Interface (ABI) definiert. In einfachen Worten repräsentiert ein ABI eine oder mehrere spezifische Architekturen. Weitere Details zu eingebetteten ABIs erfordern einen Einblick in die Phasen des Zusammenbaus und Kompilierens. Objektcode, ausführbares und verknüpfbares Format (ELF), statische (Archivierung) und dynamische Verknüpfung von Bibliotheken usw.

Kommen wir nun zu Ihrer Frage:

WAS SIND x86 UND ARM?

x86 ist eine Familie von Befehlssätzen, die hauptsächlich von Intel und AMD entwickelt und hergestellt werden. ARM ist eine weitere Familie, die von einer einzigen Entität ARM Holdings entwickelt und an viele Hersteller eingebetteter Lösungen lizenziert wurde, darunter Qualcomm, Mediatek, Samsung und Huawei. Löwenmaul, Exynos und Kirin sind ihre Markennamen. Sie sind keine Prozessorhersteller, haben jedoch Lizenzen, um ARM-Prozessoren mit eigenen SoC-Schaltkreisen (System on Chip) einzuschließen.

WAS IST SoC?

Ein System on Chip (SoC) ist eine kleine Schaltung, die Prozessoren zusammen mit anderen Komponenten wie GPU, RAM, Flash / eMMC (entspricht HDD oder SSD) enthält. , WLAN- und Bluetooth-Modul, USB-Konnektivität, UART (serielle Schnittstellen), JTAG (ein serielles Kommunikationsprotokoll auf sehr niedrigerer Ebene), GPS, Modems (für Mobilfunkverbindungen) und möglicherweise andere.

ARM-ABIs:

Obwohl der größte Teil der Android-Apps in Java geschrieben ist, kann man in Muttersprachen wie C und programmieren C ++, das kompiliert werden muss. Android bietet ein eigenes natives Entwicklungskit ( NDK ) mit (Bibliotheken, Header-Dateien und) einem Compiler, der Code für mehrere ABIs kompilieren kann, einschließlich armeabi-v7a (armhf in der Linux-Community) und x86.

Android (Java) App selbst ist nicht spezifisch für eine Architektur. Während des App-Erstellungsprozesses konvertiert das Android SDK die Java-Quelle in Bytecode (.class -Dateien) und kompiliert sie dann in D alvik EX ecutable (.dex) Datei, die mit .apk -Dateien gepackt ist. Dieser Dalvik-Bytecode wird interpretiert und in einer separaten Instanz von Dalvik Virtual Machine / ART für jede App durch einen Prozess namens Zygote. Oder es kann dauerhaft zu nativem Maschinencode kompiliert werden (.odex oder ) gemäß der Architektur des Geräts während der Installation der App (oder später ). Wenn die apk (zip) -Datei jedoch zusätzlich ELF-Binärdateien / -Bibliotheken enthält, sind diese architekturspezifisch. Entwickler nehmen normalerweise native Bibliotheken für mehrere Architekturen in ihre Apps auf.

Native Anwendungen / Programme / Binärdateien / ausführbare Dateien / Bibliotheken, die mit Compiler-Suites erstellt wurden, die auf ARM Embedded ABI v7a ( armeabi-v7a ) kann auf Application profile of 7th version of ARM processors ( Armv7-A ).
Code, der mit
Toolchains anderer Anbieter kompiliert wurde und auf dieselbe Architektur abzielt (allerdings mit unterschiedlichen ABI-Namen), sollte auch auf Android-Geräten ausgeführt werden.

32-BIT VS. 64-BIT:

Der ARM-Prozessor kann 32-Bit oder 64-Bit sein. Es hängt von den SoC-Herstellern ab, was sie mit ihrem eingebetteten System bauen möchten, z. Löwenmaul kann 32-Bit oder 64-Bit sein. 32-Bit-ARM-Prozessoren wurden hinsichtlich der Leistung verbessert und neue Funktionen von Version 2 auf Version 7 hinzugefügt. In ARMv8 wurde die 64-Bit-Unterstützung eingeführt.

Um herauszufinden, ob ein Gerät 32-Bit oder 64- ist Bit, müssen Sie die Spezifikationen seines SoC und dann seines Prozessors überprüfen. Zum Beispiel ist SoC in Redmi Note 4 Qualcomm Snapdragon 625 (MSM 8953) , das enthält Prozessor Cortex-A53. Aus den technischen Spezifikationen von von Cortex-53 geht hervor, dass es auf der Architektur ARMv8 basiert, die verarbeitet werden kann 2 Arten von Befehlssätzen: aarch64 (von Android arm64-v8a ABI verwendet) und aarch32 (welches Android armeabi-v7a ABI verwendet, dh abwärtskompatibel mit ARMv7 ).

Damit können Binärdateien / Bibliotheken ausgeführt werden, die für beide ABIs kompiliert wurden, jedoch nicht für x86 oder armeabi (in der Linux-Community armel genannt; die auf die Architektur ARMv5/v6 abzielte und entfernt in NDK r17).


RELATED: Könnte auf einem 64-Bit-Hardwaregerät eine 32-Bit-Android-Version ausgeführt werden?

Kommentare

Antwort

Die Anzahl der Hardwaregeräte, die x86 verwenden, war nie sehr hoch. Vor einigen Jahren hatte Intel einige x86-Prozessoren (Intel Atom), die in einigen Android-Tablets (z. B. Samsung Galaxy Tab 10.3) verwendet wurden.

Diese Tablets erreichten jedoch nie ein hohes Volumen auf dem Markt. Und ich bin mir nicht sicher, ob es auf dem Markt ein x86-Smartphone oder -Tablet gibt, das noch eine x86-CPU verwendet.

Es gibt jedoch einen sehr häufigen Anwendungsfall, bei dem Sie auf ein „x86-Android-Gerät“ stoßen: Android Emulator.

Da der PC, auf dem der Emulator ausgeführt wird, normalerweise x86-CPU-Emulatoren verwendet, die ein x86-Image ausführen (anstelle eines ARMv7- oder ARMv8 / ARM64-basierten Images), können die CPU-integrierten Virtualisierungstechniken verwendet werden, die dazu führen eine viel höhere Geschwindigkeit.

Kommentare

  • Vielen Dank für die ausführliche Erklärung. Ich möchte ein Beispiel nehmen. Wenn ich recht habe, sei es ein Prozessor oder ein SoC, ist der Begriff x86 mit Intel und AMD verwandt. Ich möchte ein Beispiel nehmen.
  • Ich habe den Link apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 durchgesehen -release zum Herunterladen von Firefox android apk. Ich habe dort zwei Varianten gesehen; Firefox android apk für armeabi-v7a architektur und Firefox android apk für x86 architektur. Meine Verwirrung begann von dort.
  • SoC von bekannten Android-Geräten sind Snapdragon, MediaTek, Exynos, Kirin usw. Daher glaube ich, ich muss Android apk für ARM herunterladen. Habe ich recht?
  • @ user741975 Wenn Sie im Moment armeabi-v7a wählen, wird es mit einer Chance von mehr als 99% ausgeführt. Wenn Sie ein aktuelles Mittelklasse- oder High-End-Gerät haben, kann auch arm64-v8a eine Option sein. Auf jeden Fall können Sie es einfach herunterladen und versuchen, es zu installieren. Wenn die Architektur falsch ist, schlägt die Installation einfach fehl.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.