大多数 Android 手机都有 ARM 芯片组。不过,许多 ChromeOS 设备使用 x86 芯片。对于用 Kotlin 或 Java 编写的应用来说,这种差异并不重要。不过,对于用 Android NDK 编写的应用(包括使用游戏引擎创建的应用)来说,设备中的芯片组可能是一个值得关注的重要问题。
理想情况下,所有包含 Android NDK 代码的应用都应搭载全部四种主要 Android ABI(应用二进制接口):armeabi-v7a (arm32)、arm64-v8a (arm64)、x86 (x86_32) 和 x86_64。
这样可让每台设备实现最高的性能和最低的电池消耗。例如,基于 cmake 的 build.gradle 文件可能包含:
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}APK 大小
单体式 APK 中的每个 ABI 都会使其增大。这会影响用户的磁盘使用量和应用下载大小,并且可能会遭到 Play 商店大小限制。为了避免此问题,最好的方法是使用 Android App Bundle。App Bundle 可让您在 Android Studio 中轻松捆绑全部四种 ABI,但不会使用户的下载内容增大。此外,还能让您轻松利用 Dynamic Delivery,从而允许用户只有在需要时才下载大型游戏内容。如果您无法使用 App Bundle,可以使用原来的多 APK 实现类似的行为。
32 位与 64 位
所有 Android 应用都必须提供 64 位 build 版本。32 位 build 对于 ARM 和 x86 设备都是可选的。如需了解详情,请参阅 Android 64 位文档。
虽然仅提供 64 位 build 可以减少所需的 build 目标数量并减小测试面,但也会限制可以运行游戏的设备类型。例如,尽管有 64 位 CPU,但由于其他硬件限制,许多旧版 Chromebook 只能运行 32 位 Android 应用。为了确保您的应用可以在这些设备上运行,应同时支持 32 位和 64 位。
注意:所有新应用和更新的应用都必须包含 64 位应用版本。Play 商店已停止向能够处理 64 位数据的设备提供 32 位应用。许多 Chromebook 都支持 64 位架构,我们建议您尽快更新应用,使其包含 64 位版本,以确保 ChromeOS 用户能够继续使用您的应用。
ARM 转换
x86 Chromebook 会尽可能尝试转换 ARM 代码。不过,转换操作会降低性能并增加电池用量。即使是简单的游戏,也应考虑提供 x86 build,以获得最佳用户体验。如果您无法提供 x86 build,请注意,某些 x86 Chromebook 无法转换 arm64 代码。在这种情况下,您应在 build 中同时包含 arm32 和 arm64 ABI。
虽然在所有支持 Android 的 Chromebook 上都能进行 arm32 转换,但并非所有 Chromebook 都能转换 arm64 代码。这意味着,如果您的游戏只有 arm64 build 目标,它将无法在许多 ChromeOS 设备上运行。如果您无法提供 x86 二进制文件,则应在 build 中同时包含 arm32 和 arm64 ABI。
| 包含的 ABI | 支持 ChromeOS |
|---|---|
arm64 | 差 |
arm32/arm64 | 好(通过转换) |
arm32/arm64/x86_32/x86_64 | 最佳 |