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

    文章

    6141

    浏览量

    105077

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

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

收藏 人收藏

    评论

    相关推荐

    直接I/O

    电子发烧友网站提供《直接I/O库.pdf》资料免费下载
    发表于 10-14 10:55 0次下载
    直接<b class='flag-5'>I</b>/<b class='flag-5'>O</b>库

    E系列I/O模块光伏制绒设备的应用

    光伏设备产线较长,各分布点若采用PLC+IO扩展的方式将会大大增加系统成本及开发难度,方案推荐采用E系列远程I/O模块,仅需和远程PLC通过总线/工业以太网连接,就可轻松实现分布式I/O
    的头像 发表于 09-26 08:07 318次阅读
    E系列<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模块<b class='flag-5'>在</b>光伏制绒设备的应用

    物联网中常见的I/O扩展电路设计方案_IIC I/O扩展芯片

    物联网系统中为什么要使用 IIC I/O扩展芯片   物联网系统中使用IIC(也称为I2C)I/O
    的头像 发表于 09-24 11:29 327次阅读
    物联网中常见的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>扩展电路设计方案_IIC <b class='flag-5'>I</b>/<b class='flag-5'>O</b>扩展芯片

    低成本MSP430 MCU中集成I2C I/O扩展器

    电子发烧友网站提供《低成本MSP430 MCU中集成I2C I/O扩展器.pdf》资料免费下载
    发表于 09-24 10:56 0次下载
    <b class='flag-5'>在</b>低成本MSP430 MCU中集成<b class='flag-5'>I</b>2C <b class='flag-5'>I</b>/<b class='flag-5'>O</b>扩展器

    保护I/O模块免受浪涌事件的影响

    电子发烧友网站提供《保护I/O模块免受浪涌事件的影响.pdf》资料免费下载
    发表于 09-21 10:14 0次下载
    保护<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模块免受浪涌事件的影响

    远程I/O模块不同领域的应用

    在当今快速发展的工业自动化领域,远程输入/输出(I/O)模块正逐渐成为不可或缺的核心组件,本文将探讨远程I/O模块不同领域的广泛应用。 工
    的头像 发表于 09-20 16:43 346次阅读

    I/O模块的主要作用有哪些

    远程I/O模块是一种使能远程数据采集和控制的设备。通过使用网络技术,如现场总线、以太网等,远程I/O模块能够将输入和输出信号传递给控制系统。这就像控制系统的延伸手臂,能够触及并集中处理
    的头像 发表于 09-20 16:41 383次阅读

    区域架构和 MCU I/O 扩展

    电子发烧友网站提供《区域架构和 MCU I/O 扩展.pdf》资料免费下载
    发表于 09-09 10:51 0次下载
    区域架构和 MCU <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 扩展

    浅谈如何克服FPGA I/O引脚分配挑战

    所有这些条件将引脚分配给I/O组。 这也是真正开始工作的地方。在当前的设计流程中,引脚分配时一项耗费时间的任务,解决任何性能和信号完整性问题的过程中可能会涉及许多尝试和错误。传统上,
    发表于 07-22 00:40

    PLC的I/O点数是什么意思

    工业自动化领域中,可编程逻辑控制器(PLC)扮演着至关重要的角色。PLC以其高可靠性、易编程性和强大的控制功能,广泛应用于各种自动化系统中。而在PLC的性能参数中,I/O点数是一个不
    的头像 发表于 06-27 11:15 3515次阅读

    三菱plcfx3u系列远程I/o设置

    三菱PLC FX3U系列是一款非常受欢迎的小型PLC,具有高性能、高可靠性、易用性等特点。实际应用中,远程I/O设置是常见的需求之一。 远程I
    的头像 发表于 06-19 18:15 2799次阅读
    三菱plcfx3u系列远程<b class='flag-5'>I</b>/<b class='flag-5'>o</b>设置

    嵌入式32位高性能微处理器MCU双网口I/O

    M120E以太网远程I/O无线数据采集模块是一款工业级、隔离设计、高可靠性、高稳定性和高精度数据采集模块,嵌入式32位高性能微处理器MCU,集成2路工业10/100M自适应以太网模块里面。提供多种
    的头像 发表于 05-08 16:47 625次阅读
    嵌入式32位高<b class='flag-5'>性能</b>微处理器MCU双网口<b class='flag-5'>I</b>/<b class='flag-5'>O</b>

    软件可配置模拟 I/O 的设计理念

    作者: Kenton Williston 曾几何时,模拟 I/O 就是最专业、功能最固定的硬件。例如,电流驱动器和电压传感器是完全不同的零件,试图颠倒其角色可谓是荒谬至极。 软件可配置模拟 I/
    的头像 发表于 05-05 11:10 779次阅读
    软件可配置模拟 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的设计理念

    鸿蒙OS开发实例:【ArkTS类库多线程I/O密集型任务开发】

    使用异步并发可以解决单次I/O任务阻塞的问题,但是如果遇到I/O密集型任务,同样会阻塞线程中其它任务的执行,这时需要使用多线程并发能力来进行解决。
    的头像 发表于 04-01 16:32 455次阅读
    鸿蒙OS开发实例:【ArkTS类库多线程<b class='flag-5'>I</b>/<b class='flag-5'>O</b>密集型任务开发】

    FANUC外部I/O点数不够用了怎么办?可以扩展I/O点数吗?

    FANUC外部I/O点数不够用了怎么办?可以扩展I/O点数吗? 扩展FANUC的外部I/O点数是
    的头像 发表于 02-18 15:21 1690次阅读