一起看 I/O | Android 性能相关最新动态

news2024/11/18 7:52:20

2273377309f6ebb256c9075a42a25fd3.jpeg

作者 / Ben Weiss

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

b286ce7e937850a212dc6fd48a55cb1d.png

基准配置文件更新

基准配置文件可以通过避免即时 (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

cf6f1f1d15ddd40efc739d597b24e9b0.png

使用 AGP 8 及以上版本创建和管理多个基准配置文件源文件

AGP 8 及以上版本支持多源文件、多种特定配置文件和上方提及的新版 Gradle 插件,且支持更轻松地生成基准配置文件。现在,基准配置文件的默认位置是 src/main/baselineProfiles/。此插件可将储存在此目录中的基准配置文件源文件提取并合并到您的应用中。帮助您单独存储应用启动和每个不同的用户历程所需的配置文件。

8c9e23daba074e2dafad0ccf647be42c.png

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

a016097c742cb9eed4a2ebae5466c851.png

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

为了帮助您开始使用基准配置文件,Android Studio Hedgehog (2023.1.1) 添加了基准配置文件生成器模块向导模板。使用此模板,您的应用可以通过视觉辅助方式设置基准配置文件。

首先前往 "文件">"新建">"新模块",然后在模板列表中选择 "基准配置文件生成器"。

d3668865a8b833fbfb021bcaa52dabdf.png

△ 基准配置文件生成器向导

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

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

f81063cf784325fdf75eeb70e43ed9c2.png

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

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

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

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

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

f3b67b6fe4b7473b0e14c5062b122f17.png

引入启动配置文件

和 Dex 布局优化

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

a7dd5d076bd618ee79c2f6dc5ee797ca.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

d6be755ce14ac83af287e8f1f1713aef.png

Macrobenchmark 库的

最新进展

Macrobenchmark 库让您可以衡量应用性能,创建基准配置文件并监控应用更改对应用性能有无影响。1.2.0 版将很快升级到 Beta 版。以下是一些功能亮点。

abc6b566bcade744303489aecd84abdc.png

在基准测试中使用

全新 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 系统跟踪记录的任何信息所执行的操作一样。这是另外一项强大的功能,便于用户进一步自定义基准。

55c27d8feaa0ced051859d5801f7a481.png

从基准测试中归因功耗

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

949c21b52a454c2891fc979ba70e9cda.png

问题修复和其他改进

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

3d7f790ea7e3c9e64ca4f0e0e6643de2.png

△ Android Studio Hedgehog 中的全新电源性能分析器 (Power Profiler)

首先,使用 Pixel 6 及以上版本的设备记录系统跟踪记录并将其加载至 Android Studio,或者使用性能分析器直接从附加设备捕获系统跟踪记录。

  • 记录系统跟踪记录
    https://developer.android.google.cn/topic/performance/tracing

8f5b255f67c4e4887c57ed5c6bb7d188.png

为什么需要重视性能

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

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

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

578060dc403fa9c3b309023dfe226738.png

后续步骤

  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

欢迎您持续关注 "Android 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态。

d3ba61a5f148aaf9f545ca42cec5ec80.gif

推荐阅读

如页面未加载,请刷新重试

7b3d0c15cc603d48bfd35d64a9405af1.gif 点击屏末 阅读原文 | 即刻使用基准配置文件


2e494f05973b5a754c437aa7be81a381.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IPA50R190CE-ASEMI代理英飞凌MOS管IPA50R190CE

编辑:ll IPA50R190CE-ASEMI代理英飞凌MOS管IPA50R190CE 型号:IPA50R190CE 品牌:Infineon(英飞凌) 封装:TO-220F 最大漏源电流:24.8A 漏源击穿电压:500V RDS(ON)Max&#xff1…

某oa 11.10 未授权任意文件上传

漏洞简介 之前也对通达 oa 做过比较具体的分析和漏洞挖掘,前几天看到通达 oa 11.10 存在未授权任意文件上传漏洞,于是也打算对此进行复现和分析。 环境搭建 https://www.tongda2000.com/download/p2019.php 下载地址 :https://cdndown.tongda…

java-Lambde和方法引用

java-Lambde和方法引用 一、Lambda表达式 1.1 Lambda标准格式 格式: ​ (形参) -> {代码块} 形参:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可 ->:由英文中画线和大于符号组成&#…

企业虚拟机服务器中了lockbit3.0勒索病毒怎么办,lockbit勒索病毒解密

虚拟机服务器在现代企业中扮演着至关重要的角色,它是一个重要的基础设施,用于支持大量的业务应用和数据存储。然而,随着网络攻击技术的不断发展,企业虚拟机服务器也面临着来自黑客的威胁。其中一种最具破坏性的攻击是勒索病毒&…

单例模式8种写法

0. 为什么需要单例模式? 节省内存和计算保证结果正确方便管理 使用场景: 1. 饿汉式(静态常量)—推荐指数:★★☆☆☆ 优点:不会有线程安全问题。 缺点:在类加载的时候就创建对象,…

VMware SD-WAN 5.2 发布 - 软件定义的 WAN

VMware SD-WAN 5.2 发布 - 软件定义的 WAN SD-WAN 解决方案的领导者 请访问原文链接:https://sysin.org/blog/vmware-sd-wan-5/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 产品概述 软件定义的 WAN (SD-WAN)…

chatgpt赋能python:Python列表横向合并

Python列表横向合并 Python是一种功能强大的编程语言,被越来越多的开发者所青睐。列表是Python中最常用的数据结构之一,它是一种有序的集合,可以存储任意类型的数据。在编写Python程序时,很常见的需求是将两个或多个列表横向合并…

(超详细)关于Nacos的共享配置( shared-configs)和拓展配置(extension-config)

前言 用SpringBoot的铁子们,相信大多数人都使用过Nacos作为注册中心和配置文件管理中心,确实很方便。但是很多铁子们依葫芦画瓢,都知道怎么用,但是对于其中的细节可能没有系统地整理过。今天就讲讲关于Nacos的共享配置和扩展配置…

【C++11】C++11新增语法 Lambda表达式/Lambda的底层原理

Lambda表达式 1 Lambda使用的一个例子2 Lambda 表达式的语法3 初次体验Lambda表达式4 Lambda函数底层实现原理 1 Lambda使用的一个例子 在C98中&#xff0c;如果我们想要对一个自定义类型进行排序&#xff0c;就需要用户自定义去书写比较的规则。 #include <iostream> …

排序算法——直接插入排序

直接插入排序 基本思想 直接插入排序是一种简单明了的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的数据按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有数据插入完为止。 在现实生活中&#xff0c;我们玩扑克对牌进行排序就运用了…

开源、易扩展、方便集成的Web绘图工具(流程图、架构图、组态、SCADA、大屏)

乐吾乐2D可视化Meta2d.js是一个基于typescript canvas 实现的开源在线绘图软件。采用引擎 图形库中间件的思路能够方便、快速的扩展、集成到前端项目。 集实时数据展示、动态交互、数据管理等一体的全功能可视化平台。帮助物联网、工业互联网、电力能源、水利工程、智慧农业…

【unity之c#】所以迭代器的原理知识你还清楚吗?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

day46-动态规划8-单词拆分问题

139.单词拆分-完全背包问题区分求组合数和排列数 本题可以使用回溯算法进行暴力搜索&#xff0c;但是如何使用动态规划的思路进行求解呢。将字符串可以理解成一个容器&#xff0c;将单词可以当成物品&#xff0c;那么此时问题转化成利用物品能否装满容器的问题。这个时候由于返…

chatgpt赋能python:Python列表框-理解列表框的功能和用途

Python列表框 -理解列表框的功能和用途 列表框可以说是Python编程中最常用的控件之一。列表框用于在桌面应用程序中显示和管理数据。与其他编程语言一样&#xff0c;Python编程语言提供了许多列表框控件&#xff0c;可以使用它们来管理和显示各种数据。 列表框是一种视觉化的…

软件工程导论(5)软件编码测试与维护

一、软件编程 2.1良好的编程习惯 变量命名有意义并且使用统一的命名规则 编写自文档代码&#xff08;序言性注释 or 行内注释&#xff09; 提前进行可维护性考量&#xff08;可以用常量的方式存在的数值最好以变量的方式存在&#xff09; 良好的视觉安排可以提高代码的可读性(…

【服务器】零基础搭建私有云盘并内网穿透远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章&#xff1a;使用Nextcl…

Hx711称重模块+STM32+CubeMX

文章目录 一、模块和接线二、CubeMX配置1.时钟及sys2.IO口1&#xff09;数据线DT设置为Input2&#xff09;时钟线SCK设置为Output 3.串口4.后续配置 三、程序1.main.c2.hx711.c3.hx711.h4.串口重定向 总结参考文章 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例…

【消息中间件】比较Redis,Kafka和RabbitMQ

对微服务使用异步通信时&#xff0c;通常使用消息代理。代理确保不同微服务之间的通信可靠且稳定&#xff0c;消息在系统内得到管理和监控&#xff0c;并且消息不会丢失。您可以从几个消息代理中进行选择&#xff0c;它们的规模和数据功能各不相同。这篇博文将比较三种最受欢迎…

云服务器CPU内存/带宽配置怎么选择?

云服务器配置怎么选择&#xff1f;个人如何选择&#xff1f;企业怎么选择云服务器配置&#xff1f;腾讯云服务器CPU内存、带宽和系统盘怎么选择合适&#xff1f;个人用户可以选择轻量应用服务器&#xff0c;企业用户可以选择云服务器CVM&#xff0c;企业用户可以选择标准型S5云…

5.1 树和二叉树的定义

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 5.1.1 树的定义 我的理解&#xff1a; 在计算机科学中&#xff0c;树是一种非线性数据结构&#xff0c;由节点&#xff08;或称为顶点&#xff09;和边…