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

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

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

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

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

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

В Visual Studio щелкните проект правой кнопкой мыши в Обозреватель решений и выберите "Свойства". На странице "Параметры Android" проверка разделе "Свойства упаковки" и убедитесь, что использование общей среды выполнения отключено (это позволяет явно выбрать, какие 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".