CPU 体系结构
Xamarin.Android 支持多种 CPU 体系结构,包括 32 位和 64 位设备。 本文介绍如何使应用面向 Android 支持的一种或多种 CPU 体系结构。
CPU 体系结构概述
准备应用进行发布时,必须指定应用支持的平台 CPU 体系结构。 单个 APK 可包含计算机代码,以支持多个不同的体系结构。 特定于体系结构的代码的每个集合都与应用程序二进制接口 (ABI) 相关联。 每个 ABI 定义此计算机代码在运行时应如何与 Android 交互。 有关其工作原理的详细信息,请参阅多核设备与 Xamarin.Android。
如何指定支持的体系结构
通常,在针对“发布”配置应用时,显式选择一个体系结构(或多个体系结构)。 在针对“调试”配置应用时,将启用“使用共享运行时”和“使用快速部署”选项,这会禁用显式体系结构选择。
在 Visual Studio 中,右键单击“解决方案资源管理器”下的项目,然后选择“属性”。 在“Android 选项”页下,检查“打包属性”部分,并验证禁用了“使用共享运行时”(禁用此项可让你显式选择支持哪些 ABI)。 单击“高级”按钮,在“支持的体系结构”下,检查要支持的体系结构:
Xamarin.Android 支持以下体系结构:
- armeabi - 至少支持 ARMv5TE 指令集的基于 ARM 的 CPU。 请注意,
armeabi
并非线程安全,不应在多 CPU 设备上使用。
注意
自 Xamarin.Android 9.2 起,不再支持 armeabi
。
armeabi-v7a - 使用硬件浮点运算和多个 CPU (SMP) 设备的基于 ARM 的 CPU。 请注意,
armeabi-v7a
计算机代码将不会在 ARMv5 设备上运行。arm64-v8a - 基于 64 位 ARMv8 体系结构的 CPU。
x86 - 支持 x86(或 IA-32)指令集的 CPU。 此指令集相当于 Pentium Pro 的指令集,包括 MMX、SSE、SSE2 和 SSE3 指令。
x86_64 - 支持 64 位 x86(也称为 x64 和 AMD64)指令集的 CPU。
对于“发布”生成,Xamarin.Android 默认为 armeabi-v7a
。 此设置提供的性能明显优于 armeabi
。 如果要面向 64 位 ARM 平台(如 Nexus 9),请选择 arm64-v8a
。 如果要将应用部署到 x86 设备,请选择 x86
。 如果目标 x86 设备使用 64 位 CPU 体系结构,请选择 x86_64
。
面向多个平台
若要面向多个 CPU 体系结构,可选择多个 ABI(代价是 APK 文件大小更大)。 可使用“为每个选定的 ABI 生成一个包(.apk)”选项(在”设置打包属性“中介绍)为每个受支持的体系结构创建一个单独的 APK。
无需选择 arm64-v8a 或 x86_64 以面向 64 位设备;在 64 位硬件上运行应用不需要 64 位支持。 例如,64 位 ARM 设备(如 Nexus 9)可运行为 armeabi-v7a
配置的应用。 启用 64 位支持的主要优点是使应用能够对更多内存进行寻址。
注意
自 2018 年 8 月起新应用需要面向 API 级别 26,自 2019 年 8 月起,除 32 位版本之外,应用还需要提供 64 位版本。
其他信息
在某些情况下,可能需要为每个体系结构创建单独的 APK(用于减小 APK 的大小,或者由于应用具有特定于特定 CPU 体系结构的共享库)。 有关此方法的详细信息,请参阅生成特定于 ABI 的 APK。