查看原文
其他

Google 更新 Android 运行时应用提速最高三成

CSDN 2023-09-12

【CSDN 编者按】Android 技术团队正在将操作系统引擎 ART 模块化,以此来提高每次更新后应用程序的性能,通过测试 ART APEX 模块的兼容性,技术团队正在不断运行测试 ART 14 以确保即将推出的优化万无一失。

原文链接:https://android-developers.googleblog.com/2023/08/latest-artwork-on-hundreds-of-millions-of-devices.html

未经允许,禁止转载!


作者 | Serban Constantinescu       译者|Ric Guan
责编 | 屠敏
出品 | CSDN(ID:CSDNnews)

如果每次更新都能改善应用程序的启动时间、执行速度和内存使用情况,岂不美哉?

Android 官方博客发文表示,当前只需要通过 Google Play 系统更新 Android Runtime (ART) 就能做到这一点。这些更新提供了性能改进和最新的安全修复,并在数亿设备上统一了核心 OpenJDK API,包括所有 Android 12+ 设备和即将推出的 Android Go。

ART 是 Android 操作系统(OS)背后的引擎。它提供了所有应用程序和大多数操作系统服务所依赖的运行时和核心 API。Java 和 Kotlin 都被编译为由 ART 执行的字节码。运行时、编译器和核心 API 的改进使所有开发人员受益,应用执行速度更快,字节码编译更高效。

虽然 Android 的部分功能可由设备制造商定制,但 ART 对所有设备都是一样的,而且 Google Play 系统更新提供了模块化更新的途径。

操作系统模块化

以前,当 Android 系统中有一项功能需要更新时,我们需要更新整个系统,这意味着操作系统组件不需要有明确的应用程序接口(API)边界。这是因为所有相关软件都是一起构建的。然而,这使得 ART 难以独立于操作系统的其他部分进行更新。

为了解决这个挑战,Android 技术团队面临的第一个难点是如何理清 ART 的依赖关系,并创建清晰、明确且经过测试的 API 边界。这样,Android 技术团队就可以将 ART 模块化,使其可以独立更新。

作为操作系统的核心部分,ART 必须开辟新的道路,设计新的操作系统边界。这些新的边界非常广泛,手动添加和更新非常耗时。因此,Android 技术团队在操作系统中通过内省自动生成了这些边界。

另一个例子是栈展开(stack unwinding),它可以报告检测到问题时最后执行的函数。在将操作系统模块化之前,所有的栈展开代码都是一起构建的,可能会在不同的 Android 版本中发生变化。这使得转型更具挑战性,因为只有一个版本的 ART 可用于多个版本的 Android 系统,Android 技术团队必须创建一个新的 API 边界,并将其设计为与不再获得完整操作系统更新的设备上较新版本的 ART APEX 模块向前兼容。

最近,针对 Android 14,Android 技术团队重构了软件包管理器(确定如何安装和更新应用程序的服务)与 ART 之间的接口。这将操作系统边界从 ART dex2oat 命令行转移到了一个定义明确的接口,从而实现了未来的优化,例如对编译模式进行更精细的控制。

ART 的可更新性也带来了新的挑战。例如,Java 库集合(称为 Boot Classpath)必须安全地重新编译,以确保良好的性能。这就需要在启动过程中引入新的安全编译状态以及后备 JIT 编译模式。

在旧设备上,安全编译发生在 ART 更新后第一次重启时。在支持 Android 虚拟化框架的较新设备上,编译会在设备空闲时进行,在一个名为 "隔离编译 "的飞地中进行,最多可节省 20 秒的启动时间。

测试 ART APEX 模块

ART APEX(Android Pony Express)模块是一个复杂的软件,其 API 比其他任何 APEX 模块都要多。它还支持 Android SDK 中四分之一的开发人员 API。此外,ART 还有一个编译器,旨在通过生成特定于芯片组的指令(如 Arm SVE)来充分利用底层硬件。这一点,再加上 ART APEX 模块必须在多个操作系统版本上运行,使得测试工作充满挑战。

基于此,Android 技术团队首先将测试框架从按平台发布(如 Android CTS)模块化变为按模块发布。为此,Android 技术团队引入了专门针对 ART 的主线测试套件 (MTS),用于测试编译器和运行时以及核心 OpenJDK API,同时收集代码覆盖率统计数据。

Android 技术团队的目标是 100% 的 API 覆盖率和高线路覆盖率,尤其是对于新的 API。加上 HWASan 和模糊测试,上述所有测试都会产生大量的测试负载,这些负载需要分散到多个设备上,以确保在合理的时间内完成测试。

Android 技术团队每天都会对即将发布的 ART 进行测试,编译超过 1800 万个 APK,并在各种安卓设备上运行应用程序兼容性测试、启动、性能和内存基准测试,尽可能地还原生态系统的多样性。一旦通过所有可能的编译模式、所有垃圾回收器算法和支持的操作系统版本的测试,技术团队就会开始逐步推出下一个 ART 版本。

ART Google Play 系统更新的好处

通过独立于操作系统更新 ART,用户可以尽快获得最新的性能优化和安全修复,而开发人员则可以获得 OpenJDK 的改进和编译器优化,这对 Java 和 Kotlin 都有好处。

如下图所示,ART 13 更新中的运行时和编译器优化在某些设备上实现了高达 30% 的实际应用启动改进。

ART 更新使 Android 技术团队能够频繁部署修复程序,而 Android 的生态系统合作伙伴只需付出很少的额外努力。对于开发人员来说,ART 更新意味着你现在可以使用最新的编程功能。ART 13 提供了 OpenJDK 11 核心语言功能,这是 Android 设备采用 OpenJDK 新版本速度最快的一次。

下一步计划

未来几个月,Android 技术团队将向所有兼容设备发布 ART 14。ART 14 包括 OpenJDK 17 支持以及新的编译器和运行时优化,可在减少代码量的同时提高性能。有关 ART 14 的更多详情,敬请关注!

推荐阅读:

突破极限:入职短短两月,将十个月工程推倒重来,引领项目脱胎换骨!

重磅来袭!2023 长沙·中国1024程序员节全面启动

讯飞星火iFlyCode编程实测,领先主流开发大模型

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存