0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在 I/O 看未来 | Android 性能相关最新动态

谷歌开发者 来源:未知 2023-06-04 23:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者 / Ben Weiss

过去几年来,我们一直致力于让性能提升工作变得更易上手、回报更高。我们将在本文中分享这一领域的最新发展动态。为您介绍基准配置文件Android Studio 中的工具改进,以及我们如何让这项技术更好地在后台为您服务。此外,我们非常高兴地分享在基准配置文件上使用的全新实验性技术,助您大幅提升启动性能。欢迎您继续阅读以全面了解 2023 年 Google I/O 大会期间发布的 Android 性能的最新动态,我们也在本文结尾处与您分享了性能探索之旅中切实可行的举措。

基准配置文件更新

基准配置文件可以通过避免即时 (JIT) 编译,将应用启动和运行时的代码执行速度提升约 30%。为此,我们构建了多款工具来帮助您简化基准配置文件的创建和维护工作,其中包括全新 Android Studio 模板基准配置文件 Gradle 插件。现在,您可以借助 Android Studio Hedgehog 和 Android Gradle 插件 8.0.0 或更新版本,即刻开始使用这两款工具。

借助基准配置文件 Gradle 插件

简化配置文件生成

基准配置文件 Gradle 插件可以在本地开发和 CI 过程中,进一步简化基准配置文件的生成和维护过程。此插件可以执行生成基准配置文件和将其安装到应用模块所需的所有必要步骤。 如要使用此插件,您可以在项目中添加一个插桩测试模块,并设定一组通过在您的应用中导航来模拟关键用户历程的测试。在运行插桩测试时,基准配置文件 Gradle 插件会跟踪在这类用户历程中执行的所有类和方法,并基于这些类和方法生成基准配置文件。然后,此插件会将生成的基准配置文件复制到应用模块的源集中。 应用此插件后,您可以使用构建脚本中的全新 baselineProfile 块对其进行配置。generateBaselineProfile 任务会代您运行所有基准配置文件测试。由此生成的配置文件将存储在生成的文件夹中,供您在此访问。这些功能使得在本地和远程 CI 服务器上自动生成基准配置文件的过程更顺畅。此外,通过指定要在生成配置文件时使用的 Gradle 管理的设备,您甚至不再需要附加实体设备。此插件的 DSL 支持高度可配置的设置,让您可以自动化并重现基准配置文件生成过程。 您可以查看代码示例 (目前位于单独分支) 和指导文档,即刻开始使用。

  • 代码示例

    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/。此插件可将储存在此目录中的基准配置文件源文件提取并合并到您的应用中。帮助您单独存储应用启动和每个不同的用户历程所需的配置文件。

06499b3a-02ed-11ee-90ce-dac502259ad0.png

△ Macrobenchmark 示例中的多个基准配置文件源文件

使用 Android Studio 基准配置文件生成器模板更轻松上手

为了帮助您开始使用基准配置文件,Android Studio Hedgehog (2023.1.1) 添加了基准配置文件生成器模块向导模板。使用此模板,您的应用可以通过视觉辅助方式设置基准配置文件。 首先前往 "文件">"新建">"新模块",然后在模板列表中选择 "基准配置文件生成器"。

066884c8-02ed-11ee-90ce-dac502259ad0.png

基准配置文件生成器向导

操作完成后,此模板将为您进行多项更改。它会创建包含基本生成器和基准测试的全新 :baselineprofile 测试模板。BaselineProfileGenerator 类会为您创建基本基准配置文件,而 StartupBenchmarks 可以验证一切是否合乎预期。此外,系统将在相关模块中应用基准配置文件 Gradle 插件。最后,此生成器将添加有关 androidx.profileinstaller 的依赖项,以协助进行本地验证并确保向后兼容性。

在这里,您只需执行 "生成基准配置文件" 运行配置,此操作会运行所含的基准配置文件生成器,并将生成的配置文件复制到src/release/generated/baselineProfile

06873a08-02ed-11ee-90ce-dac502259ad0.png

△ "生成基准配置文件" 运行配置

运行配置会调用 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,开始体验:

https://developer.android.google.cn/studio/preview

如需了解整个新手入门过程导览,您可以查看已更新的 Codelab: 通过基准配置文件提升应用性能:

https://developer.android.google.cn/codelabs/android-baseline-profiles-improve

引入启动配置文件

和 Dex 布局优化

自版本 8.1 起,Android Gradle 插件 (AGP) 便可将应用启动所需的代码导入应用的主要 Dex 文件。这项优化被称为 Dex 布局优化,有助于减少应用启动期间发生的 Dex 页面错误。由于自应用启动至应用完成启动的整个过程只需加载一个 Dex 文件,这使得应用启动速度大幅提升。

06b4aa1a-02ed-11ee-90ce-dac502259ad0.png

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/FullyDrawnReporter

  • ReportDrawn

    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 供您考虑。

