Arm64 v8a что это
Перейти к содержимому

Arm64 v8a что это

  • автор:

Многоядерные устройства и Xamarin.Android

ОС Android может работать в разных компьютерных архитектурах. В этом документе рассматриваются варианты архитектуры ЦП, в которых допускается выполнение приложения Xamarin.Android. Также в этом документе описываются принципы упаковки приложений Android для поддержки нескольких архитектур ЦП. Мы познакомим вас с двоичным интерфейсом приложений (ABI) и подскажем, какие интерфейсы ABI следует применять в приложениях Xamarin.Android.

Обзор

В ОС Android можно создавать «толстые» двоичные файлы с расширением .apk , каждый из которых содержит машинный код для работы в разных архитектурах ЦП. В этих файлах каждый фрагмент машинного кода сопоставлен с определенным двоичным интерфейсом приложений. Интерфейс ABI определяет, какой конкретно фрагмент машинного кода будет выполняться на конкретном физическом устройстве. Например, чтобы приложение Android работало на устройстве x86, при сборке приложения необходимо включить поддержку ABI x86.

Это означает, что каждое приложение Android поддерживает по крайней мере один двоичный интерфейс внедренных приложений (EABI). EABI — это соглашения, специально созданные для внедренного программного обеспечения. Типичный интерфейс EABI описывает следующие форматы:

  • набор инструкций ЦП;
  • порядок следования байтов для операций загрузки и сохранения в памяти во время выполнения;
  • двоичный формат объектных файлов и библиотек программ, а также допустимые и поддерживаемые типы содержимого для этих файлов и библиотек;
  • различные соглашения о передаче данных между кодом приложения и системой (например, порядок применения регистров и (или) стека при вызове функций, ограничения выравнивания и т. д.);
  • ограничения выравнивания и размера для типов перечисления, структур, полей и массивов;
  • список символов функций, доступных в машинном коде во время выполнения, обычно для конкретного узкого набора библиотек.

Архитектура armeabi и потокобезопасность

Двоичный интерфейс приложений подробно описан ниже. Пока мы лишь напомним, что используемая Xamarin.Android среда выполнения armeabi не является потокобезопасной. Если приложение, поддерживающее armeabi , развертывается на устройстве armeabi-v7a , возникает множество странных и порой необъяснимых исключений.

Из-за ошибки, существующей в Android версий 4.0.0, 4.0.1, 4.0.2 и 4.0.3, собственные библиотеки всегда извлекаются из каталога armeabi , даже если присутствует каталог armeabi-v7a и устройство имеет архитектуру armeabi-v7a .

Xamarin.Android следит за тем, чтобы .so добавлялись в APK в правильном порядке. Эта ошибка не должна составлять проблему для пользователей Xamarin.Android.

Описания интерфейсов ABI

Каждый ABI, поддерживаемый в Android, имеет уникальное имя.

armeabi;

Это имя EABI для ЦП с архитектурой ARM, поддерживающих по меньшей мере набор инструкций ARMv5TE. Android соблюдает ABI для ARM GNU/Linux с прямым порядком байтов. Этот интерфейс ABI не поддерживает вычисления с плавающей запятой с использованием аппаратуры. Все операции с плавающей запятой выполняются вспомогательными программными функциями, которые собраны в статическую библиотеку libgcc.a компилятора. В armeabi не поддерживаются устройства SMP.

Код armeabi в Xamarin.Android не является потокобезопасным. Его нельзя использовать на многопроцессорных устройствах armeabi-v7a (как описано ниже). Код armeabi можно безопасно использовать на одноядерных устройствах armeabi-v7a .

armeabi-v7a

Это другой набор инструкций для ЦП с архитектурой ARM, дополняющий описанный выше интерфейс EABI armeabi . В EABI armeabi-v7a реализована поддержка операций с плавающей запятой с использованием аппаратуры и поддержка многоядерных устройств (SMP). Приложение, в котором используется EABI armeabi-v7a , может выполняться существенно быстрее, чем приложение с armeabi .

