一起看 I/O | Android 性能相关最新动态
过去几年来,我们一直致力于让性能提升工作变得更易上手、回报更高。我们将在本文中分享这一领域的最新发展动态。为您介绍基准配置文件、Android Studio 中的工具改进、库,以及我们如何让这项技术更好地在后台为您服务。此外,我们非常高兴地分享在基准配置文件上使用的全新实验性技术,助您大幅提升启动性能。欢迎您继续阅读以全面了解 2023 年 Google I/O 大会期间发布的 Android 性能的最新动态,我们也在本文结尾处与您分享了性能探索之旅中切实可行的举措。
基准配置文件更新
借助基准配置文件 Gradle 插件
简化配置文件生成
代码示例
https://github.com/android/performance-samples/tree/bpgp/MacrobenchmarkSample指导文档
https://developer.android.google.cn/topic/performance/baselineprofiles/create-baselineprofile
使用 AGP 8 及以上版本创建和管理多个基准配置文件源文件
AGP 8 及以上版本支持多源文件、多种特定配置文件和上方提及的新版 Gradle 插件,且支持更轻松地生成基准配置文件。现在,基准配置文件的默认位置是 src/main/baselineProfiles/。此插件可将储存在此目录中的基准配置文件源文件提取并合并到您的应用中。帮助您单独存储应用启动和每个不同的用户历程所需的配置文件。
使用 Android Studio 基准配置文件生成器模板更轻松上手
操作完成后,此模板将为您进行多项更改。它会创建包含基本生成器和基准测试的全新 :baselineprofile 测试模板。BaselineProfileGenerator 类会为您创建基本基准配置文件,而 StartupBenchmarks 可以验证一切是否合乎预期。此外,系统将在相关模块中应用基准配置文件 Gradle 插件。最后,此生成器将添加有关 androidx.profileinstaller 的依赖项,以协助进行本地验证并确保向后兼容性。
在这里,您只需执行 "生成基准配置文件" 运行配置,此操作会运行所含的基准配置文件生成器,并将生成的配置文件复制到 src/release/generated/baselineProfile。
运行配置会调用 :app:generateBaselineProfile 任务,查找所有基准配置文件生成器并只运行这些生成器。
BaselineProfileGenerator 是一个非常基础的生成器,它只会启动您的应用并等待应用启动完成。我们建议为您应用的每个关键用户历程创建一个基准配置文件。由于不同应用的用户历程各不相同,您需要自行决定优化哪些内容。可以先从与业务成果直接相关的任何内容开始,如注册、登录、结帐或您应用提供的其他主要操作。您可以从我们的代码示例中寻找灵感。
应用启动
https://developer.android.google.cn/topic/performance/vitals/launch-time代码示例
http://github.com/android/performance-samples/tree/main/MacrobenchmarkSample
欢迎您立即下载 Android Studio Hedgehog Canary,开始体验:
如需了解整个新手入门过程导览,您可以查看已更新的 Codelab: 通过基准配置文件提升应用性能:
https://developer.android.google.cn/codelabs/android-baseline-profiles-improve
引入启动配置文件
和 Dex 布局优化
自版本 8.1 起,Android Gradle 插件 (AGP) 便可将应用启动所需的代码导入应用的主要 Dex 文件。这项优化被称为 Dex 布局优化,有助于减少应用启动期间发生的 Dex 页面错误。由于自应用启动至应用完成启动的整个过程只需加载一个 Dex 文件,这使得应用启动速度大幅提升。
△ Dex 布局优化前后
虽然 AGP 可以为您的应用创建单独的 Dex 文件,但若没有您的帮助,它无法知道是什么完全定义应用启动。这时,启动配置文件就可以派上用场了。您可以将启动配置文件视作专为应用启动定制的基准配置文件的一个子集。两者拥有相同的格式,并且使用相同的底层技术。由于每个应用的启动过程并不相同,库对启动配置文件毫无助益。
与需要解释和 JIT 编译的应用相比,基准配置文件使得性能提升了约 30 %,例如在推送更新后。我们对 Dex 布局优化进行的早期测试显示,除了基准配置文件带来的提升之外,这项优化使得应用启动的性能额外提升了 30%。这些性能提升已经在冷启动中十分常见,即使您的生产应用已经拥有运行良好的云配置文件,这项优化也会大有裨益。
如要充分利用 Dex 布局优化和启动配置文件,您需要让 Android 框架知道您的应用何时完成启动。如果您什么都不做,此框架将在绘制第一帧时便认为应用已经完成启动。为了确保启动配置文件包含用户接管之前的所有信息,请使用 reportFullyDrawn API。您可以通过 FullyDrawnReporter 或 Compose ReportDrawn API 实现这一点。此外,您需要定义启动基准测试的终点,即您认为启动完成的时间点。将 reportFullyDrawn 调用与您期望在应用可供使用时屏幕上显示的内容相匹配。
FullyDrawnReporter
https://developer.android.google.cn/reference/kotlin/androidx/activity/FullyDrawnReporterReportDrawn
https://developer.android.google.cn/reference/kotlin/androidx/activity/compose/package-summary#ReportDrawn()
您可以在指导文档中详细了解 Dex 布局优化和启动配置文件:
https://developer.android.google.cn/topic/performance/baselineprofiles/dex-layout-optimizations
Macrobenchmark 库的
最新进展
Macrobenchmark 库让您可以衡量应用性能,创建基准配置文件并监控应用更改对应用性能有无影响。1.2.0 版将很快升级到 Beta 版。以下是一些功能亮点。
在基准测试中使用
全新 Android 平台功能
在 Android 13 及更高版本中,您可以使用 BaselineProfileRule 在未取得 Root 权限的设备或模拟器上生成基准配置文件。
在 Android 14 及更高版本中,您不再需要每次运行基准测试时都重新安装目标应用。这让应用可以在运行之间保存状态,如缓存、会话状态或登录令牌。此项更改让您在检测之前无需手动注入 (需要已取得 Root 权限的设备) 这些状态。
新 API
在使用 collectBaselineProfile 方法创建基准配置文件时,您可以选择从代码中删除实验性 API 注解。但如果您仍然使用实验性 API,我们会提供一款新的 API 供您考虑。
@OptIn(ExperimentalStableBaselineProfilesApi::class)
@Test
fun profileGenerator() {
rule.collectStableBaselineProfile(
packageName = TARGET_PACKAGE,
maxIterations = 10
) {
profileBlock()
}
}
自定义跟踪记录处理让指标更有效
PerfettoTraceRule 可以在测试中启用自定义跟踪记录收集,而不再需要基准测试 (需要 API 级别 23 及以上)。这是一项非常强大的功能,让用户可以收集与测试相关的性能和时间数据。
PerfettoTraceProcessor 支持查询跟踪记录内容,并且是所有现有 Macrobenchmark Metric API 的幕后引擎。现在,您可以将它与 TraceMetric 搭配使用,来制定完全自定义的指标,就像 Macrobenchmark 对 Perfetto 系统跟踪记录的任何信息所执行的操作一样。这是另外一项强大的功能,便于用户进一步自定义基准。
从基准测试中归因功耗
问题修复和其他改进
官方文档
https://developer.android.google.cn/topic/performance/benchmarking/macrobenchmark-overview版本说明
https://developer.android.google.cn/jetpack/androidx/releases/benchmark
Android Studio 电源性能分析器
Android Studio Hedgehog 采用全新性能分析器,可以展示按照子系统 (如相机、GPS 等) 细分的实体设备的功耗情况。这些数据会在记录系统跟踪记录时提供,并且有助于直观地将设备功耗与应用中正在发生的操作关联起来。例如,您可以执行 A/B 测试,批处理 API 和单独调用 API,以优化蜂窝网络电源轨中的功耗。
记录系统跟踪记录
https://developer.android.google.cn/topic/performance/tracing
为什么需要重视性能
在处理应用性能时,找到正确的入手点并非易事。通过与 Android 开发者社区合作,我们发现工程师有时缺乏正确的信息来证明致力于提升应用性能的重要性。
提升性能对于用户和企业来说有诸多优势。对于用户而言,能够快速响应的应用可以带来更出色的用户体验。您的用户将能快速且轻松地获得他们需要的信息,并且更有可能继续使用您的应用。
对于企业而言,性能提升可以增加收入并降低成本。若用户满意您的应用,他们更有可能通过购买或其他操作,促进您的业务增长。此外,高性能应用有助于节省开发和维护成本。
后续步骤
借助全新 Gradle 插件设置您的应用,以开始使用基准配置文件 升级至 Android Gradle 插件 8 及以上版本 将现有基准配置文件移入新的默认目录 src/main/baselineProfiles/ 下载 Android Studio Hedgehog Canary,查看基准配置文件模板和电源性能分析器 (Power Profiler) 查看我们更新的 Codelab 获取导览 使用 Fully Drawn 和 collectStableBaselineProfile API,获取更完善的基准配置文件 开始使用 Dex 布局优化,获得更多性能提升 实施您的专属 Macrobenchmark 测试,以衡量性能随时间的变化情况 在 Pixel 6 及以上版本设备上记录系统跟踪,查看不同子系统 (相机、GPS、CPU 等) 的功耗 👏 分享本文,帮助更多开发者提升应用性能
Gradle 插件
https://developer.android.google.cn/topic/performance/baselineprofiles/create-baselineprofile#baseline-profile-gradle-plugin基准配置文件
https://developer.android.google.cn/topic/performance/baselineprofiles/overviewAndroid Studio Hedgehog
https://developer.android.google.cn/studio/preview查看我们更新的 Codelab
https://developer.android.google.cn/codelabs/android-baseline-profiles-improveDex 布局优化
https://developer.android.google.cn/topic/performance/baselineprofiles/dex-layout-optimizations
欢迎您持续关注 "Android 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态。
推荐阅读