新引入的 collectStableBaselineProfile 会运行并等待,直到系统认为配置文件对于给定迭代数量来说足够稳定。这意味着您应用的基准配置文件将能更好地反映应用在执行代码路径时的具体操作。
@OptIn(ExperimentalStableBaselineProfilesApi::class)
@Test
fun profileGenerator() {
   rule.collectStableBaselineProfile(
       packageName = TARGET_PACKAGE,
       maxIterations = 10
   ) {
       profileBlock()
   }
}

自定义跟踪记录处理让指标更有效

PerfettoTraceRule 可以在测试中启用自定义跟踪记录收集,而不再需要基准测试 (需要 API 级别 23 及以上)。这是一项非常强大的功能,让用户可以收集与测试相关的性能和时间数据。

PerfettoTraceProcessor 支持查询跟踪记录内容,并且是所有现有 Macrobenchmark Metric API 的幕后引擎。现在,您可以将它与 TraceMetric 搭配使用,来制定完全自定义的指标,就像 Macrobenchmark 对 Perfetto 系统跟踪记录的任何信息所执行的操作一样。这是另外一项强大的功能,便于用户进一步自定义基准。

从基准测试中归因功耗

全新 PowerMetric API 可用于衡量耗电量和电源状态。这项非常有用的功能让用户可以跟踪基准测试的耗电量。

问题修复和其他改进

Macrobenchmark 的幕后团队还在人体工程学方面进行了多项改进,修复了错误,并改善了整体行为。如需了解详情,您可以参阅官方文档。若要深入了解,您可以查看所有版本说明,其中包含附加代码和问题跟踪。

  • 官方文档

    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,以优化蜂窝网络电源轨中的功耗。

06cfbc92-02ed-11ee-90ce-dac502259ad0.png

Android Studio Hedgehog 中的全新电源性能分析器 (Power Profiler) 首先,使用 Pixel 6 及以上版本的设备记录系统跟踪记录并将其加载至 Android Studio,或者使用性能分析器直接从附加设备捕获系统跟踪记录。
  • 记录系统跟踪记录https://developer.android.google.cn/topic/performance/tracing

为什么需要重视性能

在处理应用性能时,找到正确的入手点并非易事。通过与 Android 开发者社区合作,我们发现工程师有时缺乏正确的信息来证明致力于提升应用性能的重要性。

提升性能对于用户和企业来说有诸多优势。对于用户而言,能够快速响应的应用可以带来更出色的用户体验。您的用户将能快速且轻松地获得他们需要的信息,并且更有可能继续使用您的应用。

对于企业而言,性能提升可以增加收入并降低成本。若用户满意您的应用,他们更有可能通过购买或其他操作,促进您的业务增长。此外,高性能应用有助于节省开发和维护成本。

后续步骤

  1. 借助全新 Gradle 插件设置您的应用,以开始使用基准配置文件
  2. 升级至 Android Gradle 插件 8 及以上版本
  3. 将现有基准配置文件移入新的默认目录 src/main/baselineProfiles/
  4. 下载 Android Studio Hedgehog Canary,查看基准配置文件模板和电源性能分析器 (Power Profiler)
  5. 查看我们更新的 Codelab 获取导览
  6. 使用 Fully Drawn 和 collectStableBaselineProfile API,获取更完善的基准配置文件
  7. 开始使用 Dex 布局优化,获得更多性能提升
  8. 实施您的专属 Macrobenchmark 测试,以衡量性能随时间的变化情况
  9. 在 Pixel 6 及以上版本设备上记录系统跟踪,查看不同子系统 (相机、GPS、CPU 等) 的功耗
  10. 分享本文,帮助更多开发者提升应用性能

  • Gradle 插件

    https://developer.android.google.cn/topic/performance/baselineprofiles/create-baselineprofile#baseline-profile-gradle-plugin

  • 基准配置文件

    https://developer.android.google.cn/topic/performance/baselineprofiles/overview

  • Android Studio Hedgehog

    https://developer.android.google.cn/studio/preview

  • 查看我们更新的 Codelab

    https://developer.android.google.cn/codelabs/android-baseline-profiles-improve

  • Dex 布局优化

    https://developer.android.google.cn/topic/performance/baselineprofiles/dex-layout-optimizations

073ce5ce-02ed-11ee-90ce-dac502259ad0.gif 点击屏末||即刻使用基准配置文件

075738a2-02ed-11ee-90ce-dac502259ad0.png

0764f35c-02ed-11ee-90ce-dac502259ad0.png

07911216-02ed-11ee-90ce-dac502259ad0.png


原文标题:在 I/O 看未来 | Android 性能相关最新动态

文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    6245

    浏览量

    110272