Машинный код armeabi-v7a не выполняется на устройствах ARMv5.

arm64-v8a

Это набор 64-разрядных инструкций, основанный на архитектуре ЦП ARMv8. Эта архитектура используется в устройствах Nexus 9. В Xamarin.Android 5.1 реализована поддержка этой архитектуры (дополнительные сведения см. в разделе о поддержке 64-разрядной среды выполнения).

x86

Это имя ABI для процессоров, поддерживающих набор инструкций, известный как x86 или IA-32. Этот интерфейс ABI соответствует набору инструкций для Pentium Pro, включая наборы для MMX, SSE, SSE2 и SSE3. Он не включает другие необязательные расширения IA-32, такие как:

  • инструкция MOVBE;
  • дополнительное расширение SSE3 (SSSE3);
  • любые варианты SSE4.

Хотя платформа Google TV работает на архитектуре x86, ее не поддерживает Android NDK.

x86_64

Это имя ABI для процессоров, которые поддерживают 64-разрядный набор инструкций x86 (также известен как x64 или AMD64). В Xamarin.Android 5.1 реализована поддержка этой архитектуры (дополнительные сведения см. в разделе о поддержке 64-разрядной среды выполнения).

Формат файлов APK

Пакет приложения Android (APK) — это формат файлов, в котором содержится весь программный код, файлы, ресурсы и сертификаты, которые используются приложением Android. По сути это файл .zip , но с расширением .apk . На снимке экрана ниже в развернутом виде представлено содержимое файла .apk , созданного Xamarin.Android.

Contents of the .apk

Краткое описание содержимого файла .apk .

  • AndroidManifest.xml — это AndroidManifest.xml файл в двоичном формате XML.
  • classes.dex — содержит код приложения, скомпилированный в dex формате файла, используемом виртуальной машиной среды выполнения Android.
  • resources.arsc — этот файл содержит все предварительно скомпилированные ресурсы для приложения.
  • lib — этот каталог содержит скомпилированный код для каждого ABI. Здесь создается отдельная вложенная папка для каждого из интерфейсов ABI, которые мы перечислили в предыдущем разделе. Файл .apk , представленный на снимке экрана выше, содержит собственные библиотеки для armeabi-v7a и x86 .
  • META-INF — этот каталог (если он присутствует) используется для хранения сведений о подписи, пакетах и данных конфигурации расширения.
  • res — этот каталог содержит ресурсы, которые не были скомпилированы в resources.arsc .

Файл libmonodroid.so является обязательной собственной библиотекой для всех приложений Xamarin.Android.

Поддержка ABI для устройств Android

Каждое устройство Android поддерживает выполнение машинного кода, соответствующего одному из двух ABI:

  • ABI «primary» — это соответствует коду компьютера, используемому в системном образе.
  • ABI — это необязательный ABI , который также поддерживается системным образом.

Например, типичное устройство ARMv5TE использует только основной ABI armeabi , а для устройств ARMv7 определен основной ABI armeabi-v7a и дополнительный ABI armeabi . Для устройств x86 обычно указывается только основной ABI x86 .

Установка собственной библиотеки Android

