2020 年 10 月,Arm 宣布,从 2022 IP 开始,未来的所有 Cortex-A”大核”都将仅支持 64 位代码。Oppo 和小米这两家中国领先的移动终端制造商以及领先的游戏引擎 Unity(中国)纷纷对 Arm 宣布向 64 位迁移和为之付出的努力表示支持。
Arm 认为,迁移到 64 位是中国的开发人员都应迈出的积极一步。如果想要打造能满足消费者需求的全新、更复杂、安全可靠、身临其境的体验,他们的app必然需要迁移到 64 位。另外,预计到 2023 年将出现仅支持 64 位的移动设备,届时他们的app还需要与这些设备相兼容。
64 位不仅能带来许多好处(如上一篇极术社区的博客中所述),例如优化性能、提高安全性、改善功效和降低成本,而且将app迁移到 64 位的过程十分简单,并不具备太多挑战。当然,下文也列出了在迁移到 64 位的过程中,中国开发人员需要考虑的一些方面以及对应采取的措施。请注意,下列步骤都是建立在开发人员使用 Google Android Studio 进行app开发的假设基础上。
查看app代码
全部由 Java 编程语言或 Kotlin 编写而成的Android 应用程序(包括所有库或 SDK)都将自动能在 64 位移动设备上运行。对于那些向专属/第三方本地库发出 Java 本地接口 (JNI) 调用(以进行用户行为分析、加密、云服务等)的 Java 应用程序,这些库也需要迁移到 64 位,才能消除所有 32 位依赖项。而且,使用 Arm NEON 指令编写的大多数代码无需更改即可编译成 64 位。但是,如果app使用的是本地库,则其必须是 64 位版本,这可能需要额外的开发工作。
查验本机代码
如果开发人员不确定他们的app是否使用本机代码,可以检查以下三项:
• app是否使用了任何 C/C++(本机)代码
• app是否与任何第三方本地库相关联
• app是否由某个使用本地库的第三方app生成器构建而成。
使用 APK 查验本地库
根据应用二进制接口 (ABI),本地库存储在不同文件夹内。通常情况下,为 32 位和 64 位架构构建的 APK 或数据包将拥有分别针对两种 ABI 的文件夹,每个文件夹内包含一组对应的本地库。如果不支持 64 位,开发人员可能只会看到 32 位 ABI 文件夹,却没有 64 位文件夹。
使用工具查验本地库
开发人员还可以使用不同的工具来查验app中的本地库。APK Analyzer 是 Android Studio 中一款可用的 Android 工具,可帮助开发人员评估某个已构建的 APK 的不同方面。开发人员还可以通过解压缩 APK 来查验本地库,因为这些文件的结构都类似于压缩文件,所以也可以采取类似的提取方式。
从 32 位移植到 64 位
如果应用代码已经在 iOS 上顺利运行,则无需再做任何额外工作。但是,如果这是应用代码初次构建用于 64 位系统,则需要解决的主要问题是指针不再适合于 int 之类的 32 位整型。因此,开发人员需要对以 int、unsigned 或 uint32_t 类型存储指针的代码进行更新。
减轻 64 位带来的规模增加
为应用程式添加 64 位架构的支持可能导致 APK 大小随之增加。Android App Bundle 功能可以最大限度地降低同一 APK 中同时包含 32 位和 64 位代码所带来的规模影响。在大多数情况下,将应用切换为使用 Android App Bundles 实际上有助于改善 APK 的大小,甚至小于 32 位时的应用大小。
游戏开发人员
正如我们在上一篇极术社区的博客中提到的,三个最常用的游戏引擎 Unreal、Cocos2d-x 和 Unity 目前都支持 64 位。事实上,这些领先的游戏引擎都支持 64 位对于游戏开发人员而言是一大利好消息,因为要为第三方游戏引擎迁移应用是一个前置时间非常长的繁杂过程。
测试应用
64 位版本的应用准备就绪后,应能提供与 32 位版本相同的质量和功能集。但是,这只有通过app测试才能保证。测试需要在支持 64 位的设备上完成。幸运的是,如今中国国内市场上的绝大多数智能手机都已兼容 64 位。
发布app
app准备就绪后,开发人员就可以照常发布。与现有的流程一样,我们建议还是继续遵循app部署的最佳实践。Android 建议利用闭环测试轨道,先向有限数量的用户推行,以确保app质量一致。
提供更多信息和支持
根据上述信息,中国开发人员向 64 位迁移的过程应该相对较轻松,干扰因素也最少。只需花费少量成本或时间完成迁移后,中国开发人员将能享受到多种多样的巨大好处。有关更多详细信息,我们建议遵循 Android 开发最佳实践或阅读 Arm 64 位白皮书。
Arm 正在与合作伙伴展开密切合作,了解哪些生态系统、技术或商业方面的问题会妨碍app向 64 位迁移。我们向中国开发人员提出的建议非常简单——立即着手,开始迁移到 64 位。现在就开始构建 64 位版本的应用,在主要开发、优化和测试平台中改用 64 位,对本机和 Java 应用程序进行仔细检查,尽快升级所有 32 位库或引擎。
开发人员通过参加或是观看 Arm DevSummit年度开发者大会(中国)视频回放,了解有关 Arm 致力于在中国市场的移动设备上推行 64 位以及如何迁移到 64 位app的更多信息。