原文标题:在 I/O 看未来 | Android 性能相关最新动态

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    浅谈光学I/O模块的热挑战

    服务器和机架式网络基础设施系统内的光学 I/O 模块通常接受主动冷却系统的直接冷却,特别是来自机架式设备前面板的强制风冷。机架式设备的散热设计需要平衡 I/O 模块的热管理与处理器或
    的头像 发表于 11-03 09:32 467次阅读
    浅谈光学<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模块的热挑战

    工业人速!什么是耦合器模块?什么是插片式I/O模块?

    什么是耦合器模块? 耦合器模块,模块化I/O系统中,可以理解为 “通信管理中枢” 或 “大脑”。 耦合器模块核心定义: 耦合器模块是一个安装在导轨上的基础模块,它是整个远程I/
    的头像 发表于 11-03 09:31 402次阅读
    工业人速<b class='flag-5'>看</b>!什么是耦合器模块?什么是插片式<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模块?

    如何解决I/O时钟布局器错误

    I/O 时钟布局器阶段可能会发生错误,指出该工具无法对该时钟结构进行布局,直至最后 BUFG 仍然无法完成布局。
    的头像 发表于 09-23 16:05 613次阅读

    TCA9537远程4位I²C/SMBus I/O扩展器技术解析与应用指南

    Texas Instruments TCA9537远程4位I^2^C和SMBus I/O扩展器1.65V至5.5V V~CC~电压下运行,可通过I
    的头像 发表于 09-15 16:00 664次阅读
    TCA9537远程4位<b class='flag-5'>I</b>²C/SMBus <b class='flag-5'>I</b>/<b class='flag-5'>O</b>扩展器技术解析与应用指南

    MR30分布式I/O模块涂装产线中的应用

    某装备制造企业主要从事自动化焊割、涂装生产线的设计与制造,其中涂装生产线涉及喷砂、喷漆、热处理、废气处理等工艺。明达技术的MR30系列分布式I/O性能稳定,易上手,方便接线,助力企业提升产品
    的头像 发表于 08-27 15:38 439次阅读
    MR30分布式<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模块<b class='flag-5'>在</b>涂装产线中的应用

    TCAL9539 I2C总线I/O扩展器技术解析与应用指南

    Texas Instrument TCAL9539/TCAL9539-Q1 I^2^C总线/SMBus I/O扩展器为双线双向I^2^C总线(或SMBus)协议提供通用并行输入/输出
    的头像 发表于 08-08 11:49 948次阅读
    TCAL9539 <b class='flag-5'>I</b>2C总线<b class='flag-5'>I</b>/<b class='flag-5'>O</b>扩展器技术解析与应用指南

    Android 16更新亮点介绍

    应用中的 Android 用户提供更新,以及 6 月份的 Pixel Drop。我们还总结了所有 Google I/O相关更新,帮助 Andr
    的头像 发表于 07-05 11:37 3014次阅读

    ArkUI-XAndroid平台动态化开发指南

    本文介绍如何在Android平台进行ArkUI-X动态化开发,包括动态化目录规则及约束。 适用场景 动态化主要包括两个典型场景: 场景1:框架动态
    发表于 06-15 23:33

    MAX7325 I²C端口扩展器,提供8路推挽式I/O和8个漏极开路I/O技术手册

    MAX7325 2线串行接口外设具有16路I/O端口。其中8路为推挽输出,另外8路为I/O端口,带有可选择的内部上拉和瞬态检测功能。8路I/
    的头像 发表于 05-22 15:27 689次阅读
    MAX7325 <b class='flag-5'>I</b>²C端口扩展器,提供8路推挽式<b class='flag-5'>I</b>/<b class='flag-5'>O</b>和8个漏极开路<b class='flag-5'>I</b>/<b class='flag-5'>O</b>技术手册

    谷歌I/O 2025大会前透露:Android 16接入Gemini,智能手机、XR设备升级

    电子发烧友网报道(文/莫婷婷)2025 Google Android I/O将5 月 20 日至 21 日举行,在这场活动之前,谷歌召开了“The Android Show:
    的头像 发表于 05-18 00:03 7214次阅读
    谷歌<b class='flag-5'>I</b>/<b class='flag-5'>O</b> 2025大会前透露:<b class='flag-5'>Android</b> 16接入Gemini,智能手机、XR设备升级

    简仪科技高性能PXI模拟I/O模块JY-951概述

    JY-9511 是一款专为动态测量环境中精密数据采集与信号生成设计的高性能 PXI 模拟 I/O 模块。
    的头像 发表于 05-09 16:33 747次阅读

    如何基于Android 14i.MX95 EVK上运行Deepseek-R1-1.5B和性能

    本文档总结了如何基于 Android 14 i.MX95 EVK 上运行 Deepseek-R1-1.5B 和性能。 1. Install An
    发表于 04-04 06:59

    LLC动态性能分析

    这里的LLC动态是指LLC电路突加负载时的动态响应。一般用输出电压的下跌和过冲评判LLC动态性能
    的头像 发表于 03-19 09:45 1856次阅读
    LLC<b class='flag-5'>动态</b><b class='flag-5'>性能</b>分析

    I/O接口与I/O端口的区别

    计算机系统中,I/O接口与I/O端口是实现CPU与外部设备数据交换的关键组件,它们功能、结构
    的头像 发表于 02-02 16:00 2854次阅读

    单片机I/O接口的传输方式

    着数据传输的任务,还影响着整个系统的性能和可靠性。本文将深入探讨单片机I/O接口的传输方式,包括无条件传送、查询传送、中断传送和DMA传送等,以期为单片机应用开发者提供有价值的参考。
    的头像 发表于 02-02 15:56 1658次阅读