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

    文章

    5866

    浏览量

    103292

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

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

收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用开发-ArkTS语言基础类库多线程I/O密集型任务开发

    使用异步并发可以解决单次I/O任务阻塞的问题,但是如果遇到I/O密集型任务,同样会阻塞线程中其它任务的执行,这时需要使用多线程并发能力来进行解决。
    发表于 03-21 14:57

    CapSense按钮触发时是否有可能重新配置I/O的操作?

    能否告诉我 CapSense 按钮触发时是否有可能重新配置 I/O 的操作? 我想使用一个 CapSense 按钮并启用/禁用电路上的另一个 IC。 这意味着,如果按下 CapSense 按钮,输出将永久保持高电平,而如果再次
    发表于 02-23 06:20

    应用方案:MCU通用I/O引脚扩展

    MCU通用I/O引脚扩展 低端MCU由于I/O口数量不足导致部分功能无法实现,用户需要使用数字集成芯片进行扩展,如74LS系列移位寄存器,但是这种集成芯片也会由于引脚数量限制而无法确保
    发表于 01-08 09:35

    CH32X035 的可编程协议 I/O 微控制器(PIOC)资料更新了

    是补知道原理,没法上手研究。 这几天准备再研究一下,今天又到沁恒网站看了下,发现文档和例程都跟新了 虽然用户手册可编程协议 I/O 微控制器(PIOC)这章没看到什么变化,但在EVT文件包内增加了
    发表于 12-31 22:53

    扩展模块驱动分布式I/O新能源锂电池自动化生产中的发展

    材料进行切边、折边、点胶等操作,使其对接部分更加严密,不会造成锂电池内部液体的泄露。 分布式I/O模块可以采集磁性开关及光电信号并通过输出模块控制电磁阀从而控制气缸动作,来完成电池的双折边成型工艺
    发表于 12-28 11:20

    Android App环境检测分析

    这个原理就是APP的AndroidManifest.xml文件中application是否配置了android:debuggable="true",设置true支持动态调试
    的头像 发表于 12-01 10:26 456次阅读

    瞬态事件如何影响LDO的动态性能

    瞬态事件如何影响LDO的动态性能
    的头像 发表于 11-28 16:43 335次阅读
    瞬态事件如何影响LDO的<b class='flag-5'>动态</b><b class='flag-5'>性能</b>?

    Linux下动态相关知识

    Linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。
    的头像 发表于 11-07 09:23 306次阅读
    Linux下<b class='flag-5'>动态</b>库<b class='flag-5'>相关</b>知识

    为什么无法改变单片机I/O输出电平?

    请问一下我使用51最小系统板做流水灯的时候通过程序无法改变I/O输出电平是怎么回事,I/O持续输出5V高电平,但是把芯片换到另一个基座就可
    发表于 09-27 07:38

    I/ O检测时如何使用SysTick进行计数

    v3.01.001 硬件: NuTiny-EVB-123-LQFP64_V1.0 正常情况下,当I/O检测到信号时,它可能受到噪音的干扰,而系统反应不正确。此示例使用系统反射器过滤
    发表于 08-30 08:03

    RISC-V 的未来中国吗

    2023 年 RISC-V 中国峰会上,倪光南院士表示,“RISC-V 的未来中国,而中国半导体芯片产业也需要 RISC-V,开源的 RISC-V 已成为中国业界最受欢迎的芯片架构”。大家怎么呢?
    发表于 08-26 14:16

    NUC123 SPI如何使用Dual I/O功能?

    所使用的板子:NuTiny_NUC123 x 2 功能描述: 當我們使用SPI Flash的時候, 為了加快讀/寫速度, 有支援Dual I/O或是Quad I/O功能的型號
    发表于 06-21 07:13

    Android 13.0.0.1.2.0.doc文件上的Android用户指南为i.MX 8 QM mek构建了android图像,没有信号和接口的原因?

    我按照 Android 13.0.0.1.2.0.doc 文件上的 Android 用户指南为 i.MX 8 QM mek 构建了 android 图像。它是成功的。然后我刷新了为
    发表于 06-12 08:49

    如何将memtool集成到i.MX8MM Android 12平台中?

    Memtool 是一个有用的调试工具,可以读/写一些 i.MX 寄存器。Linux 默认支持,Android 不支持。 本文介绍如何将 memtool 集成到 i.MX8MM Android
    发表于 05-16 06:56

    PCA***未使用的I/O端口的原因?

    您好,PCA***上未使用的I/O端口应该如何端接?这些可以悬空/不连接还是应该上拉/下拉?谢谢!
    发表于 05-09 06:07