ProfileInstaller

  
使库能够预先填充提前编译跟踪,以便 ART 读取。
最新更新 稳定版 发布候选版 Beta 版 Alpha 版
2024 年 10 月 2 日 1.4.1 - - -

声明依赖项

要添加对 ProfileInstaller 的依赖项,您必须将 Google Maven 仓库添加到您的项目中。请阅读Google 的 Maven 仓库了解更多信息。

在应用或模块的 build.gradle 文件中添加您所需 artifact 的依赖项

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.4.1"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.4.1")
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中的现有问题。您可以通过点击星形按钮为您已发现的现有问题投票。

创建新问题

有关更多信息,请参阅问题跟踪器文档

版本 1.4

版本 1.4.1

2024 年 10 月 2 日

androidx.profileinstaller:profileinstaller:1.4.1 已发布。版本 1.4.1 包含这些提交

Bug 修复

  • 通过按顺序发出多个进程信号,修复了对多进程基线配置文件录制的支持。此修复要求在宏基准测试/基线配置文件模块中更新到 androidx.benchmark:benchmark-macro:1.4.0-alpha02,并在应用中更新到 androidx.profileinstaller:profileinstaller:1.4.1。(I0f519b/366231469

版本 1.4.0

2024 年 9 月 18 日

androidx.profileinstaller:profileinstaller:1.4.0 已发布。版本 1.4.0 包含这些提交

自 1.3.0 以来的重要变更

  • ProfileInstaller 现在支持在 API 35+ 上捕获/安装配置文件。对于平台版本更新,不再需要更新 ProfileInstaller。(6f9f6fa
  • 修复了在 Android U (API 34) 以及模拟器上丢弃着色器时崩溃的问题。(I031cab/274314544
  • 修复了 V_015S 配置文件格式中的方法标志转码。(aosp/2906631aosp/2847740

版本 1.4.0-rc01

2024 年 9 月 4 日

androidx.profileinstaller:profileinstaller:1.4.0-rc01 已发布,自上一个 beta 版本以来没有变化。版本 1.4.0-rc01 包含这些提交

版本 1.4.0-beta01

2024 年 8 月 21 日

androidx.profileinstaller:profileinstaller:1.4.0-beta01 已发布,自上一个 alpha 版本以来没有变化。版本 1.4.0-beta01 包含这些提交

版本 1.4.0-alpha02

2024 年 8 月 7 日

androidx.profileinstaller:profileinstaller:1.4.0-alpha02 已发布。版本 1.4.0-alpha02 包含这些提交

新功能

  • 为 Profile Installer 添加了 API 35 支持。(6f9f6fa

Bug 修复

  • 移除了对新平台 API 的手动访问概述,因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 时,这会自动通过 API 建模发生,并且在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)时适用于所有构建。建议不使用 AGP 的客户端更新到 D8 8.1 或更高版本。有关更多详细信息,请参阅本文。(If6b4cb/345472586

版本 1.4.0-alpha01

2024 年 2 月 7 日

androidx.profileinstaller:profileinstaller:1.4.0-alpha01 已发布。版本 1.4.0-alpha01 包含这些提交。

Bug 修复

  • 为配置文件验证器添加了“未嵌入配置文件”错误代码。(Ifb109b/313928520
  • 修复了在 Android U (API 34) 以及模拟器上丢弃着色器时崩溃的问题。(I031cab/274314544
  • 在配置文件安装程序中启用了对 Android U 的支持。(Iaf177
  • 修复了 Android U 上配置文件安装程序因进程启动时未创建空当前配置文件而失败的问题。(Ie3899
  • 修复了 V_015S 配置文件格式中的方法位图转码。(aosp/2906631)和(aosp/2847740

版本 1.3

版本 1.3.1

2023 年 5 月 3 日

androidx.profileinstaller:profileinstaller:1.3.1 已发布。版本 1.3.1 包含这些提交。

Bug 修复

  • 在配置文件安装程序中启用了对 Android U 的支持(Iaf177
  • 修复了 Android U 上配置文件安装程序因进程启动时未创建空当前配置文件而失败的问题。(Ie3899

版本 1.3.0

2023 年 3 月 22 日

androidx.profileinstaller:profileinstaller:1.3.0 已发布。版本 1.3.0 包含这些提交。

自 1.2.0 以来的重要变更

  • 修复了 ProfileInstallReceiver 中的 NullPointerException。(b/243851384
  • 添加了 ProfileVerifier API,用于在应用内检查基线配置文件是否已编译、已计划或缺失。(I263a4b/246653809
  • 添加了一个新的 shell 广播,使 Macrobenchmark 能够将内存中的配置文件数据完全刷新到磁盘,以便包含在基线配置文件生成中。这是使用 macrobenchmark 库通过 BaselineProfileRule 捕获基线配置文件,以及使用 CompilationMode.Partial(warmupIterations) 评估配置文件性能所必需的。
  • 添加了诊断代码,用于检测压缩的基线配置文件。由于 CPU 开销,Profileinstaller 无法在 Macrobenchmarks 或生产环境中安装压缩的基线配置文件,因此在构建应用时,应通过更新到 Studio/AGP Electric Eel 或 bundletool 版本 1.13.1 来避免使用它们。(I86413b/261998144
  • 添加了宏基准测试的钩子,用于捕获配置文件和丢弃着色器缓存,这对于在未 Root 的设备上生成基线配置文件或进行宏基准测试是必需的。(Ie0a7db/250083467b/253094958)(Ia5171b/231455742

版本 1.3.0-rc01

2023 年 3 月 8 日

androidx.profileinstaller:profileinstaller:1.3.0-rc01 已发布,自上一个 beta 版本以来没有变化。版本 1.3.0-rc01 包含这些提交。

版本 1.3.0-beta01

2023 年 2 月 8 日

androidx.profileinstaller:profileinstaller:1.3.0-beta01 已发布。版本 1.3.0-beta01 包含这些提交。

API 变更

  • 移除了对处理压缩配置文件的支持——打开和解压缩会导致启动期间 CPU 使用率降低数十毫秒,因此改为添加诊断来发现不正确压缩的基线配置文件。(I86413b/261998144

版本 1.3.0-alpha03

2023 年 1 月 11 日

androidx.profileinstaller:profileinstaller:1.3.0-alpha03 已发布。版本 1.3.0-alpha03 包含这些提交。

Bug 修复

  • 启用了对压缩或未压缩基线配置文件的处理(Ic61a0
  • 通过修复 profileinstaller 清单中的广播注册,修复了 MacrobenchmarkScope.dropShaderCache() 不再崩溃的问题。(I5c728b/258619948

版本 1.3.0-alpha02

2022 年 11 月 9 日

androidx.profileinstaller:profileinstaller:1.3.0-alpha02 已发布。版本 1.3.0-alpha02 包含这些提交。

API 变更

  • 为基准测试添加了一个钩子,用于丢弃着色器缓存,以确保冷启动时性能一致,尤其是在使用预热迭代的配置文件进行编译时。此更新是使用 benchmark-macro-junit4:1.2.0-alpha05 或更高版本测量冷启动所必需的。有关基准测试库的 API 更改,请参阅基准测试 1.2.0-alpha07 页面。(Ia5171b/231455742

版本 1.3.0-alpha01

2022 年 10 月 24 日

androidx.profileinstaller:profileinstaller:1.3.0-alpha01 已发布。版本 1.3.0-alpha01 包含这些提交。

API 变更

  • 添加了 ProfileVerifier API,用于在应用内检查基线配置文件是否已编译、已计划或缺失。(I263a4b/246653809
  • 添加了一个新的 shell 广播,使 Macrobenchmark 能够将内存中的配置文件数据完全刷新到磁盘,以便包含在基线配置文件生成中。这是使用 macrobenchmark 库通过 BaselineProfileRule 捕获基线配置文件,以及使用 CompilationMode.Partial(warmupIterations) 评估配置文件性能所必需的。(Ie0a7db/250083467b/253094958

版本 1.2.2

版本 1.2.2

2023 年 1 月 11 日

androidx.profileinstaller:profileinstaller:1.2.2 已发布。版本 1.2.2 包含这些提交。

Bug 修复

  • 启用了对压缩或未压缩基线配置文件的处理(Ic61a0

版本 1.2.1

版本 1.2.1

2022 年 12 月 7 日

androidx.profileinstaller:profileinstaller:1.2.1 已发布。版本 1.2.1 包含这些提交。

新功能

  • 为 S_V2 (API 32) 和 TIRAMISU (API 33) 启用了 profileinstaller (b/254900303)。

版本 1.2.0

版本 1.2.0

2022 年 7 月 27 日

androidx.profileinstaller:profileinstaller:1.2.0 已发布。版本 1.2.0 包含这些提交。

自 1.1.0 以来的重要变更

  • 添加了对 Android 12 及更高版本中使用的 ART 配置文件格式的支持。
  • ProfileInstallReceiver 中添加了新 API,以便在使用基线配置文件时通过 Macrobenchmarks 获得更一致的结果。

版本 1.2.0-rc01

2022 年 6 月 15 日

androidx.profileinstaller:profileinstaller:1.2.0-rc01 已发布。版本 1.2.0-rc01 包含这些提交。

  • 此版本与 androidx.profileinstaller:profileinstaller:1.2.0-beta03 相同。

版本 1.2.0-beta03

2022 年 6 月 1 日

androidx.profileinstaller:profileinstaller:1.2.0-beta03 已发布。版本 1.2.0-beta03 包含这些提交。

版本 1.2.0-beta02

2022 年 5 月 18 日

androidx.profileinstaller:profileinstaller:1.2.0-beta02 已发布。版本 1.2.0-beta02 包含这些提交。

  • 没有变化,需要支持 Compose 1.2.0-beta02 版本。

版本 1.2.0-beta01

2022 年 5 月 11 日

androidx.profileinstaller:profileinstaller:1.2.0-beta01 已发布。版本 1.2.0-beta01 包含这些提交。

API 变更

  • ProfileInstallReceiver 中添加了新的 API,以便在使用基线配置文件时通过 Macrobenchmarks 获得更一致的结果。(If2ae5b/215740637

Bug 修复

  • 配置文件安装程序在 Android 12 及更高版本上尝试使用元数据 V_001 格式时会抛出有用的消息。(aosp/1978526b/217502387
  • 配置文件安装程序现在使用 androidx.startup 版本 1.1.1。(aosp/2077099b/229828376

版本 1.2.0-alpha02

2022 年 1 月 26 日

androidx.profileinstaller:profileinstaller:1.2.0-alpha02 已发布。版本 1.2.0-alpha02 包含这些提交。

此版本与 1.2.0-alpha01 相同。

版本 1.2.0-alpha01

2022 年 1 月 12 日

androidx.profileinstaller:profileinstaller:1.2.0-alpha01 已发布。版本 1.2.0-alpha01 包含这些提交。

新功能

  • 添加了对 Android 12 及更高版本中使用的 ART 配置文件格式的支持。

版本 1.1.0

版本 1.1.0

2022 年 2 月 9 日

androidx.profileinstaller:profileinstaller:1.1.0 已发布。版本 1.1.0 包含这些提交。

版本 1.1.0-rc01

2021 年 12 月 15 日

androidx.profileinstaller:profileinstaller:1.1.0-rc01 已发布,自 1.1.0-beta04 以来没有更新。版本 1.1.0-rc01 包含这些提交。

版本 1.1.0-beta04

2021 年 12 月 1 日

androidx.profileinstaller:profileinstaller:1.1.0-beta04 已发布。版本 1.1.0-beta04 包含这些提交。

版本 1.1.0-beta03

2021 年 11 月 17 日

androidx.profileinstaller:profileinstaller:1.1.0-beta03 已发布。版本 1.1.0-beta03 包含这些提交。

Bug 修复

  • 更新以支持 Compose 1.1.0-beta03

版本 1.1.0-beta02

2021 年 11 月 3 日

androidx.profileinstaller:profileinstaller:1.1.0-beta02 已发布。版本 1.1.0-beta02 包含这些提交。

Bug 修复

  • 更新以支持 Compose 1.1.0-beta02

版本 1.1.0-beta01

2021 年 10 月 27 日

androidx.profileinstaller:profileinstaller:1.1.0-beta01 已发布。版本 1.1.0-beta01 包含这些提交。

  • 自 1.1.0-alpha07 以来没有变化。

版本 1.1.0-alpha07

2021 年 10 月 13 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha07 已发布。版本 1.1.0-alpha07 包含这些提交。

新功能

  • 添加了对 Android N 上 profm 的支持

版本 1.1.0-alpha06

2021 年 9 月 29 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha06 已发布。版本 1.1.0-alpha06 包含这些提交。

Bug 修复

  • 修复了 N、O 和 O_MR1 上 profileinstaller 转码问题。(I12d75

版本 1.1.0-alpha05

2021 年 9 月 15 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha05 已发布。版本 1.1.0-alpha05 包含这些提交。

Bug 修复

  • 修复了 Android Nougat 和 Android Oreo 上 multidex apk 的配置文件转码问题。

版本 1.1.0-alpha04

2021 年 9 月 1 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 已发布。版本 1.1.0-alpha04 包含这些提交。

Bug 修复

  • 修复了 ProfileInstaller,使其更易于使用基线配置文件的应用使用 CompilationMode.BaselineProfile 运行 MacroBenchmarks。(I42657b/196074999

版本 1.1.0-alpha03

2021 年 8 月 18 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 已发布。版本 1.1.0-alpha03 包含这些提交。

Bug 修复

  • 将 profileinstaller 跳过行为更改为将 PackageInfo.lastUpdatedTime 记录在应用文件目录中的文件中,并在下次运行时在安装配置文件之前进行比较。(Ib93d1
  • 调整 P、Q、R 设备上的配置文件格式以符合 ART 要求(I84e89

版本 1.1.0-alpha02

2021 年 8 月 4 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha02 已发布。版本 1.1.0-alpha02 包含这些提交。

更新以兼容 Compose 1.1.0-alpha01。

版本 1.1.0-alpha01

2021 年 7 月 21 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha01 已发布。版本 1.1.0-alpha01 包含这些提交。

Bug 修复

  • 修复了在某些情况下会触发严格模式的错误。

版本 1.0

版本 1.0.4

2021 年 10 月 13 日

androidx.profileinstaller:profileinstaller:1.0.4 已发布。版本 1.0.4 包含这些提交。

  • 更新以支持 Compose 1.0.4

版本 1.0.3

2021 年 9 月 29 日

androidx.profileinstaller:profileinstaller:1.0.3 已发布。版本 1.0.3 包含这些提交。

  • 更新以支持 Compose 1.0.3

版本 1.0.2

2021 年 9 月 1 日

androidx.profileinstaller:profileinstaller:1.0.2 已发布。版本 1.0.2 包含这些提交。

Bug 修复

  • 为 P、Q、R 设备添加了配置文件转码。此更改意味着这些设备将转码配置文件,确保写入的配置文件始终可被 ART 使用。以前在这些平台上会跳过转码,这有时会导致 ART 无法处理源配置文件。开发人员 API 没有变化。

版本 1.0.1

2021 年 8 月 4 日

androidx.profileinstaller:profileinstaller:1.0.1 已发布。版本 1.0.1 包含这些提交。

更新以兼容 Compose 1.0.1。

版本 1.0.0

2021 年 7 月 28 日

androidx.profileinstaller:profileinstaller:1.0.0 已发布。版本 1.0.0 包含这些提交。

1.0.0 的主要功能

Profile installer 是一个新的库,它允许库和应用程序定义“配置文件规则”并将 ART 配置文件信息与 APK 捆绑,此库将在应用程序启动后安装这些配置文件。这可以用于提高应用程序性能。

有关这些配置文件规则及其工作原理的更多信息,请参阅1.0.0-beta01 的详细发布说明。

版本 1.0.0-rc02

2021 年 7 月 14 日

androidx.profileinstaller:profileinstaller:1.0.0-rc02 已发布。版本 1.0.0-rc02 包含这些提交。

版本 1.0.0-rc01

2021 年 7 月 1 日

androidx.profileinstaller:profileinstaller:1.0.0-rc01 已发布。版本 1.0.0-rc01 包含这些提交。

这是一个 RC 版本,与 beta 版本没有变化。

版本 1.0.0-beta01

2021 年 6 月 16 日

androidx.profileinstaller:profileinstaller:1.0.0-beta01 已发布。版本 1.0.0-beta01 包含这些提交。

库用途

Profile installer 是一个新的库,它允许库和应用程序定义“配置文件规则”并将 ART 配置文件信息与 APK 捆绑,此库将在应用程序启动后安装这些配置文件。这可以用于提高应用程序性能。

此配置文件安装通过 androidx.startup 库完成。如果出于任何原因想要禁用配置文件安装,可以修改清单以将其删除


       <provider
           android:name="androidx.startup.InitializationProvider"
           android:authorities="${applicationId}.androidx-startup"
           android:exported="false"
           tools:node="merge">
           <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer"
                     tools:node="remove" />
       </provider>

如果您的应用有非平凡的启动要求,并且您希望使用 ProfileInstaller.writeProfile API 手动触发配置文件安装,这尤其有用。

什么是配置文件规则?

  • 库的配置文件规则在位于 src/main 或等效目录中的文本文件 baseline-prof.txt 中指定。文件每行指定一个规则,其中规则是用于匹配库中的方法或类的模式。这些规则的语法是人类可读的 ART 配置文件格式的超集,该格式在使用 adb shell profman --dump-classes-and-methods ... 时使用。这些规则有两种形式,用于针对方法或类。

  • 方法规则将具有以下模式

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • 类规则将具有以下模式

    <CLASS_DESCRIPTOR>
    
  • 这里的 <FLAGS> 是一个或多个字符 HSP,表示该方法是否应标记为“热门”、“启动”或“启动后”。

  • <CLASS_DESCRIPTOR> 是目标方法所属类的描述符。例如,类 androidx.compose.runtime.SlotTable 的描述符将为 Landroidx/compose/runtime/SlotTable;

  • <METHOD_SIGNATURE> 是方法的签名,包括方法的名称、参数类型和返回类型。例如,LayoutNode 上的方法 fun isPlaced(): Boolean 的签名为 isPlaced()Z

  • 这些模式可以包含通配符(***?),以便一个规则可以包含多个方法或类。

这些规则有什么作用?

  • 带有标志 H 的方法表示该方法是“热门”方法,应提前编译。

  • 带有标志 S 的方法表示该方法在启动时调用,应提前编译,以避免启动时编译和解释方法的开销。

  • 带有标志 P 的方法表示该方法在启动后调用。

  • 此文件中存在的类表示该类在启动期间使用,应在堆中预先分配,以避免类加载的开销。

这是如何工作的?

  • 库可以定义这些规则,这些规则将打包在 AAR artifact 中。当构建包含这些 artifact 的 APK 时,这些规则将合并在一起,合并后的规则用于构建特定于 APK 的紧凑二进制 ART 配置文件。然后,ART 可以在 APK 安装到设备上时利用此配置文件,以便提前编译应用程序的特定子集,从而提高应用程序的性能,尤其是首次运行的性能。请注意,这对可调试的应用程序没有影响。

  • 规则文件应命名为 baseline-prof.txt 并放置在主源集的根目录中(它应与您的 AndroidManifset.xml 文件是同级文件)

  • 目前,这些文件仅在您使用 Android Gradle Plugin 7.0+ 时才会被利用,并且目前仅通过 gradle.properties 中的标志启用

    # Enable adding baseline-prof.txt files to AAR artifacts, and binary profiles to APKs
    android.experimental.enableArtProfiles=true
    

配置文件需要平衡

  • 正确制作的配置文件可以正确地优先处理将在启动路径和性能关键中出现的方法和类,从而产生最佳结果;但是,在配置文件中包含过多的方法或类最终可能在内存消耗和磁盘使用方面产生负面影响,因此建议在定义自己的配置文件规则时保守地开始。