Загружая приложения для Android, я иногда видел приложения для armeabi-v7a
архитектуры x86
.
Я прочитал некоторые ссылки для armeabi-v7a
и x86
архитектуры. Однако в итоге я так и не смог окончательно определить, какие мобильные процессоры и архитектуры относятся armeabi-v7a
к x86
.
Насколько мне известно, мобильные процессоры, обычно используемые в устройствах Android, — это Snapdragon (от Qualcomm), MediaTek, Exynos (от Samsung) и Kirin (от Huawei). Почти все бренды объясняют характеристики смартфона, и почти во всех спецификациях указывается, является ли мобильный процессор 64-битным или нет. Стоит ли делать вывод, что 64-битные мобильные процессоры (Snapdragon, MediaTek, Exynos или Kirin) относятся к архитектуре ARM?
РЕДАКТИРОВАТЬ:
Чтобы понять, какая SoC поддерживает armeabi-v7a
Android apk, а какая SoC поддерживает x86
Android apk, я изучил спецификации MediaTek Helio X30
и Snapdragon 855
. В спецификации Helio X30 говорится, что он поддерживает двухъядерный ARM Cortex-A73 и четырехъядерный ARM Cortex-A53, но ARM нигде не упоминается в спецификации Snapdragon 855. Из этого следует вывод, что Helio X30 будет поддерживать приложения Android и armeabi-v7a
Snapdragon 855 не будет поддерживать armeabi-v7a
приложения?
Пожалуйста, разъясните мои заблуждения.
Вот мои неполные краткие заметки по этому вопросу, но достаточно, чтобы ответить на ваш вопрос.
НАБОР ИНСТРУКЦИЙ:
Процессоры изготавливаются из полупроводниковых кристаллов, обычно из монокристаллического кремния электронного класса. Они не знают английского или любого другого человеческого языка, они понимают только 0
и 1
. Таким образом, разработчик процессора сообщает нам, в какой последовательности нулей и единиц мы можем проинструктировать этот конкретный процессор. Этот числовой язык инструкций стандартизирован, так Machine Language
как набор машинных инструкций называется Instruction Set
. Процессор может действовать только с определенным типом (типами) набора инструкций.
Наборы инструкций могут быть 8/16/32/64-битными (определяют, сколько инструкций процессор может обрабатывать одновременно), последние 2 являются распространенными в наши дни.
ЯЗЫКИ НИЗКОГО УРОВНЯ:
Но написание программного кода (инструкций) непосредственно на машинном языке (исполняемом файле) почти невозможно, потому что на написание и отладку достаточно большой программы (которую в наши дни мы можем написать за несколько часов) уйдут годы. Поэтому, чтобы облегчить жизнь программистам, был разработан язык ассемблера, по-прежнему ориентированный на процессор, но относительно простой для понимания. Код, написанный на языке ассемблера, преобразуется в машинный код Assembler
программой, написанной на машинном языке. Оба они называются языками низкого уровня.
ЯЗЫКИ ВЫСОКОГО УРОВНЯ:
Чтобы еще больше сократить человеческие усилия при общении с оборудованием, были разработаны языки высокого уровня, которые не привязаны к определенному набору инструкций (обозначающему определенную архитектуру). Они идентичны человеческим языкам, поэтому их легко писать, понимать, отлаживать и применять к различным архитектурам. Код, написанный на языке высокого уровня, преобразуется в язык низкого уровня с помощью Compiler
программы, написанной на языке низкого уровня. Одним из наиболее часто используемых языков высокого уровня является C. Но иногда код предварительно не компилируется в машинный код, а выполняется напрямую (или компилируется во время выполнения) с помощью Interpreter
. Java является одним из таких языков «написать один раз, запустить где угодно» (WORA) , который компилируется, byte-code
а затем интерпретируется Virtual Machine
- снова скомпилированной программой.
ПРИЛОЖЕНИЕ БИНАРНЫЙ ИНТЕРФЕЙС (ABI):
Поскольку архитектурно-независимая программа (код) может быть преобразована в архитектурно-зависимый код для любого процессора, компилятор обязан позаботиться обо всех требованиях конкретной архитектуры. Это то, что определяет Application Binary Interface (ABI). Проще говоря, ABI представляет собой одну или несколько конкретных архитектур. Дополнительные сведения о встроенных ABI требуют понимания этапов сборки и компиляции; объектный код, Executable and Linkable Format (ELF), статическое (архивирование) и динамическое связывание библиотек и т. д.
Теперь перейдем к вашему вопросу:
ЧТО ТАКОЕ x86
И ARM
?
x86 — это семейство наборов инструкций, в основном разработанное и производимое компаниями Intel и AMD. ARM — это еще одно семейство, разработанное одной организацией ARM Holdings
и лицензированное многими производителями встраиваемых решений, включая Qualcomm, Mediatek, Samsung и Huawei. Snapdragon, Exynos и Kirin — их торговые марки. Они не являются производителями процессоров, но у них есть лицензии на включение процессоров ARM в свои собственные схемы System on Chip (SoC).
ЧТО ТАКОЕ SoC?
Система на кристалле (SoC) — это небольшая схема, которая включает процессоры вместе с другими компонентами, такими как графический процессор, оперативная память, флэш-память/eMMC (эквивалент жесткого диска или твердотельного накопителя), модуль Wi-Fi и Bluetooth, подключение через USB, UART (последовательные порты), JTAG. (протокол последовательной связи очень низкого уровня), GPS, модемы (для сотовой связи) и, возможно, другие.
ARM ABI:
Хотя большая часть приложений для Android написана на Java, можно программировать на родных языках, таких как C и C++, которые необходимо компилировать. Android предоставляет собственный комплект разработки ( NDK ), включающий (библиотеки, файлы заголовков и) компилятор, который может компилировать код для нескольких ABI, включая armeabi-v7a
( armhf
в сообществе Linux) и x86
.
Приложение Android (Java) само по себе не зависит от архитектуры. В процессе сборки приложения Android SDK преобразует исходный код Java в байт-код ( файлы) , .class
а затем компилирует его в исполняемый ( ) файл Dalvik EX.dex
, который упакован .apk
файлами. Этот байт-код Dalvik интерпретируется и запускается в отдельном экземпляре Dalvik Virtual Machine
/ ART
для каждого приложения процессом с именем Zygote
. Или он может быть постоянно скомпилирован в собственный машинный код ( .odex
или .oat
) в соответствии с архитектурой устройства во время установки приложения (или позже ). Но если файл apk (zip) дополнительно содержит двоичные файлы/библиотеки ELF, они зависят от архитектуры. Разработчики обычно включают в свои приложения нативные библиотеки для нескольких архитектур.
Собственные приложения/программы/двоичные файлы/исполняемые файлы/библиотеки, созданные с помощью наборов компиляторов ARM Embedded ABI v7a
( armeabi-v7a ), могут быть запущены на Application profile of 7th version of ARM processors
( Armv7-A ).
Код, скомпилированный с помощью цепочек инструментов , предоставленных другими поставщиками, для той же архитектуры (хотя и с другими именами ABI), также должен работать на устройствах Android.
32-БИТНАЯ ПРОТИВ. 64-БИТ:
Процессор ARM может быть 32-битным или 64-битным. Это зависит от производителей SoC, что они хотят построить со своей встроенной системой, например, Snapdragon может быть 32-битным или 64-битным. 32-разрядные процессоры ARM были улучшены для повышения производительности, и были добавлены новые возможности от версии 2 до версии 7. 64-разрядная поддержка была введена в ARMv8.
Чтобы узнать, является ли устройство 32-битным или 64-битным, вам необходимо проверить спецификации его SoC, а затем его процессора. Например, SoC в Redmi Note 4 — это Qualcomm Snapdragon 625 (MSM 8953) , который содержит процессор Cortex-A53
. Из технических характеристик Cortex-53 видно , что он основан на ARMv8
архитектуре, которая может обрабатывать 2 типа наборов инструкций: aarch64
(который использует Android arm64-v8a ABI) и aarch32
(который использует Android armeabi-v7a ABI, т.е. обратно совместим с ARMv7
).
Таким образом, он может запускать двоичные файлы/библиотеки, скомпилированные для обоих этих ABI, но не для x86 или armeabi
(называемый armel в сообществе Linux; который предназначался для архитектуры ARMv5/v6
и был удален в NDK r17
).
СВЯЗАННЫЕ: Может ли 64-битное аппаратное устройство запускать 32-битную версию Android?
Количество аппаратных устройств, использующих x86, никогда не было очень большим. Несколько лет назад у Intel было несколько процессоров x86 (Intel Atom), которые использовались в некоторых планшетах Android (например, Samsung Galaxy Tab 10.3).
Однако эти планшеты так и не достигли больших объемов продаж на рынке. И я не уверен, есть ли на рынке смартфон или планшет x86, которые все еще используют процессор x86.
Однако есть один очень распространенный случай использования, когда вы сталкиваетесь с «устройством x86 Android»: эмуляторы Android, такие как тот, который содержится в Android SDK, или другие эмуляторы, такие как Genymotion, BlueStacks, ...
Поскольку ПК, на котором работает эмулятор, обычно использует ЦП x86, эмуляторы, которые запускают образ x86 (вместо образа на основе ARMv7 или ARMv8/ARM64), могут использовать методы виртуализации, интегрированные в ЦП, что приводит к гораздо более высокой скорости.
armeabi-v7a
он будет работать с вероятностью более 99%. Если у вас есть текущее устройство среднего или высокого класса, это также arm64-v8a
может быть вариантом. В любом случае, вы можете просто скачать его и попробовать установить. Если архитектура неправильная, установка просто завершится ошибкой.
Моррисон Чанг
armeabi
только для обратной поддержки.Джон Даллман