面向 Flutter 開(kāi)發(fā)者的實(shí)用 CPU 架構(gòu)指南
在本指南中,我们不会深入硬件层面,只会提供每个移动开发者都应该了解的实际信息。
1. Android ABI不同的Android设备具有不同的CPU,这些CPU支持不同的指令集。每个CPU及其指令集的组合都有自己的应用二进制接口(ABI)。NDK支持的ABI如下所示。
arm64-v8a:arm64-v8a
架构常用于现代 Android 设备,因为它支持 64 位处理,这可以提升性能并允许更大的内存寻址。
大多数现代的Android智能手机都运行在arm64-v8a上。
armeabi-v7aarmeabi-v7a
架构指的是在许多 Android 设备中常用的一种 32 位 ARM 架构,尤其是中端、预算有限或较旧的旗舰机型。- 使用
armeabi-v7a
架构的设备通常配备有 Qualcomm 骁龙 400 系列、MediaTek MT65xx 系列和 Exynos 3 和 4 系列等处理器。
一些示例:
- 三星 Galaxy A01, A02, A10, J7
- 小米 Redmi 9A, 9C
- LG G2, G3
在Android中,x86_64 ABI指的是x86架构的64位版本,主要应用于Intel和AMD处理器。x86_64在桌面环境中用于Android模拟器时仍然相关,因为它与许多开发机器上的Intel和AMD处理器架构相匹配,从而加快了模拟速度。然而,如果你是在Apple Silicon机器上进行开发,使用arm64模拟器会更好。此外,基于Intel的Chromebook可以安装并运行编译为x86_64目标的Android应用。
x86设备示例:
- 联想 K900
- 华硕 ZenFone 5 A500CG
- 宏碁 Liquid C1
不被 Flutter 支持,也没有计划支持。强烈建议你在 Gradle 文件中排除这个 ABI,这样 Google Play 商店就不会允许运行在 32 位 x86 设备上的设备安装该应用。在你的 android/app/build.gradle
文件中添加以下内容:
android {
...
defaultConfig {
...
ndk.abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
}
这样你也可以减小APK文件的大小,因为不必要的二进制文件不会被包含。然而,如果你已经上传了app bundle,那么这将不会对从Google Play商店安装应用的用户产生任何影响。他们安装的已经是针对其设备和设置进行了优化的版本。
此外,你还可以为每个ABI构建单独的APK。为此,运行 flutter build apk --split-per-abi
命令。这在某些测试场景中可能很有用,或者如果你在不支持应用包的商店发布应用(如F-Droid、Aptoide)。否则,通常使用应用包是更好的解决方案。
此外,Android NDK 过去支持诸如 ARMv5(armeabi)、32 位和 64 位 MIPS 等 ABI,但现在这些都已经废弃了。运行这些设备的系统现在大多只能在博物馆中找到(如 HTC Dream、LG Optimus GT540)。
2. iOS CPU 架构arm64
是当前的 64 位 ARM CPU 架构,自 iPhone 5S 及以后的型号(如 6、6S、SE 和 7)以及 iPad Air、Air 2 和 Pro 等设备开始使用,这些设备使用 A7 及更新的芯片。也用于 Apple Silicon Mac 电脑和在这些电脑上运行的 iOS 模拟器。x86_64
(即 64 位 Intel)从 iOS 7.0 开始可选使用。当你在 Intel Mac 上运行 iOS 模拟器时,可能会遇到它。
Flutter 当前在 iOS 上仅编译为 arm64 或 x86_64,因为 Apple 要求所有应用必须是 64 位的。您无需担心 32 位的支持。历史上曾存在一些其他架构:
armv7s
用于苹果的 A6 和 A6X 芯片,在 iPhone 5、iPhone 5C 和 iPad 4 上。armv7
是一种较旧的 32 位 ARM CPU 变体,用于 A5 及更早版本。从 Flutter 2.10 版本 开始不再支持。i386
是 iOS 6.1 及更低版本上的唯一选项。
你可以在XCode中配置目标架构。如果你使用的是Apple Silicon计算机,那么你只需要配置arm64架构。
你可以在构建设置 / 架构中找到这个选项
然而,如果你或你团队中的某人使用的是 Intel 机器,你可以添加 x86_64 架构。
确保在不需要某些架构的情况下将其排除,以确保构建时间和归档大小足够。例如,当使用Intel机器时,您可以排除iOS模拟器中的arm64架构。或者在Apple Silicon机器上,当某些插件不支持arm64时,也可以排除arm64架构。然后,应用程序将通过Rosetta运行。
希望这篇文章对你有所帮助。我会在找到更多有用信息时更新它。你可以关注我的Twitter以获取最新更新。
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章