Arquitecturas de CPU

Xamarin.Android admite varias arquitecturas de CPU, incluidos dispositivos de 32 y 64 bits. En este artículo se explica cómo dirigir una aplicación a una o varias arquitecturas de CPU compatibles con Android.

Introducción a las arquitecturas de CPU

Al preparar la aplicación para su lanzamiento, debe especificar qué arquitecturas de CPU de plataforma admite la aplicación. Un APK único puede contener código máquina para admitir varias arquitecturas diferentes. Cada colección de código específico de la arquitectura está asociada a una interfaz binaria de aplicación (ABI). Cada ABI define cómo se espera que este código de máquina interactúe con Android en tiempo de ejecución. Para obtener más información sobre cómo funciona esto, consulte Multi-Core Devices & Xamarin.Android.

Cómo especificar arquitecturas admitidas

Normalmente, se selecciona explícitamente una arquitectura (o arquitecturas) cuando la aplicación está configurada para Versión. Cuando la aplicación está configurada para Depurar, se habilitan las opciones Usar tiempo de ejecución compartido y Usar implementación rápida, que deshabilitan la selección explícita de la arquitectura.

En Visual Studio, haga clic con el botón derecho en el proyecto en el Explorador de soluciones y seleccione Propiedades. En la página Opciones de Android, compruebe la sección Propiedades de empaquetado y compruebe que El uso del entorno de ejecución compartido está deshabilitado (desactivar esto le permite seleccionar explícitamente qué API admitir). Haga clic en el botón Avanzado y, en Arquitecturas admitidas, compruebe las arquitecturas que desea admitir:

Selecting armeabi and armeabi-v7a

Xamarin.Android admite las siguientes arquitecturas:

  • armeabi : CPU basadas en ARM que admiten al menos el conjunto de instrucciones ARMv5TE. Tenga en cuenta que armeabi no es seguro para subprocesos y no debe usarse en dispositivos con varias CPU.

Nota:

A partir de Xamarin.Android 9.2, armeabi ya no se admite.

  • armeabi-v7a : CPU basadas en ARM con operaciones de punto flotante de hardware y varios dispositivos de CPU (SMP). Tenga en cuenta que armeabi-v7a el código de máquina no se ejecutará en dispositivos ARMv5.

  • arm64-v8a : CPU basadas en la arquitectura ARMv8 de 64 bits.

  • x86 : CPU que admiten el conjunto de instrucciones x86 (o IA-32). Este conjunto de instrucciones es equivalente al de pentium Pro, incluidas las instrucciones MMX, SSE, SSE2 y SSE3.

  • x86_64 CPU que admiten el conjunto de instrucciones x86 de 64 bits (también denominado conjunto de instrucciones x64 y AMD64).

Xamarin.Android tiene armeabi-v7a como valor predeterminado las compilaciones de versión . Esta configuración proporciona un rendimiento significativamente mejor que armeabi. Si tiene como destino una plataforma ARM de 64 bits (como Nexus 9), seleccione arm64-v8a. Si va a implementar la aplicación en un dispositivo x86, seleccione x86. Si el dispositivo x86 de destino usa una arquitectura de CPU de 64 bits, seleccione x86_64.

Destino de varias plataformas

Para tener como destino varias arquitecturas de CPU, puede seleccionar más de una ABI (a costa del tamaño de archivo APK mayor). Puede usar la opción Generar un paquete (.apk) por ABI seleccionado (descrito en Establecer propiedades de empaquetado) para crear un APK independiente para cada arquitectura admitida.

No es necesario seleccionar arm64-v8a ni x86_64 para dispositivos de 64 bits de destino; no es necesario admitir 64 bits para ejecutar la aplicación en hardware de 64 bits. Por ejemplo, los dispositivos ARM de 64 bits (como Nexus 9) pueden ejecutar aplicaciones configuradas para armeabi-v7a. La principal ventaja de habilitar la compatibilidad de 64 bits es hacer posible que la aplicación aborde más memoria.

Nota:

A partir de agosto de 2018 se necesitarán nuevas aplicaciones para alcanzar el nivel 26 de la API, y a partir de agosto de 2019 se requerirá que las aplicaciones proporcionen versiones de 64 bits además de la versión de 32 bits.

Información adicional

En algunas situaciones, es posible que deba crear un APK independiente para cada arquitectura (para reducir el tamaño del APK o porque la aplicación tiene bibliotecas compartidas específicas de una arquitectura de CPU determinada). Para obtener más información sobre este enfoque, consulte Compilación de API específicas de ABI.