Во время установки пакета все собственные библиотеки из .apk извлекаются в каталог собственных библиотек приложения (обычно это /data/data//lib , который далее будет обозначаться как $APP/lib ).

Алгоритм установки собственных библиотек Android существенно различается для разных версий Android.

Установка собственных библиотек в Android до версии 4.0

До версии Android 4.0 Ice Cream Sandwich собственные библиотеки извлекались только для одного интерфейса ABI из .apk . Приложения Android тех давних лет сначала пытаются извлечь все собственные библиотеки для основного интерфейса ABI, а если таковых нет, ОС Android извлекает все собственные библиотеки для дополнительного ABI. Слияние не выполняется.

Давайте рассмотрим этот подход на примере приложения, которое устанавливается на устройстве armeabi-v7a . Его файл .apk, поддерживает как armeabi , так и armeabi-v7a , и в его каталоге lib есть следующие каталоги и файлы для ABI:

lib/armeabi/libone.so lib/armeabi/libtwo.so lib/armeabi-v7a/libtwo.so 

После установки каталог собственных библиотек будет содержать следующее:

$APP/lib/libtwo.so # from the armeabi-v7a directory in the apk 

Другими словами, libone.so не устанавливается. Это приведет к проблемам, так как libone.so отсутствует и приложение не сможет загрузить его во время выполнения. Такое поведение нелогично, но заявка о включении его в список ошибок была классифицирована как «работает ожидаемым образом».

Это означает, что в приложениях для Android версий старше 4.0 необходимо предоставлять все собственные библиотеки для каждого поддерживаемого интерфейса ABI, то есть каталог .apk должен содержать следующее:

lib/armeabi/libone.so lib/armeabi/libtwo.so lib/armeabi-v7a/libone.so lib/armeabi-v7a/libtwo.so 
Установка собственных библиотек: Android 4.0 — Android 4.0.3

В Android 4.0 Ice Cream Sandwich логика извлечения изменилась. Теперь Android просматривает все собственные библиотеки и для каждого файла проверяет, извлечена ли уже библиотека с таким базовым именем и выполняются ли следующие два условия:

  • файл еще не извлечен;
  • интерфейс ABI этой собственной библиотеки совпадает с основным или дополнительным интерфейсом ABI для целевого объекта.

Если эти условия выполняются, используется принцип «слияния». Предположим, что у нас есть .apk со следующим содержимым:

lib/armeabi/libone.so lib/armeabi/libtwo.so lib/armeabi-v7a/libtwo.so 

После установки такого приложения каталог собственных библиотек будет содержать следующее:

$APP/lib/libone.so $APP/lib/libtwo.so 

К сожалению, результат этого алгоритма зависит от порядка файлов, что подробно описано в документе Issue 24321: Galaxy Nexus 4.0.2 uses armeabi native code when both armeabi and armeabi-v7a is included in apk (Проблема 24321: Galaxy Nexus 4.0.2 использует машинный код armeabi, если в APK есть файлы для armeabi и armeabi-v7a).

Собственные библиотеки обрабатываются «по порядку» (который определяется программой распаковки) и применяется первое соответствие. Так как .apk содержит одновременно версии armeabi и armeabi-v7a для файла libtwo.so , при этом armeabi указан первым, то используется именно версия armeabi , но не правильная версия armeabi-v7a :

$APP/lib/libone.so # armeabi $APP/lib/libtwo.so # armeabi, NOT armeabi-v7a! 

Более того, даже если указаны оба ABI ( armeabi и armeabi-v7a ), как описано ниже в разделе Объявление поддерживаемых ABI, Xamarin.Android создаст следующий элемент в . csproj :

armeabi,armeabi-v7a 

В результате библиотека armeabi libmonodroid.so будет найдена первой в составе .apk , и именно armeabi libmonodroid.so будет извлекаться, даже если в файле присутствует библиотека armeabi-v7a libmonodroid.so , оптимизированная для целевого устройства. Это может приводить к дополнительным неочевидным ошибкам во время выполнения, так как armeabi не поддерживает многоядерные устройства.

Установка собственных библиотек в Android версии 4.0.4 и выше

В Android 4.0.4 снова изменилась логика извлечения: теперь ОС перебирает все собственные библиотеки, считывает базовые имена файлов и извлекает версию для основного интерфейса ABI (если она есть) или версию для дополнительного интерфейса ABI (если она есть). Здесь реализован правильный принцип «слияния». Предположим, что у нас есть .apk со следующим содержимым:

lib/armeabi/libone.so lib/armeabi/libtwo.so lib/armeabi-v7a/libtwo.so 

После установки такого приложения каталог собственных библиотек будет содержать следующее:

$APP/lib/libone.so # from armeabi $APP/lib/libtwo.so # from armeabi-v7a 

Xamarin.Android и интерфейсы ABI

Xamarin.Android поддерживает следующие варианты 64-разрядной архитектуры:

Начиная с августа 2018 г. новые приложения должны будут использовать API уровня 26, а с августа 2019 г. будет необходимо выпускать 64-разрядные версии приложений в дополнение к 32-разрядным.

Xamarin.Android поддерживает следующие варианты 32-разрядной архитектуры:

^ Начиная с версии Xamarin.Android 9.2 armeabi больше не поддерживается.

Xamarin.Android сейчас не поддерживает mips .

Объявление поддерживаемых ABI

По умолчанию Xamarin.Android применяет armeabi-v7a для сборки выпуска, а armeabi-v7a и x86 — для отладочной сборки. Поддержку других ABI можно задать на странице параметров для проекта Xamarin.Android. В Visual Studio эти значения настраиваются на странице Параметры Android в окне Свойства, на вкладке Дополнительно, как показано на следующем снимке экрана:

Android Options Advanced properties

В Visual Studio для Mac поддерживаемую архитектуру можно выбрать на странице Android Build (Сборка Android) в разделе Project Options (Параметры проекта) на вкладке Advanced (Дополнительно), как показано на следующем снимке экрана:

Android Build Supported ABIs

Существуют ситуации, когда нужно объявить поддержку дополнительного интерфейса ABI, например в следующих случаях:

  • развертывание приложения на устройстве x86 ;
  • развертывание приложения на устройстве armeabi-v7a с обеспечением потокобезопасности.

Итоги

В этом документе мы рассмотрели архитектуры ЦП, в которых можно запускать приложения Xamarin.Android. Здесь описана концепция двоичного интерфейса приложения и его применение в ОС Android для поддержки разнородных архитектур ЦП. Затем мы объяснили, как правильно описать поддержку интерфейсов ABI в приложении Xamarin.Android, и рассмотрели несколько проблем, которые могут возникать при использовании приложения Xamarin.Android на устройстве armeabi-v7a , которое предназначено только для armeabi .

Связанные ссылки

  • Пакет NDK для Android
  • (Проблема 9089: на устройстве Nexus One не загружается ни одна собственная библиотека для armeabi, если есть хотя бы одна библиотека для armeabi-v7a
  • Проблема 24321: устройство Galaxy Nexus 4.0.2 использует машинный код armeabi, если в APK есть файлы для armeabi и armeabi-v7a

Как определить архитектуру вашего Android смартфона или планшета: armeabi-v7a, arm64-v8a, x86 и x86_64

Архитектура процессора вашего Android-устройства определяет, какие приложения и компоненты с ним совместимы.

Эта информация может быть полезна при установке APK-файлов, загруженных с таких сайтов как APKMirror, APKPure, APKCombo и других. В настоящий момент, выпускаются APK для четырёх архитектур: armeabi-v7a (arm), arm64-v8a (aarch64), x86 (i386) и x86_64.

В этой статье мы расскажем, как узнать архитектуру вашего Android-смартфона или планшета, используя приложение CPU X или информацию в настройках устройства.

Определение архитектуры с помощью приложения CPU X

Приложение CPU X предоставляет информацию о вашем устройстве, включая архитектуру процессора. Вот как его использовать:

  • Установите приложение CPU X из Google Play Маркет.
  • Запустите приложение и откройте вкладку Процессор (Device).
  • В разделе «Процессор» найдите строку Набор инструкций (Instruction Sets). Здесь будет указана архитектура вашего устройства (armeabi-v7a, arm64-v8a, x86 или x86_64).

Определение архитектуры через настройки Android-устройства:

  • Откройте настройки на вашем Android-устройстве.
  • Найдите раздел «О телефоне» или «О планшете» (зависит от устройства).
  • Ищите информацию о процессоре или модели устройства и проконсультируйтесь с информацией о производителе. Обычно модель процессора указывает на архитектуру, которую вы ищете (например, Snapdragon 865 — это процессор архитектуры arm64-v8a).

Заключение

Определение архитектуры вашего Android-устройства важно для того, чтобы установить совместимые приложения и компоненты. Вы можете использовать приложение CPU X или информацию в настройках устройства, чтобы узнать архитектуру вашего процессора. Теперь, зная архитектуру вашего устройства, вы сможете установить правильные версии приложений и наслаждаться их работой на вашем смартфоне или планшете.

Архитектура процессора. Что такое armeabi-v7a и arm64-v8a

Архитектура процессора. Что такое armeabi-v7a и arm64-v8a

Быстро узнаем, что такое armeabi-v7a, arm64-v8a и какие приложения Вы можете установить на свое устройство.

ufrstealer
Просмотров:
03-03-2023, 18:48

Наверное у каждого человека, который качал приложения не с официального магазина, возникали ошибки вида: Приложение не установлено, не удалось разобрать пакет и тому подобные. Причин для этого может быть несколько, но сегодня мы рассмотрим одну из самых главных. Технический мир развивается и постоянно появляются новые технологии от компании Google и других производителей Андроид устройств. Если ближе к сути, то у каждого процессора есть своя архитектура (Набор инструкций) и их бывает несколько видов:

  • armeabi-v7a — самый популярный набор инструкций на данный момент, работает с 32-разрядными процессорами;
  • arm64-v8a — 64-разрядная архитектура, которая набирает обороты и появляется на новых устройствах все чаще, работает с 64-битными процессорами;
  • x86 и x86_64 — для процессоров Intel, которые устанавливаются на ноутбуки и планшеты.

Узнаем, какая архитектура у Вашего устройства

  1. Качаем с Google Play приложение Droid Hardware Info. Далее выполняем следующие действия: переходим в раздел -> Система -> Процессор и смотрим пункты «Архитектура процессора», а также «Набор инструкций».
  2. Если у Вас есть Telegram, заходим в настройки и листаем в самый низ, где будет написана Ваша архитектура.

архитектура Telegram

Какие игры и приложения Вы можете устанавливать?

  • Если у Вас armeabi-v7a, то выбор невелик и нужно искать файлы с поддержкой этого набора инструкций;
  • Если у Вас arm64-v8a, можно устанавливать файлы armeabi-v7a и arm64-v8a;
  • x86 — только x86, x86_64 — можно скачивать x86 и x86_64.

Итог — если Вы не хотите разбираться во всем этом, просто старайтесь скачивать файлы с armeabi-v7a, они поддерживаются почти везде.

Но есть исключения:

  1. Если на устройстве с процессором arm64-v8a установлена 32-разрядная операционная система, то можно будет устанавливать только файлы armeabi-v7a.
  2. С выходом новой версии Android 14, при установке приложений armeabi-v7a, система предупреждает, что в скором времени Google откажется от поддержки 32-битных версий и останется только arm64-v8a. Насколько быстро произойдет переход — неизвестно. Но вряд ли это будет быстро.

Если у Вас появились дополнительные вопросы — задавайте их в комментариях, мы постараемся ответить.

Архитектура процессора

Xamarin.Android поддерживает несколько архитектур ЦП, включая 32-разрядные и 64-разрядные устройства. В этой статье объясняется, как нацелить приложение на одну или несколько архитектур ЦП, поддерживаемых Android.

Обзор архитектур ЦП

При подготовке приложения к выпуску необходимо указать, какую архитектуру ЦП платформы поддерживает ваше приложение. Один APK-файл может содержать код для нескольких различных архитектур. Каждая коллекция кода для конкретной архитектуры связана с двоичным интерфейсом приложения (ABI). Каждый ABI определяет, как этот машинный код должен взаимодействовать с Android во время выполнения. Дополнительные сведения о том, как это работает, см. в разделе «Устройства с несколькими ядрами» и Xamarin.Android.

Указание поддерживаемых архитектур

  • Visual Studio
  • Visual Studio для Mac

Как правило, вы явно выбираете архитектуру (или архитектуры) при настройке приложения для выпуска. Если приложение настроено для отладки, включены параметры «Использовать общую среду выполнения» и «Использовать быстрое развертывание«, которые отключают явный выбор архитектуры.

В Visual Studio щелкните проект правой кнопкой мыши в Обозреватель решений и выберите «Свойства«. На странице «Параметры Android» проверка разделе «Свойства упаковки» и убедитесь, что использование общей среды выполнения отключено (это позволяет явно выбрать, какие ABis поддерживать). Нажмите кнопку «Дополнительно» и в разделе «Поддерживаемые архитектуры» проверка архитектуры, которые требуется поддерживать:

Selecting armeabi and armeabi-v7a

Как правило, вы явно выбираете архитектуру (или архитектуры) при настройке приложения для выпуска. При настройке приложения для отладки включены параметры среды выполнения Use shared Mono и быстрого развертывания сборки, которые препятствуют явному выбору архитектуры.

В Visual Studio для Mac найдите проект на панели решения, щелкните значок шестеренки рядом с проектом и выберите пункт «Параметры«. В диалоговом окне «Параметры проекта» щелкните «Сборка Android». Перейдите на вкладку «Общие» и убедитесь, что отключена общая среда выполнения Mono (отключение позволяет явно выбрать, какие ABis следует поддерживать). Перейдите на вкладку «Дополнительно» и в разделе «Поддерживаемые API» проверка ABIs для архитектур, которые требуется поддерживать:

Selecting armeabi and armeabi-v7a

Xamarin.Android поддерживает следующие варианты архитектуры:

  • armeabi — процессоры на основе ARM, поддерживающие по крайней мере набор инструкций ARMv5TE. Обратите внимание, что armeabi не является потокобезопасной и не следует использовать на устройствах с несколькими ЦП.

По состоянию на Xamarin.Android 9.2 больше armeabi не поддерживается.

  • armeabi-v7a — процессоры на основе ARM с аппаратными операциями с плавающей запятой и несколькими устройствами ЦП (SMP). Обратите внимание, что armeabi-v7a компьютерный код не будет работать на устройствах ARMv5.
  • arm64-v8a — процессоры на основе 64-разрядной архитектуры ARMv8.
  • x86 — процессоры, поддерживающие набор инструкций x86 (или IA-32). Этот набор инструкций эквивалентен тому, что из Инструкций Изумиры, включая MMX, SSE, SSE2 и SSE3.
  • x86_64 ЦП, поддерживающие 64-разрядный набор инструкций x86 (также называемый набором инструкций x64 и AMD64).

Xamarin.Android по умолчанию используется armeabi-v7a для сборок выпуска . Этот параметр обеспечивает значительно лучшую производительность, чем armeabi . Если вы нацелены на 64-разрядную платформу ARM (например, Nexus 9), выберите arm64-v8a . Если вы развертываете приложение на устройстве x86, выберите x86 . Если целевое устройство x86 использует 64-разрядную архитектуру ЦП, выберите x86_64 .

Назначение нескольких платформ

Чтобы выбрать несколько архитектур ЦП, можно выбрать несколько ABI (за счет большего размера APK-файла). Чтобы создать отдельный пакет для каждой поддерживаемой архитектуры, можно использовать один пакет (.apk) для выбранного параметра ABI (описано в разделе «Задать свойства упаковки»).

Вам не нужно выбирать arm64-v8a или x86_64 для 64-разрядных устройств; 64-разрядная поддержка не требуется для запуска приложения на 64-разрядном оборудовании. Например, 64-разрядные устройства ARM (например , Nexus 9) могут запускать приложения, настроенные для armeabi-v7a . Основное преимущество включения 64-разрядной поддержки заключается в том, чтобы приложение пользовалось большей памятью.

Начиная с августа 2018 г. новые приложения должны будут использовать API уровня 26, а с августа 2019 г. будет необходимо выпускать 64-разрядные версии приложений в дополнение к 32-разрядным.

Дополнительная информация

В некоторых ситуациях может потребоваться создать отдельный APK для каждой архитектуры (чтобы уменьшить размер APK или так как приложение имеет общие библиотеки, относящиеся к определенной архитектуре ЦП). Дополнительные сведения об этом подходе см. в разделе «Сборка API для конкретных ABI».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *